2

管理者がログインできるようにするコードをphpで作成しました。パスワード情報はテーブルから取得されます。そのような種類のコードを書くのは良い習慣ではないことはわかっています。準備済みステートメントまたは mysqli_ を使用する必要がありますが、SQL クエリの脆弱性について知りたいだけです。自分のコードが SQL インジェクションに対してどのように脆弱であるかを知りたいだけですか? パスワードの制限を回避するにはどうすればよいですか。パスワード フィールドに password = 'anything' OR 'x'='x' を入力しようとしましたが、バイパスされません。これは私のコードです:-

if(isset($_POST["Submit"]))
{
include 'db_connect.php';   
$user=$_POST['user'];
$pass=$_POST['pass'];
$checkquery="select * from adminlogin where password='$pass' ";
$queryex= mysql_query($checkquery);
$row= mysql_fetch_array($queryex);
$checkcasepass = $row['password'];
if($user=='admin' && strcmp($checkcasepass,$pass)==0)
{
setcookie("admin",$user);
setcookie ("student", "", time() - 3600);
header("location: admin option.php");
}
else
{
echo  "Sorry User Name and Password is Wrong";
}
}

テスト目的で、クエリ文字列を次のように変更しました:-

$checkquery="select * from adminlogin where password='$pass' OR 1=1 ";

しかし、うまくいきませんでした。魔法の引用符が原因でしょうか? しかし、私は PHP 5.4.3 を使用しており、マジック クォートは既に減価償却されています。なぜ SQL インジェクションが機能しないのか疑問に思っています。?

4

2 に答える 2

1

先頭'anything' OR 'x'='x'anything' OR 'x'='x' と末尾の ' は既に存在します。実際には、試行しているクエリは次のようになります。

select * from adminlogin where password=''anything' OR 'x'='x''

これは有効な SQL ではありません

于 2013-05-03T16:41:39.560 に答える
1

インジェクションをテストするために選択した方法は間違っています。

このコードはインジェクションを許可しますが、検証コードは見つかった行数ではなく戻り値をチェックします。

繰り返しになりますが、SQL インジェクションについて言えば、このコードで問題ありません。インジェクションは問題ありません。

于 2013-05-03T17:02:52.983 に答える