テキストエリアの値を設定するために 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">