我如何使这个查询sql注入证明?

时间:2011-03-29 18:05:56

标签: php sql sql-injection

如何使这个查询sql注入证明?

$sql=mysql_query("SELECT * FROM updates ORDER BY item_id DESC LIMIT 16");
while($row=mysql_fetch_array($sql))
{
$msg_id=$row['item_id'];
$message=$row['item_content'];
}

或者有人可以向我展示一些示例,或者向我发送教程链接 我对此非常陌生,如果有人能帮助我,那就太棒了! :)

5 个答案:

答案 0 :(得分:7)

该查询已经是“SQL注入证明”。

当您获取外部字符串并将其连接到查询中而不使用绑定变量,转义或正确清理时,就会发生SQL注入攻击。

例如,如果您的查询如下所示:

$sql=mysql_query("SELECT * FROM updates where order_ref = '$order_ref' ORDER BY item_id DESC LIMIT 16");

如果变量$order_ref可能受到环境的影响(HTTP查询参数,命令行参数,基本上任何可能受用户影响的事物),那么您就会遇到问题。如果有人可以将值传递给您的应用程序,例如“'; delete from updates;”那么您就会遇到问题。

上面示例中的一个解决方案是首先转义$order_ref中的值,如下所示:

$safe_order_ref = mysql_real_escape_string($order_ref);
$sql=mysql_query("SELECT * FROM updates where order_ref = '$safe_order_ref' ORDER BY item_id DESC LIMIT 16");

答案 1 :(得分:1)

已经是因为你没有使用任何用户输入来构建它。

答案 2 :(得分:0)

注射防护。当您从几个字符串构造SQL时会发生注入,其中一些字符串来自用户,$ _GET或$ _POST或$ _COOKIE集合。你的是静态的 - 没有地方可以注射。

答案 3 :(得分:0)

我的男人。您只是从数据库中提取数据。当用户通过您将在查询本身中使用的表单或GET变量(不推荐使用GET)提供输入时,就会发生SQL注入。

假设您有一个发布某人姓名的表单。

您的SQL看起来像:

$query='SELECT * FROM people WHERE name='.$_POST['name'];

您需要使用mysql_real_escape_string()或其他一些SQL清理函数来清理用户发布的数据。

另一件事:没有什么是SQL注入证明。似乎总有一种有趣的小方法可以利用。你想做的就是让人们放弃这么费时。

继续保持兄弟。

答案 4 :(得分:0)

  

SQL注入是代码注入   利用安全性的技术   漏洞发生在   应用程序的数据库层。该   用户存在漏洞   输入被错误地过滤   用于字符串文字转义字符   嵌入在SQL语句或用户中   输入不是强类型的   从而意外地执行。它是   一个更一般的类的实例   可能发生的漏洞   无论何时编程或编写脚本   语言嵌入另一个语言。   SQL注入攻击也是已知的   作为SQL插入攻击。

有关详细信息,请参阅HERE。阅读本文后,您应该知道为什么每个人都说,您的查询已经是SQL注入证明。