私は外部のWebサイトに送信されるユーザーフォームを持っており、そのWebサイトからの応答には固有のコード(「a87ju89y」など)が含まれています。そのコードは私にとって重要なので、準備されたステートメントを使用してデータベースに入力します。私は、PHPスクリプトにこのような新しいコードがあるかどうかを確認するために、データベースを照会分ごとに実行し、cronジョブ持っているバックエンドに2段目のSQLインジェクション
:
$con = mysqli_connect($servername, $username, $password, $database);
if (mysqli_connect_errno()){
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$results = mysqli_query($con, "SELECT user FROM stack ORDER BY ID");
$cronresults = mysqli_query($con, "SELECT run FROM kook ORDER BY ID");
$row = mysqli_fetch_assoc($results);
$cron = mysqli_fetch_assoc($cronresults);
$row2 = $row['user'];
$cron2 = $cron['kook'];
を私の質問は、それは私が準備されたステートメントを必要とするです単に情報を引き出して、ある種のSQLインジェクションを防ぐのですか?もし私がそれについてどうやって行くのですか?
セカンドレベルの注入が発生した最初の結果を使用する場合の結果
LIMIT 1
を追加します別のクエリ。あなたが 'select userdata from table'をしてから、' userid = userid = 'から削除しました。 $ row ['userdata'] '、' userdata'がidであると期待していますが、実際には '0または1 = 1'です。今すぐすべてのデータがなくなります。 https://en.wikipedia.org/wiki/SQL_injection#Second_order_SQL_injection – chris85大丈夫です、ありがとう! – electricjelly
ほとんどの場合、SQLに値を渡すときはいつでも、パラメータ化されたクエリを使用してください。 – chris85