Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
限制中的SQL注入(来自PHP)_Php_Mysql_Sql_Code Injection - Fatal编程技术网

限制中的SQL注入(来自PHP)

限制中的SQL注入(来自PHP),php,mysql,sql,code-injection,Php,Mysql,Sql,Code Injection,我有以下代码: $req = mysql_query("SELECT * FROM table WHERE id='".mysql_real_escape_string($id)."' ORDER BY lastupdate DESC LIMIT ".mysql_real_escape_string($_GET['start']).", 15 "); 出于某种原因,我似乎可以将一些不可用的SQL代码注入到$\u GET['start']参数中 例如:1100 url编码如下:+1%2C+100

我有以下代码:

$req = mysql_query("SELECT * FROM table WHERE id='".mysql_real_escape_string($id)."' ORDER BY lastupdate DESC LIMIT ".mysql_real_escape_string($_GET['start']).", 15 ");
出于某种原因,我似乎可以将一些不可用的SQL代码注入到$\u GET['start']参数中

例如:1100 url编码如下:+1%2C+100%23

我很确定你不能真的用它来破坏或窃取我的db UNION的任何东西,因为ORDER BY无法工作,mysql\u query不允许多个查询

我知道我应该添加intval以确保它是一个整数。我的主要问题是为什么。。。它为什么有效?我真的不明白


非常感谢您的见解。

您应该将其解析为整数

$req = mysql_query("SELECT * FROM table WHERE id='".(int)$id."' ORDER BY lastupdate DESC LIMIT ".(int)$_GET['start'].", 15 ");

此外,应强烈考虑使用或


mysql_*和mysqli_*函数不知道表的结构是什么。函数mysql\u real\u escape\u string将所有内容都视为字符串,只是为了使其安全。

您不能利用此漏洞,因为为了对单个SELECT应用order BY或LIMIT,您需要将子句放在包含SELECT的括号内。然而,我读了一遍又一遍,我仍然不知道为什么。。。我唯一想的是,也许这是一个引用的东西。。。但我不能这样做:限制'1',15,所以我看不到一种方法来保证它的安全…你需要了解mysql\u real\u escape\u string的实际功能。不幸的是,关于如何正确使用它,本文没有那么具体。“转义字符串中的特殊字符以用于SQL语句”应该改为:“转义字符串中的特殊字符以用于MySQL字符串文字”。是的,我知道。。。但是为什么它会起作用呢?为什么它会绕过mysql\u real\u escape\u字符串?我已经更新了答案。。你觉得满意吗?