-2

可能重复:
在 PHP 中防止 SQL 注入的最佳方法?

这是我的代码

$user_name = "admin";
$password = "123456";
$database = "jbit";
$server = "localhost";
$id = $_POST['id'];
$db_handle = mysql_connect($server, $user_name, $password);
$db_found = mysql_select_db($database, $db_handle);

if ($db_found) {

$SQL = "SELECT * FROM jbit WHERE htno='$id'";
$result = mysql_query($SQL);
$sum = "SELECT htno, SUM(tm) AS tech, ROUND(SUM(tm)/7.5, 2) AS divi, SUM(credits) AS cred , SUM(CASE WHEN credits <= 0 THEN 1 ELSE 0 END) AS log,
SUM(CASE WHEN credits > 0 THEN 1 ELSE 0 END) AS pass, SUM(CASE WHEN em >= 0 THEN 1 ELSE 0 END) AS atm, SUM(CASE WHEN em >= -2 THEN 1 ELSE 0 END) AS tot
FROM jbit WHERE htno='$id'";
$result1 = mysql_query($sum);

请帮助我确保此代码的安全,以便我可以避免 SQL 注入

4

3 回答 3

3

好吧,似乎人们对您投了反对票,因为您在解决问题方面表现出很少的努力。如果您想免受注入攻击,则必须使用带有准备好的语句的 mysqli 或 PDO API 。MySQL API 总是容易受到注入的影响,这就是不建议使用它的原因。

看起来您的应用程序还处于早期阶段,所以我建议重构以使用更好的 API,如MySQLiPDO

于 2012-09-23T06:53:40.370 回答
1

更好的方法是

  1. mysqli_query()
  2. PDO::查询()

您可以使用下面的功能,但我/我们建议您不要使用功能,因为mysql_* 现在不再由社区维护和更新。

它只为你的知识

 $id = mysql_prep($_POST['id']);


function mysql_prep($value)
{
    $magic_quotes_active = get_magic_quotes_gpc();
    $new_enough_php = function_exists("mysql_real_escape_string"); // i.e. PHP >= v4.3.0
    if ($new_enough_php) { // PHP v4.3.0 or higher
        // undo any magic quote effects so mysql_real_escape_string can do the work
        if ($magic_quotes_active) {
            $value = stripslashes($value);
        }
        $value = mysql_real_escape_string($value);
    } else { // before PHP v4.3.0
        // if magic quotes aren't already on then add slashes manually
        if (!$magic_quotes_active) {
            $value = addslashes($value);
        }
        // if magic quotes are active, then the slashes already exist
    }
    return  $value ;
}

好读

在 PHP 中防止 SQL 注入的最佳方法是什么?

于 2012-09-23T06:48:39.903 回答
-1
$id = mysqli_real_escape_string(($_POST['id']));

使用 mysql_real_escape_sting 过滤每个输入。

如果这不起作用,请尝试使用已弃用的替代品 mysql_real_escape;

于 2012-09-23T06:50:40.093 回答