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");

URLは次のようになります:server / demo / page / 10

したがって、ユーザーがserver / nedjma / baniss/1000000000000000000000と入力した場合

エラー番号:1064

SQL構文にエラーがあります。5行目の「1000000000000000000000,10」付近で使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。

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);

最後に 1 つ注意してください - あなたが投稿したコードは、SQL インジェクションに対してオープンではありません。CodeIgniter の Active Record クラスは、入力をエスケープしてチェックします。が数値でない場合$from、Active Record は SQL の作成時に LIMIT 句を生成しません。

于 2009-09-17T04:16:35.703 に答える