6

重複の可能性:
mysql_real_escape_stringの後にストリップスラッシュを使用する

私は最近SQLインジェクションの防止について読んでいて、基本を学ぶことができるように、さまざまな機能間の理解を深めようとしています。

私は読んだmysql_real_escape_stringことがありますが、SQL構文と混同されないように、基本的に「特殊」と見なされる文字をエスケープしていることを理解していますか?

さて、それが少なくともある程度真実であると仮定すると、stripslashes関数を?と組み合わせて使用​​する必要がありmysql_real_escape_stringますか?私はstripslashesそれが何であり、それが何のためにあるのか疑問に思っています。

4

4 に答える 4

12

を使用stripslashesした直後に入力で使用mysql_real_escape_stringすると、効果的に元に戻すことができます。おそらく他の理由がありますstripslashesが、私の場合、魔法の引用である恐怖を元に戻すためにそれが必要だっただけです。実際にはの反対ですaddslashes

addslashes必ずしも入力をエスケープするのと同じようにエスケープする必要mysql_real_escape_stringはなく、同じ目的で使用することはできません。

よりも優れているのはmysql_*、のようにプリペアドステートメントを使用することを読む必要がありますPDOmysql_*そうすれば、またはについて心配する必要もありませんstripslashes(魔法の引用符を除く)。

于 2012-12-13T06:00:22.753 に答える
4

この関数stripslashes()は、円記号でエスケープされている文字をエスケープ解除します\。これは通常、を介してエスケープされる文字列でaddslashes()、またはPHP構成がmagic_quotes有効になっている場合に使用されます。

などのSQLエスケープ関数を使用する場合、MySQLアダプターはデータベースへの挿入時にのみ値をエスケープするため、mysql_real_escape_string()使用する必要はありません。スラッシュは実際の値に残りません。すでにエスケープされている変数でstripslashes()使用する場合は、を使用してエスケープされたかのようにスラッシュが削除されますが、かなり無意味です。stripslashes()mysql_real_escape_string()addslashes()

SQLインジェクションを防ぐことが目標である場合は、古い方法ではなく、 MySQLiまたはPDOを調べることを強くお勧めします。mysql_MySQLiとPDOはどちらもプリペアドステートメントを提供します。これを適切に使用すると、特別なエスケープ関数の呼び出しを覚えたり、データが変更されるかどうを心配したりすることなく、SQLインジェクションを防ぐことができます。

于 2012-12-13T06:01:10.790 に答える
1

チェックアウト

http://php.net/manual/en/language.types.string.phphttp://php.net/manual/en/function.stripslashes.phphttp://php.net/manual/en/mysqli
_
real-escape-string.php

エスケープ関数は、スラッシュ'\'を追加して、有効なクエリSTRINGS(クエリ自体ではなく)を終了してインジェクションを防ぐために使用できる文字をエスケープします。stripslashes関数はこれらのスラッシュを削除するために使用されますが、必要なスラッシュを削除するため、クエリ文字列の作成に実際に使用することはできません。

MySQLからの結果は「スラッシュ」(エスケープ)されないため、結果を処理するときにストリップスラッシュは必要ありません。

于 2012-12-13T06:12:18.983 に答える
1

ストリップスラッシュ関数はUn-quotes a quoted string

例 :

<?php
echo stripslashes("how\'s going on?");
?>

上記のコードの出力は次のようになります。

how's going on?

詳細については:

http://php.net/manual/en/function.stripslashes.php

于 2012-12-13T06:02:31.290 に答える