2

ID として渡される uri セグメントを暗号化して、データベース テーブルにクエリを実行したいと考えています。

たとえば、私は使用しています

$id=urlencode($this->encrypt->encode($user['id']));

を使用して別のコントローラーでデコードされます

$id_decrypt=$this->encrypt->decode(urldecode($id));

暗号化と説明をテストしましたが、うまくいくようです。ただし、URLを試してみると.

http://localhost/app_name/index.php/profile/view_profile/b98N98YNqoEA7yI1tavIY1s51RhiSHKGCFarU4A6XgFUMB%2BI3KwiEA23h1XITmkq1qPABqGs8e1sdP16v4og8g%3D%3D

一部の URL では期待どおりに動作しますが、一部の URL ではブラウザ エラー 404 (オブジェクトが見つかりません) が発生します。暗号化されたセグメントを削除すると、インデックス機能にアクセスできます。これの考えられる原因は何ですか?

4

2 に答える 2

4

ファイル ./application/config/config.php 内に、許可された uri 文字のセクションがあります。デフォルトの文字は次のとおりです。

$config['permitted_uri_chars'] = 'a-z 0-9~%.:_-;

一部のプロジェクトでは、これも変更しました。

$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\'+,-=';

ただし、CodeIgniter エンジニアが述べているように、

影響を完全に理解していない限り、これを変更しないでください!!

于 2011-05-31T21:12:19.087 に答える
2

あなたが抱えている問題は+サインにあると思います。デコードすると に%2B変わります。+CI の URL ルーターは、デコードされた URL で動作します。

+スペースを表すために使用される URL の特殊文字です。これにより、URL ルーターがトリップしている可能性があります。


アップデート:

これは、実際には CI の XSS 保護スクリプトに関連している可能性があります。入力をチェックする受け入れられた URL 文字のリストがあります。使用している暗号化では、入力に多くの楽しい文字が含まれています。(%3D=) です。これら(+を含む)はおそらくつまずいているものです。

これを修正するには:

  • 別の暗号化アルゴリズムを使用できます。あなたが知っているものは、ファンキーなキャラクターを追加しません.
  • 結果を Base64 エンコードできます。Base64は、英数字以外のものを返すべきではありません(私の記憶が正しければ)。ただし、結果の長さが長くなる可能性があることに注意してください
  • (非推奨) CI 構成のxssフィルタリング セクションで「許可された文字」を編集できます。
于 2011-05-31T18:43:54.063 に答える