防止innerHTML属性中的XSS

时间:2014-09-19 11:42:36

标签: 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

1 个答案:

答案 0 :(得分:2)

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