2014-09-19 72 views
2

我已经这个下面的代码在innerHTML的属性防止XSS

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

+0

凹凸?如果它有效 – garuda 2014-09-21 16:45:53

回答

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更多的技巧。