0

クライアントからサーバーにajax経由でHTML文字列を送信しようとしています。「許可されていないキー文字」エラーが発生し続けます。CodeIgniterが言っているので、これを取り$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-';、何も設定しませんでしたが、それでもDisallowedKeyCharactersエラーが発生します。$config['permitted_uri_chars'] = '';Leave blank to allow all characters -- but only if you are insane.

これが私がそれを送ろうとしている方法です:

var content = '<p class="MsoNormal">Hi {$first_name}</p>\n<p class="MsoNormal">My name is Bill, etc etc.</p>';

$.get('/task/preview_template', {content:content}, function(data) {
    console.log(data); //Disallowed Key Characters
});
4

1 に答える 1

0

_clean_input_keysはエラーをスローしている原因である可能性が高く、許可されている文字の範囲外の文字が多数あります"/^[a-z0-9:_\/-]+$/i"

これを処理する可能性があると私が考えることができるいくつかの方法があります:

  1. _clean_input_keysを変更して、余分な文字を受け入れるようにします。もちろん、これは何らかの理由で内部関数であり、何をしているのかを理解していない限り変更しないでください。(または、HTMLエンコード用の特殊文字と文字列のHTMLエンコードを許可するように変更できる場合があります。これにより、そのような文字を_clean_input_keysに追加することによるセキュリティの侵害を軽減できます。)

  2. 文字列を送信する前にエンコードしてから、サーバー側でデコードします。これは、あなたと関係するコンピューターの両方でもう少し作業が必要ですが、_clean_input_keysをそのまま維持し、双方向で信頼でき、信頼できないエンコーディングを見つけた場合は、文字列を送信できるようにする必要があります。許可されていない文字を生成します。GETを使用しているため、サーバーだけでなくブラウザ側でもGET入力制限に遭遇する可能性があります。

  3. GETの代わりにPOSTを使用して、コンテンツをデータオブジェクトとして送信します。次に$_POST、の代わりにサーバー上の変数を使用します$_GET。これは機能するかもしれませんが、REST動詞の少し非標準的で非標準的な使用法です。

  4. テンプレートコンテンツをサーバーに保存し、JavaScriptに保存するのではなく、名前で参照します。もちろん、これは、JavaScriptでテンプレートコンテンツをその場で生成していない場合にのみ機能します。ただし、すべてのJavaScript呼び出しで同じテンプレートを使用している場合は、そもそもJavaScriptからその情報を送信する理由はありません。

于 2012-12-18T18:02:10.160 に答える