基本SQL注入?

时间:2009-09-11 21:16:07

标签: php sql mysql sql-injection

我在previous question告诉我,我的查询很容易被SQL注入。

get_stats = mysql_query("SELECT * 
                               FROM visitors 
                              WHERE site='$_GET[site]' 
                                AND date BETWEEN '$start_date' AND '$end_date' ");

解决此问题的最简单方法是什么?你是否有关于注射问题的进一步阅读? (我可能会想念谷歌的东西)。谢谢!

3 个答案:

答案 0 :(得分:16)

使用Prepared Statements

在大多数情况下,准备好的声明会以安全的方式将您的查询与参数结合起来。

答案 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是最基本,最简单的安全形式。