私はグーグル全体を検索して、以下をバイパスする方法を確認しました(これは DVWA の高レベルのセキュリティによるものです)。
$id = $_GET['id'];
$id = stripslashes($id);
$id = mysql_real_escape_string($id);
if (is_numeric($id)){
$getid = "SELECT first_name, last_name FROM users WHERE user_id = '$id'";
$result = mysql_query($getid) or die('<pre>' . mysql_error() . '</pre>' );
$num = mysql_numrows($result);
$i=0;
while ($i < $num) {
$first = mysql_result($result,$i,"first_name");
$last = mysql_result($result,$i,"last_name");
echo '<pre>';
echo 'ID: ' . $id . '<br>First name: ' . $first . '<br>Surname: ' . $last;
echo '</pre>';
$i++;
}
}
それをクラックすることは可能ですか?
DVWA に慣れていない方のために、DVWA に関する YouTube ビデオをご覧ください: http://www.youtube.com/watch?v=oMV0JZVxvdQ
また、私の他の懸念は中レベルです。それは機能しますがmysql_real_escape_string()
、低レベルから同じ SQL インジェクションを使用し、引用符を削除すると、保護がバイパスされます。何故ですか?なぜそんなに簡単にバイパスできたのmysql_real_escape string
ですか?
Medium レベルのコード (簡潔なバージョン) は次のとおりです。
$id = $_GET['id'];
$id = mysql_real_escape_string($id);
$getid = "SELECT first_name, last_name FROM users WHERE user_id = $id";
おそらくはるかに安全なので、PDOを使用したいと思います。それについてのあなたの考えを教えてください。
よろしくお願いします。