2009-06-27 14 views
1


私はhere SQLインジェクションについて読むと、次のログインフォームであることを試してみました:SQLインジェクションの試みPHP 5.2.6

<html><body> 
     <form method='post' action='login.php'> 
      <input type='text' name='user'/> 
      <input type='text' name='pass'/> 
      <input type='submit'/> 
     </form> 
</body></html> 

とPHPコード:

<?php 
$user = $_POST['user']; 
$pass = $_POST['pass']; 
$query = "Select * from users where user='$user' AND pass='$pass'"; 
echo $query; 
mysql_connect('localhost','root',''); 
mysql_select_db('test'); 
$res = mysql_query($query); 
if($res) $row = mysql_fetch_assoc($res); 
if($row) echo 'yes'; 
?> 

私が知りましたが、$ pass変数にはすでにすべての特殊文字がエスケープされていました。 mysql _ real _ PHPの5.2.6で_の文字列をエスケープする必要はありませんか?

答えて

3

PHPサーバーがMagic Quotesを使用するように設定されている可能性があります。 PHPスクリプトで受信したすべてのデータを自動的にエスケープするPHPでの非推奨の設定。これは廃止され、PHP 6で削除されます。Here are Zend's reasonsマジッククォートを削除しました。

多くのものを動作させるが、他のものを壊す「魔法」に頼らない方がよい。明示的に入力をエスケープすることはより信頼性が高く、より良いコードを設計することができます。たとえば、すべての入力を同じ方法でエスケープする必要はありません。

4

サーバ設定でMagic Quotesが有効になっているため、値がエスケープされる可能性があります。マジッククォートは非常に悪いと考えられます。自動的に着信データをエスケープする機能がある場合とない場合があります。実行時に自分で行う方が良いです。多くはです。マジッククオートの詳細については

、そしてなぜ彼らは悪いです、そしてどのようにこれらのSOの質問/回答のいくつかを見てみましょう、それらを無効にする方法:

3

いいえ、私はここにいるとは思わない。この例でphpが特殊文字を魔法のようにエスケープするかどうかに関わらず、インタプリタはmysql特化あなたのクエリー引数でエスケープします。

このコードには脆弱性が存在する可能性が非常に高いと思います。

関連する問題