如何防止文本中的脚本标记执行?

时间:2011-03-26 05:54:14

标签: javascript html

我的浏览器中有一个文本框。无论你在文本框中输入什么,点击 okay 按钮,文本都会通过AJAX请求提交服务器,然后将该消息传播给剩下的人,包括我。

消息显示在<div>

如果我在该消息中输入了html或脚本标签,那么我的问题是它们没有出现在消息<div>中并且它们正在执行。

如果我打开类似标签打开并以脚本结束,因为中间代码正在客户端执行,我该如何阻止执行,我也能够在传播到所有人的消息中传播<script>标签。

2 个答案:

答案 0 :(得分:2)

您是否尝试过替换html字符实体?例如,将所有<替换为&lt;

答案 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;
}

jsFiddle