0

例:私は有効なURLを持っています:

http://localhost/article/154

ここで、154はdb内の記事の$ idであり、コントローラーの記事は次のようになります。

function index ($id = '')
{

// some code here

}

さて、私が次のようなものを入力すると:

http://localhost/article/154dsdead34

そのIDがデータベースにないため、エラーが発生します。しかし、phpエラーはページに表示され、ページ全体が混乱しています。

代わりに、これを処理できるcustom404というコントローラーへのリダイレクトが必要です(または、何らかの理由でそれが不可能な場合は、少なくともホームページへの直接リダイレクト('/');)

(大きな$ id番号またはdbに見つからない)のようなバリアントに対する同じ修正:

http://localhost/article/3004534534534234600234

または(その他のパラメーター)

http://localhost/article/154/something/derer/asdasd

CodeIgniterでそのようなセキュリティチェックを行う方法は?

4

2 に答える 2

3

これを行うには非常に多くの方法があります。

関数内で、($id = NULL)空のエラーをスキップするように定義します。最初のステートメントは次のようになります。if ( ! is_numeric($id)) show_404();

$id = (int)$id;に変わるはずの154dsdead34を実行することもできます154

ルーティングもオプションです。何が好きですか?

あなたはこのようにすることができます。関数実行内:

if ( ! preg_match("~^article/\d+$~", $this->uri->uri_string())) {
    // Redirect user
}

それに応じて変更します。~正規表現を開いたり閉じたりします。それはしばしば/ですが、~あなたが逃げる必要はないように/\/)。^文字列の始まりであり$、終わりです。\d+と等しく[0-9]+、1桁以上のケースが必要です。私はそれが理にかなっていることを願っています。

于 2012-11-07T09:38:26.023 に答える
0

configフォルダーのroutes.phpを使用して、6桁の数字のみを確認するために使用する必要があります

$route['article/([0-9]{1,6})'] = 'article/$1' ;

他のすべてのケースを404に言及するか、他のコントローラーに送信します

于 2012-11-07T08:01:43.803 に答える