これが真である理由を探しています(codeigniterのデフォルト設定ファイルから)。
なぜ codeigniter がこの URL サニタイズが非常に重要なように機能するのかを知りたいです。オフにするのではなく、好奇心と、この機能を持たないフレームワークを使用してもよいかどうかを知るためです。
/*
|--------------------------------------------------------------------------
| Allowed URL Characters
|--------------------------------------------------------------------------
|
| This lets you specify with a regular expression which characters are permitted
| within your URLs. When someone tries to submit a URL with disallowed
| characters they will get a warning message.
|
| As a security measure you are STRONGLY encouraged to restrict URLs to
| as few characters as possible. By default only these are allowed: a-z 0-9~%.:_-
|
| Leave blank to allow all characters -- but only if you are insane.
|
| DO NOT CHANGE THIS UNLESS YOU FULLY UNDERSTAND THE REPERCUSSIONS!!
|
*/
これまでに見た唯一の理由は次のとおりです。
- ハッカーは独創的なので、オフにしないでください
- ユーザーによる SQL インジェクションの防止
- http://yoursite.com@hacker.comなどの別のサイトへのなりすましを防止する
- URL エンコーディング用
- ホワイトリストはブラックリストよりも優れている
1 番目と 5 番目の理由は、基本的に非隔離者です。URL を使用する理由 ファンキーな URL にセキュリティ上の問題がない場合、ブラックリストは必要ないため、このホワイトリストは必要ありません。見知らぬ URL があなたのサイトをハッキングできない場合、実際にセキュリティ ホールを明らかにできるものに移動するよう強制するのではなく、独創的な無害な実験を許可するのは、時間の無駄遣いです。
2 番目の理由には、2 つの理由で欠陥があります。まず、このサニタイズは、ほとんどのインジェクション試行が見られると予想されるクエリ文字列または POST データでは使用されません。第二に、これはこれらの文字をエスケープせず、それらを含むすべてのリクエストを拒否します。私の投稿にアポストロフィが含まれていたために Stack Overflow が pageload によって強制終了された場合、私はユーザーとして動揺します。
理由 3 と 4 は単に当てはまりません。理由 3 は、ユーザーが yoursite.com にアクセスすると思って、実際には hacker.com にたどり着くからです。これを防ぐためにできることは何もありません。リクエストを受け取ることはありません。同様に、番号 4 は、これが URL を解析するのではなく生成しているという誤解に導かれているようです。このコードは、この時点で有効な URL であると確信できるものを解析しています。Codeigniter は、この正規表現を実行する前に URI 文字をデコードします。
これらは私が聞いた答えであり、理解できないか、まだ見つけていない本当の理由があるか、コードがほとんど役に立たないかのいずれかです。私を啓発できるセキュリティの専門家はいますか?