【问题标题】:How to prevent script tags in text from executing?如何防止文本中的脚本标签执行?
【发布时间】:2011-03-26 05:54:14
【问题描述】:

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

消息出现在<div>

我的问题是,如果我在该消息中键入 html 或脚本标签,它们不会出现在消息 <div> 中并且它们正在执行。

如果我在客户端执行的中间代码中输入了 like tags opens and end with script,我该如何阻止执行,并且我能够在传播给所有人的消息中传播 <script> 标签。

【问题讨论】:

  • 将您的文本作为文本处理,而不是 HTML。
  • @alex 确实。考虑一个答案;-)
  • @psd 谢谢,好的,我会写一个。

标签: javascript html


【解决方案1】:

如果您希望文本始终为文本,则将其视为文本,并且不要使用它来设置 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.

【讨论】:

  • 谢谢@alex。但我不明白。你只明白我的问题..请给我简短的说明..please.please
  • 例如使用它来设置 innerHTML 属性。什么是手段??以及如何更新文本节点。
  • @suresh 查看更新。您还需要自己做一些研究。
  • 还有一个疑问 ...if(textContent in element) .. 显示文本内容上方的特殊符号是什么??
  • @suresh 查看更新的代码,我不小心使用了反引号作为字符串分隔符:)
【解决方案2】:

您是否尝试过用 html 字符实体替换?例如用&amp;lt;替换所有&lt;

【讨论】:

    猜你喜欢
    • 2019-06-27
    • 1970-01-01
    • 2021-04-15
    • 2018-02-08
    • 2018-06-07
    • 2012-12-21
    • 2020-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多