如何使这个查询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'];
}
或者有人可以向我展示一些示例,或者向我发送教程链接 我对此非常陌生,如果有人能帮助我,那就太棒了! :)
答案 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注入证明。