【发布时间】:2013-08-22 02:31:32
【问题描述】:
我正在使用 jQuery ajax 调用来设置文本区域的值。
如果我使用 php 的 htmlentities() 然后使用 jquerys $(textarea).val() 它不会显示字符而是显示实体。
没有 htmlentities() 一切看起来都很好。使用 val() 时没有 XSS,但如果在没有 jquery 的情况下访问脚本,则当然容易受到攻击。
会发生什么?
.load() 有效,但我不能使用它。 load() 只是在我使用 BBcodefunctions 后中断(DOM 不会更新 textarea,在 Firebug 中一切看起来都应该如此)
使用 val() 后,html() 中断。
为什么?
jQuery 代码:
$.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">
【问题讨论】:
-
使用此功能后aktuell.de.selfhtml.org/artikel/javascript/bbcode/#beispielJquerys .html() 方法中断。它做了它应该做的事情并为元素设置文本,但 dom 没有更新,新内容仍然不可见,而旧内容仍然存在。 Firebug 显示了更改。为什么?
标签: jquery ajax textarea xss html-entities