2

addslashesとmysql_real_escape_stringを使用して、PHPログインへの入力をサニタイズしようとしていました。 addslashesを使用しますが、mysql_real_escape_stringは使用しません。MySQLのリアルエスケープ文字列

は、ここで私が正常にログインできるようにするものの例です:

$user = addslashes($_POST['user']);<br/> 
$password = addslashes($_POST['password']); 

そして、これはしません:

$user = mysql_real_escape_string($_POST['user']);<br/> 
$password = mysql_real_escape_string($_POST['password']); 

また、私の他のフィールドの一部が含まれていアポストロフィ。 addslashesを使用すると、DBのエントリがエスケープされないため、何も返されません。 mysql_real_escape_stringを使ってこれを修正できるかどうか疑問に思っていましたが、どうしたらよいか分かりません。

+2

'addslashes()'は、mySQLデータのエスケープには使用できません。失敗した実際のユーザーデータを表示できますか?実行しているクエリ –

+0

実際のSQL文はどのように見えますか? 'addslashes'はあなたがしたいことをしません。 –

+0

magic_quotes/addslashesは' mysql_set_charset( "ASCII");またはLatin1が設定されている場合にのみ適法です。これは '--ansi'モードなどで動作する新しいMySQLサーバでは失敗する可能性があります。 – mario

答えて

12

常にaddslashesの代わりにmysql_real_escape_stringを使用してください。データベースに接続していることを確認してからを実行してください。そうでないとエラーになります。

+0

ありがとう、それはそれを解決しました。 – user490895

+2

画面にエコーするときに特定のHTMLをアクティブにしたくない場合は、テキストを表示する前にhtmlentities()を使用します。両方の戦略を組み合わせるとセキュリティが強化されます。 – mbokil

1

mysql_real_escape_string()は%と_をエスケープしません。 LIKE、GRANT、またはREVOKEと組み合わせた場合、これらはMySQLのワイルドカードです。

そして最も重要なことは、ユーザーの入力を信頼しないことです。

セキュリティを強化するには、htmlspecialcharsとstrip_tagsを使用してください。

1

時々、ユーザは'と入力することがありますが、この記号は別の方法として扱いますが、テーブルに挿入することはできません。この種のエラーを避けるためにMySQLのリアルエスケープ文字列を使用するように制限します。

注:これを実装すると、データベースに接続する必要があります。それ以外は動作しません。

関連する問題