php - 如何使用 mysqli 防止 mysql 注入(inject) 1=1?

标签 php mysql sql-injection

<分区>

Possible Duplicate:
Best way to prevent SQL Injection in PHP

在我的网站上,用户可以提交帖子和删除他们的帖子。

要删除帖子,他们点击链接 /posts.php?deletid=X,其中 X 是帖子在数据库中的 ID(例如:1)。

点击后,它将运行以下内容:

if(isset($_GET['deleteid'])) { 
    $deleteid = $_GET['deleteid'];
        $sql = "DELETE from `posts` WHERE `id`=".mysql_real_escape_string($deleteid).";";
        $query = mysql_query($sql);
        header('Location: posts.php');
        exit(); 
}

问题是它容易受到 1=1 SQL 注入(inject)的攻击。如果他们在地址栏中输入 /posts.php?deletid=1 OR 1=1; 它将删除数据库中的所有帖子。

在这个问题中:How can I prevent SQL injection in PHP? , 我意识到我需要使用 mysqli 语句,我试图让它工作但没有成功..

有人可以确切地告诉我如何使用 mysqli 来防止这种情况吗?

最佳答案

您需要将 mysql_real_escape_string 的值放在引号中才能产生有用的效果。

$sql = "DELETE from `posts` WHERE `id`='".mysql_real_escape_string($deleteid)."'";

或者,尝试使用 intval,而不是用于字符串的 mysql_real_escape_string

关于php - 如何使用 mysqli 防止 mysql 注入(inject) 1=1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11366839/

相关文章:

php - 立即在 WordPress 中运行预定的 WP Cron 任务

mysql - 数据库无法在 WordPress 主题的根上运行

mysql - 版本控制独立记录并根据配置列出所有记录

php - 具有多个 Poules 的 SQL 锦标赛表

sql - MongoDB如何避免SQL注入(inject)困惑?

php - 绕过 mysql_real_escape_string() 的 SQL 注入(inject)

mysql - 内联注释如何绕过 SQL 注入(inject) Web 应用程序防火墙?

php - 尝试向数据库添加列时出错

php - require once 添加一个新行来响应

php - div标签背景的CSS