我发现CodeIgniter中的分页脚本有错误:
$this->db->where("by_id",$user_id);
$this->db->order_by("date","desc");
$this->db->limit(10,$from);
$query = $this->db->get("status");
网址如下所示:server / demo / page / 10
所以如果用户输入server / nedjma / baniss / 1000000000000000000000
你可以告诉我,这是什么错误?错误号码:1064
您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以便在第5行的“1000000000000000000000,10”附近使用正确的语法
SELECT * FROM(
status
)WHEREby_id
='58'ORDER BYdate
desc LIMIT 1000000000000000000000,10
答案 0 :(得分:4)
这不是CodeIgniter漏洞或错误。这只是一个SQL / MySQL问题。我用phpMyAdmin进行了一些测试,你可以使用的最大偏移量大约是18000000000000000000。
任何更大的内容,您将收到SQL语法错误。如果您想防止发生此错误,请检查以确保$from
不大于18 x 10 ^ 18,或创建您自己的自定义错误页面。您也可以关闭错误报告 - 在CI的index.php顶部,error_reporting(0);
最后一点 - 您发布的代码不适用于SQL注入。 CodeIgniter的Active Record类为您转义并检查您的输入。如果$from
不是数字,则Active Record在创建SQL时不会生成LIMIT子句。