1

XAMPPでのPHP5.2.6の使用:ここ
で SQLインジェクションについて読み、次のログインフォームで試してみました:

<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変数にはすでにすべての特殊文字がエスケープされているということでした。では、 PHP 5.2.6でmysql_の実際の_エスケープ文字列を使用する必要はありませんか?_

4

3 に答える 3

4

サーバー構成でMagicQuotesが有効になっているため、値がエスケープされる場合があります。魔法の引用は、基本的にあなたが言及した正確な理由のために、非常に悪いと見なされます。受信データを自動的にエスケープする機能がオンになっている場合とオンになっていない場合があることに依存することは安全ではありません。実行時に自分で行う方がはるかに優れています。

マジッククォートの詳細、およびそれらが悪い理由、およびそれらを無効にする方法については、これらのSOの質問/回答のいくつかを参照してください。

于 2009-06-27T15:00:20.340 に答える
3

いいえ、あなたがここにいるとは思いません。この例でphpが特殊文字を魔法のようにエスケープするかどうかに関係なく、インタープリターはクエリ引数に対してmysql固有のエスケープを実行しません。

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

于 2009-06-27T15:01:13.287 に答える
3

PHPサーバーがMagicQuotesを使用するように構成されている可能性があります。PHPスクリプトのすべての受信データを自動的にエスケープするPHPの非推奨設定。これは非推奨であり、PHP6で削除されます。MagicQuotesを削除するZendの理由は次のとおりです。

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

于 2009-06-27T15:02:32.630 に答える