1

我在 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 行的 '10000000000000000000000, 10' 附近使用正确的语法

SELECT * FROM ( status) WHERE by_id= '58' ORDER BY datedesc LIMIT 1000000000000000000000, 10

你能告诉我这是什么错误吗?

4

1 回答 1

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 子句。

于 2009-09-17T04:16:35.703 回答