【问题标题】:Preventing XSS in innerHTML attribute在 innerHTML 属性中防止 XSS
【发布时间】:2014-11-14 00:05:24
【问题描述】:

我有以下代码

   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"&gt;&lt; img/src='x'onerror=alert('XSS')&gt;

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

【问题讨论】:

标签: javascript security dom xss innerhtml


【解决方案1】:

您需要对输出进行 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 了解更多提示。

【讨论】:

    猜你喜欢
    • 2011-10-26
    • 1970-01-01
    • 2015-08-20
    • 2013-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-25
    • 2012-10-28
    相关资源
    最近更新 更多