我在previous question告诉我,我的查询很容易被SQL注入。
get_stats = mysql_query("SELECT *
FROM visitors
WHERE site='$_GET[site]'
AND date BETWEEN '$start_date' AND '$end_date' ");
解决此问题的最简单方法是什么?你是否有关于注射问题的进一步阅读? (我可能会想念谷歌的东西)。谢谢!
答案 0 :(得分:16)
在大多数情况下,准备好的声明会以安全的方式将您的查询与参数结合起来。
答案 1 :(得分:8)
$ _ GET ['site']是一个直接来自浏览器中URL的值,这意味着用户可以轻松地将此值更改为他们想要的任何值,您应该在发送之前检查/清理该值,实际上是所有值到数据库。
这样的事情将是一个开始,仍然可以使用更多的工作,有很多方法可以做到这一点,我会创建一个自定义函数/类,以便轻松地通过全站点传递所有变量,这可以简单地重复这样的东西
$site = mysql_real_escape_string($_GET['site']);
$start_date = mysql_real_escape_string($start_date);
$end_date = mysql_real_escape_string($end_date);
get_stats = mysql_query("SELECT * FROM visitors WHERE site='$site' AND date >= '$start_date' AND date <= '$end_date' ");
答案 2 :(得分:2)
mysql_real_escape_string是最基本,最简单的安全形式。