2014-09-19 193 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更多的技巧。