Php 基本SQL注入?

Php 基本SQL注入?,php,sql,mysql,sql-injection,Php,Sql,Mysql,Sql Injection,有人在一封信中告诉我,我的查询很容易被SQL注入 get_stats = mysql_query("SELECT * FROM visitors WHERE site='$_GET[site]' AND date BETWEEN '$start_date' AND '$end_date' "); 解决这个

有人在一封信中告诉我,我的查询很容易被SQL注入

get_stats = mysql_query("SELECT * 
                               FROM visitors 
                              WHERE site='$_GET[site]' 
                                AND date BETWEEN '$start_date' AND '$end_date' ");
解决这个问题最简单的方法是什么?关于注射,你有没有进一步的阅读?(在谷歌上我可能会错过一些东西)。谢谢

使用


在大多数情况下,预先准备好的语句可以安全地将查询与参数结合起来。

是最基本、最简单的安全形式。

$\u 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' ");
$site=mysql\u real\u escape\u字符串($\u GET['site']);
$start\u date=mysql\u real\u escape\u字符串($start\u date);
$end\u date=mysql\u real\u escape\u字符串($end\u date);

get_stats=mysql_query(“从访问者中选择*,其中site='$site'和date>='$start_date'和date,只要没有人导航到“page.php?site=google.com”;drop database--”,你很好;)我总是尝试
';肆意破坏;
,但我还没有找到一个实现
肆意破坏
语句的数据库不支持多语句,因此
;删除数据库--
-类似的攻击在这种情况下不起作用;-)Volkerk,我在测试数据库上尝试了它,你是对的,删除不起作用。不要忘了退出
开始日期
结束日期
。你不只是想在发送到数据库之前进行清理…在发送之前进行清理什么都可以!SQL注入只是其中之一(常见)在这类事情中遇到的问题,但您也可以得到许多其他问题,例如HTML和JS注入…这不会在所有情况下都保存您…假设要比较的列是一个数字,在这种情况下,变量是不带引号的。该转义函数不会阻止“5或1=1”(例如)从被放在那里开始。