javascript - 防止innerHTML属性中的XSS

标签 javascript security dom xss innerhtml

我有以下代码

   nver+="<SPAN CLASS=focusField>"+text.substring(start,end)+"</SPAN>";
   if(text.length>end)
   nver+=text.substring(end,text.length);
   results.innerHTML=nver.replace(/[\n]/g,"<BR>");

因此文本变量被篡改

textarea:ABCD"> < img/src='x'onerror=alert('XSS')>

第一text.substring(start,end)已输出'textarea'text.substring(end,text.length)还有剩余:ABCD">< img/src='x'onerror=alert('XSS')>

如何应对此 XSS?有什么方法可以使用 createtextnode 或某些功能来解决这个问题吗?如果是这样,我该如何使用 createtextnode 来做到这一点? ?

最佳答案

您需要对输出进行 HTML 编码

  function htmlEscape(str) {
        return String(str)
                .replace(/&/g, '&amp;')
                .replace(/"/g, '&quot;')
                .replace(/'/g, '&#39;')
                .replace(/</g, '&lt;')
                .replace(/>/g, '&gt;');
  }

  nver+=text.substring(end,text.length);

  // HTML encode (i.e. escape the nver variable for correct output)
  nver = htmlEscape(nver);

  results.innerHTML=nver.replace(/[\n]/g,"<BR>");

查看 DOM based XSS Prevention Cheat Sheet了解更多提示。

关于javascript - 防止innerHTML属性中的XSS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25933160/

相关文章:

javascript - 使用 JavaScript 检测是否选择了文本区域内容

java - Tomcat + SSL 配置 + 客户端

html - 什么是 DOM 回流?

javascript - 你如何测试模态 jquery 对话框是否失去了焦点?

javascript - 如何使用vue js获取元素?

javascript - 在 ng-repeat 中使用 "for...of"

asp.net - iFrame 中的 SSL 登录

java - Tomcat 7 的 CA 证书安装过程

java - 为什么 org.w3c.dom 中的 getNodeValue() 不能解析 ü、ö、ä 和 &c.?

javascript - Chrome 和 Opera 中的选项选择问题