-1

このコードはバグがありますか?

<?php

if (isset($_GET['Submit'])) {

    // Retrieve data

    $id = $_GET['id'];
    $id = mysql_real_escape_string($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++;
    }
}
?>

mysql_real_escape_string を使用しているにもかかわらず、攻撃者は引用符なしでコードを挿入できます。

これは、DVWA の脆弱な Web アプリケーションの一部です。

関数 mysql_real_escape_string() は引用符をブロックしますが、私には引用符をまったく許可していないようです...

私は正しいですか?

4

2 に答える 2

1

mysql_real_escape_string()SQL インジェクション攻撃の可能性を低くする必要がありますが、より強力なセキュリティを備えたMySQLi (MySQL 改良)PDOなど、廃止されていない MySQL データベース API を使用することを強くお勧めします。

$numまた、変数を割り当てるべき存在しmysql_num_rows()ない関数を呼び出していると思いますmysql_numrows

于 2013-02-03T15:29:00.240 に答える
0

mysql_real_escape_string()関数の引数を、SQL内の引用符内で使用できる形式にします。それらを使用する必要があります。また、数値を扱う場合でも、いつでも使用できます。

SQL で引用符を使用しないと、文字列をエスケープするセキュリティが妨げられます。

于 2013-02-03T19:48:27.167 に答える