2011-04-22 51 views
2

客戶端腳本正在將一些HTML從服務器拉入頁內彈出框(shadowbox等)。沒有<script>標記的JavaScript代碼注入

我懷疑這是通過jQuery的.html()某處。

長話短說,下面將失敗:

<script type="text/javascript"> myFunc(); </script> 

不幸的是,我不能修改客戶端代碼(所以我無法通過,並通過一個備選信道執行JavaScript代碼)。我得到這個工作

一種方式是通過返回下面的HTML的一部分:

<img src="." onerror=" myFunc(); "/> 

現在回想起來,我可以用一個有效的圖片網址onload,但如果這兩個事件的工作,我d寧願使用不良路徑使瀏覽器立即引起調用(並減少一次HTTP /緩存查找)。

至於迄今爲止的設置,我希望聽到您對此的看法,也許是更好的解決方案。

編輯:

假設這是我不能亂用的客戶端代碼:

jQuery.get('test.php',function(data){ 
    jQuery('#popup').html(data); 
}); 

這是由test.php返回的數據:

Hello! 
<script type=text/javascript> myFunc(); </script> 

而且以下是我提出的解決方案:

Hello! 
<img src="." onerror=" myFunc(); "/> 
+0

我敢肯定,如果頁面通過AJAX拉動HTML,那麼你必須通過某種事件觸發你的JS。你唯一的缺點是它是一個額外的服務器平臺。 – 2011-04-22 20:04:48

+0

你是否意識到你基本上在問如何做潛在的XSS攻擊? – BalusC 2011-04-22 20:05:04

+0

@BalusC - 如果它運行在同一個域上,爲什麼它會是XSS?我只需要從一個HTML塊中執行JS部分。 – Christian 2011-04-22 20:08:12

回答

0

您可以在<body>上使用onload。

<body onload="myFunc();"> 
+0

這不會很明顯。我沒有返回完整的HTML頁面,只是一個摘錄。我將通過澄清來編輯我的問題 – Christian 2011-04-22 20:21:06

+0

您是否有權訪問文件test.php?在這種情況下,我會返回一個JSON,它是一個包含兩個字段的數組。 JS和HTML。然後你可以使用JavaScript的'eval()'並注入HTML。 – 2011-04-22 20:24:50

+1

不,我已經在「替代渠道」部分對此進行了說明。順便說一句,'test.php'是假設的 - 它實際上是CMS的輸出,所以攻擊CMS修補程序的核心是困難和有問題的。 – Christian 2011-04-22 20:26:41