-3

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

我的代码问题很抱歉。

$yeri=无过滤器;

mysql_query("Insert Into deney (vid,yazan,email,yorum,ip,tarih,durum,yeri) values ('$id', '$yazan', '$email', '$yorum', '$ip', Now(),'1','$yeri')");

如何将攻击站点的数据更新到此查询?我如何获得这种预防措施。如何更新我表中的数据

4

2 回答 2

2

请改用 mysqli 或 PDO。

在 pdo 中,您的代码看起来像 - 这是SAFE

$query = $pdo->prepare("Insert Into
    deney (vid,yazan,email,yorum,ip,tarih,durum,yeri)
    values (:id, :yazan, :email, :yorum, :ip, Now(), 1, :yeri)");
$query->execute(array(
    'id' => $id,
    'yazan' => $yazan,
    'email' => $email,
    'yorum' => $yorum,
    'ip' => $ip,
    'yeri' => $yeri
));

这样 PDO 会为您进行转义,并且可以安全地防止 sql 注入。

要通过 PDO 创建 mysql 连接,请使用:

$pdo = new PDO("mysql:dbname=$dbname", $username, $password);

我通常也会在其中添加第 4 个参数,因为我喜欢用 utf-8 编写所有代码,所以第 4 个参数就是我的例子array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")

只是为了澄清以下内容是不安全的 - 不要使用

$pdo->prepare("Insert Into
        deney (vid,yazan,email,yorum,ip,tarih,durum,yeri)
        values ('$id', '$yazan', '$email', '$yorum', '$ip', Now(), 1, '$yeri')");

如果您坚持使用 mysql_query,但不推荐,您需要这样做

mysql_query("Insert Into deney (vid,yazan,email,yorum,ip,tarih,durum,yeri) values ('"
    . mysql_real_escape_string($id) . "', '"
    . mysql_real_escape_string($yazan) . "', '"
    . mysql_real_escape_string($email) . "', '"
    . mysql_real_escape_string($yorum) . "', '"
    . mysql_real_escape_string($ip) . "', Now(),'1','"
    . mysql_real_escape_string($yeri) . "')");
于 2012-10-08T19:07:37.867 回答
0

如果您必须使用旧的 mysql 扩展或使用mysqli 扩展的预处理语句,您应该使用mysql_real_escape_string转义所有输入。

请注意,这些mysql_功能已被弃用,如果可能,您不应该使用它们(并且应该在您的情况下)。

于 2012-10-08T19:04:32.507 回答