1

テキストエリアの値を設定するために jQuery ajax 呼び出しを使用しています。

PHP の htmlentities() を使用してから jquerys $(textarea).val() を使用すると、文字ではなくエンティティが表示されます。

htmlentities() がなければ、すべてがうまく見えます。val() を使用している間は XSS はありませんが、スクリプトが jquery なしでアクセスされた場合、もちろん脆弱です。

何が起こるのですか?

.load() は機能しますが、使用できません。BBcode関数を使用した後、load()が壊れるだけです(DOMはテキストエリアを更新しません.Firebugではすべてがそうあるべきように見えます)

val() を使用した後、html() が壊れます。

なんで?

Jクエリコード:

$.ajax({ 
  type: 'GET', 
  encoding:"UTF-8", 
  dataType:"html",  
  contentType: "text/plain; 
  charset=UTF-8", 
  url: "/quote.php?id=1",
  context: document.body 
}).done(function(data) { $('textarea').val(data); }); 

PHP コード:

htmlentities($nonEncodedRawText, ENT_QUOTES, 'UTF-8')

テキストボックスの結果:

</textarea><script type="text/javascript">

直接アクセスの結果:

</textarea><script type="text/javascript">
4

2 に答える 2

0

htmlentities の代わりに htmlspecialchars() を試しましたか?

同様の問題を抱えた別のページを次に示します: Escapeing output safe for both html and input fields

于 2013-08-20T06:34:18.697 に答える