ホームページ  >  記事  >  バックエンド開発  >  CI がパーセント記号の最後の 2 桁を自動的に除外する問題の解決策 _PHP チュートリアル

CI がパーセント記号の最後の 2 桁を自動的に除外する問題の解決策 _PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:34:01895ブラウズ

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 のせいだと言いました。

:) くそー、URLDECODE、URI.php のコードを見ましたが、xss clean が機能しているので見逃していました。ありがとうございます。これですべてが完璧になりました。

そこで、core/security.php で xss_clean() 関数を見つけました。すべての関数本体コードをコメント アウトすると、入力では依然として %04 が除外されることがわかりますが、これは明らかに xss の問題ではありません。

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 文字が除外されます。これをコメントアウトするだけで問題は解決します。

この問題を解決するための思考プロセス全体を記録します。

http://www.bkjia.com/PHPjc/752355.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/752355.html技術記事 CodeIgniter で作成した Web サイトに $var = sprintf("%04d", 2); というコードを入力したいのですが、ライブラリに入った後のコードは $var = sprintf("d", 2); オンライン環境では、ローカル環境は...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。