-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 注入攻击的可能性,但是,强烈建议您使用未弃用的 MySQL 数据库 API,例如MySQLi(MySQL 改进)PDO,它们具有更强的安全性。

我也相信你正在调用一个不存在的函数,你在其中分配了它不$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 回答