繁体   English   中英

LIMIT中的SQL注入(来自PHP)

[英]SQL injection in LIMIT (from PHP)

我有以下代码:

$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代码注入$ _GET ['start']参数中。

例如: 1,100 # (网址编码如下: +1%2C+100%23

我敢肯定,您不能真正使用它来造成任何损害或从我的数据库中窃取任何东西(由于ORDER BY,UNION无法工作,并且mysql_query()不允许多次查询

我知道我应该添加intval()以确保它是整数。 我的主要问题是为什么...为什么起作用? 我真的不明白

非常感谢您的见解。

您应该将其解析为整数。

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

另外,您应该强烈考虑使用mysqliPDO

mysql_ *和mysqli_ *函数不知道表的结构是什么。 函数mysql_real_escape_string将所有内容视为字符串,并使其变得安全。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM