我的浏览器中有一个文本框。无论你在文本框中输入什么,点击 okay 按钮,文本都会通过AJAX请求提交服务器,然后将该消息传播给剩下的人,包括我。
消息显示在<div>
。
如果我在该消息中输入了html或脚本标签,那么我的问题是它们没有出现在消息<div>
中并且它们正在执行。
如果我打开类似标签打开并以脚本结束,因为中间代码正在客户端执行,我该如何阻止执行,我也能够在传播到所有人的消息中传播<script>
标签。
答案 0 :(得分:2)
您是否尝试过替换html字符实体?例如,将所有<
替换为<
。
答案 1 :(得分:0)
如果您希望文本始终为文本,则视为文本,不要使用它来设置innerHTML
属性。
改为更新文本节点。
例如,如果您在userInput
中有用户输入,并且想要显示它,则会将其视为文本,而不是HTML。
var element = document.body,
// For example
userInput = "Alex <script>alert('xss')</script>";
// Don't do this! Your input is text, not HTML.
// element.innerHTML = userInput;
// Use this instead
if ('textContent' in element) {
element.textContent = userInput;
} else {
element.innerText = userInput;
}