簡體   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