2011-01-09 10 views
0

可能性の重複:
What does mysql_real_escape_string() do that addslashes() doesn't?addslashes(string)だけでSQLインジェクションを防止できますか?

ない場合は、私がmysql_escape_stringを使用している、そしてそれは\ r \ nのような言葉に文字を追加し、私はそれを望んでいません..

+3

mysql_real_escape_stringは最終データに何も追加しません。それが起こった場合は、別の質問をしてください。他に何か起こっている可能性があります –

+2

mysql_real_escape_string()に問題がある場合は、Magic Quotesがオフになっていることを確認してください。 – keithjgrant

+0

どうすればいいですか? – Seth

答えて

5

いいえ、安全ではありません。代わりにmysql_real_escape_string()を使用してください。それは、文字列をエスケープするのに必要な以上に何かを加えてはいけません。

http://php.net/mysql-real-escape-string

これは、あまりにも他のデータベースに適用されます:拡張固有​​のエスケープ関数を使用します。

+0

なぜそれは安全ではありませんか? –

+0

@MichaelTontchevこれは、引用符だけでなく、すべてが適切な方法でSQL文字列のためにエスケープされるようにします。ここで良い説明があります:http://stackoverflow.com/questions/3473047 – Jonah

3

いいえ、addslashesは十分ではありません。 mysql_escape_stringは必ずしも十分ではありません。 mysql_real_escape_stringを使用してください。

追加したものが好きかどうかは関係ありませんが、クエリ構文が有効であることを確認するために文字をエスケープするだけです。これがあなたがやっていることのやり方になれば、あなたは何か間違ったことをしているのです。

2

また、mysqli関数とPrepared Statementsを使用することもできます。これは、すべての引用がデータの一部とみなされるため、最初は問題を回避します。

3

SQLインジェクションを防ぐ最も良い方法は、mysqliまたはPDOのプリペアドステートメントを使用することです。

関連する問題