0

よくあることかもしれませんが質問です。mysql_real_escape_string()タグを維持しながらアポストロフィを許可します。

私はこれを持っています:$name = stripslashes(mysql_real_escape_string($_POST['stadium_name']));

そして私はこれでそれをテストします:

$getInfoX = mysql_fetch_array(mysql_query("SELECT * FROM `stadiums` WHERE `stadium_name` = '$stadium_name'")) or die(mysql_error());

inject like のような例x'; DROP TABLE members; --や、アポストロフィを含む名前Stade de l'Aube... のような例を実行できますが、アポストロフィを含む名前を使用すると、次のようなエラーが発生します。

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Aube'' at line 1

私は何をしますか?

4

2 に答える 2

2

基本的に、安全上の理由から追加されたすべてのものを削除するmysql_real_escape_stringthroughの結果をチェーンします。stripslashesmysql_real_escape_string

したがって、安全に生成するクエリに含めることができる$stadium_name= "Fred's Stadium";入力mysql_real_escape_string($stadium_name)リターンがある場合"Fred\'s Stadium"

"SELECT * FROM `stadiums` WHERE `stadium_name` = 'Fred\'s Stadium'"

MySQL クエリとして。出力を呼び出すstripslashesmysql_real_escape_string、' の前の \ が削除されるため、クエリを送信します

"SELECT * FROM `stadiums` WHERE `stadium_name` = 'Fred's Stadium'"

MySQL では、文字列が 'Fred' の後にゴミが続くと見なされます (これは危険であることが判明する可能性があります)。

解決策は、別の変数を使用して mysql_real_escape_string の結果を格納することです。これは、データベース クエリでの使用には適していますが、ユーザーに表示するには不適切であるためです。

これが役立つことを願っています。

よろしく

TC

于 2012-11-09T02:54:11.057 に答える
1

あなたの問題はこれです:

$name = stripslashes(mysql_real_escape_string($_POST['stadium_name']));

stripslashes()エスケープを元に戻します。

おそらく、その関数が の回避策として使用されているのを見たことがあるでしょうmagic_quotes。適用する場合は、データベースのエスケープ関数の前に行ってください。

于 2012-11-09T02:53:57.277 に答える