CodeIgniter によって作成された Web サイトに、コードを入力したいと思います:
リーリーしかし、ライブラリに入った後、コードが次のようになっていることがわかりました
リーリーオンライン環境とローカル環境の両方でテストを行った結果、最終的にCodeIgniterシステムの問題であることが確認されました。問題解決のプロセスと思考方法について話しましょう:
1. config.php の allowed_uri_chars は?
リーリーstackoverflow で同様の質問がいくつか見つかりましたが、config.php の allowed_uri_chars を変更するだけという回答もありました。
そうですね...サンプル文字列をもう一度見てみると、「
The URI you submitted has disallowed characters
」が得られる理由は次のとおりです。簡単な説明: アンパサンド & を許可文字リストに追加します
リーリー
試してみましたがうまくいかなかったので、$config['permitted_uri_chars']を適用したコードを探しました。
2. core/Input.phpの_clean_input_keys()関数に問題があるのでしょうか?
リーリーこの関数は $config['permitted_uri_chars'] を使用して投稿データを直接フィルタリングします。これが主な原因です。それを分離し、post $var = sprintf("%04d", 2); をテストした結果、結果は依然として $var = sprintf("%04d", 2); であることがわかりました。%04 はフィルタされていません。参照してください。注意深く探さなければなりません。
3. xssの防御機構ですか?
Stackoverflow 誰かがこの問題を完璧に解決した、それは xss clean のせいだと言いました。
そこで、core/security.php で xss_clean() 関数を見つけました。すべての関数本体コードをコメント アウトすると、入力では依然として %04 が除外されることがわかりますが、これは明らかに xss の問題ではありません。:) くそー、URLDECODE、URI.php のコードを見ましたが、xss clean が機能しているので見逃していました。ありがとうございます。これですべてが完璧になりました。
4. 問題は _clean_input_data() 関数にあります
Input.php に戻り、_clean_input_data が _clean_input_keys に関連していることを確認します。
リーリー
そこで、_clean_input_data() の関数本体をコメントアウトしましたが、入力はフィルターされませんでした。スコープを絞り続けると、次のコードが問題を引き起こしていることがわかりました。リーリー
5. 犯人はremove_invisible_characters()関数を発見しましたでは、remove_invisible_characters() 関数とは何でしょうか?
この関数は core/Common.php にあり、私はそれを取り出しました:
リーリー
これらのコード行を見てください:リーリー
明確にしておきますが、%0 と %1 で始まる 3 文字が除外されます。これをコメントアウトするだけで問題は解決します。この問題を解決するための思考プロセス全体を記録します。