
近弄個(gè)東西,需要用到iframe,但是加載的網(wǎng)頁(yè)中有_blank,不能讓他跳出來(lái)。
如果想讓目的網(wǎng)址的_blank刪除,這是不可能的。
網(wǎng)上找了很多的資料,要么是跨域不能修改.要么就根本牛頭不對馬嘴
后來(lái),看到了html5里iframe有個(gè)叫sandbox的屬性把 iframe 里的網(wǎng)頁(yè)給關(guān)籠子里的屬性
所以,就來(lái)找找這個(gè)的用法.
<iframe sandbox="allow-same-origin allow-scripts allow-popups allow-forms"
src="http://spellingcontrole.com"
style="border: 0; width:130px; height:20px;"></iframe>
我們在上面的示例中看到了一些可能的沙盒標志,現在讓我們更詳細地研究一下該屬性的內部工作原理。
給定具有空沙盒屬性 ( <iframe sandbox src="..."> </iframe>) 的 iframe,框架文檔將被完全沙盒化,并受到以下限制:
JavaScript 不會(huì )在框架文檔中執行。這不僅包括通過(guò)腳本標簽顯式加載的 JavaScript,還包括內聯(lián)事件處理程序和 javascript: URL。這也意味著(zhù)將顯示 noscript 標簽中包含的內容,就像用戶(hù)自己禁用了腳本一樣。
加框的文檔被加載到一個(gè)唯一的原點(diǎn),這意味著(zhù)所有的同源檢查都將失??;獨特的起源與其他起源不匹配,甚至它們自己也不匹配。除其他影響外,這意味著(zhù)文檔無(wú)法訪(fǎng)問(wèn)存儲在任何來(lái)源的 cookie 或任何其他存儲機制(DOM 存儲、索引數據庫等)中的數據。
框架文檔無(wú)法創(chuàng )建新窗口或對話(huà)框(例如,通過(guò)window.open或 target="_blank")。
無(wú)法提交表格。
插件不會(huì )加載。
框架文檔只能導航自己,不能導航其頂級父級。設置window.top.location會(huì )拋出異常,點(diǎn)擊鏈接 target="_top"無(wú)效。
自動(dòng)觸發(fā)的功能(自動(dòng)聚焦的表單元素、自動(dòng)播放視頻等)被阻止。
無(wú)法獲得指針鎖。
框架文檔包含的seamless屬性被忽略。iframes
這是非常嚴格的,加載到完全沙盒中的文檔iframe 確實(shí)構成的風(fēng)險很小。當然,它也沒(méi)有多大價(jià)值:對于一些靜態(tài)內容,您可能可以使用完整的沙盒來(lái)擺脫困境,但大多數時(shí)候您會(huì )希望稍微放松一下。
除了插件之外,這些限制中的每一個(gè)都可以通過(guò)在沙箱屬性的值中添加一個(gè)標志來(lái)解除。沙盒文檔永遠不能運行插件,因為插件是未沙盒的本機代碼,但其他一切都是公平的游戲:
allow-forms允許表單提交。
allow-popups允許彈出窗口(window.open()、showModalDialog()、target=”_blank”等)。
allow-pointer-lock允許(驚喜?。┲羔樻i定。
allow-same-origin允許文件保持其來(lái)源;從中加載的頁(yè)面https://example.com/將保留對該來(lái)源數據的訪(fǎng)問(wèn)權限。
allow-scripts允許 JavaScript 執行,也允許特性自動(dòng)觸發(fā)(因為通過(guò) JavaScript 實(shí)現它們很簡(jiǎn)單)。
allow-top-navigation允許文檔通過(guò)導航頂級窗口跳出框架。
考慮到這些,我們可以準確評估為什么我們最終會(huì )在上面的 Twitter 示例中使用特定的沙盒標志集:
allow-scripts是必需的,因為加載到框架中的頁(yè)面會(huì )運行一些 JavaScript 來(lái)處理用戶(hù)交互。
allow-popups是必需的,因為該按鈕會(huì )在新窗口中彈出一個(gè)推文表單。
allow-forms是必需的,因為推特表單應該是可提交的。
allow-same-origin是必要的,否則 twitter.com 的 cookie 將無(wú)法訪(fǎng)問(wèn),并且用戶(hù)無(wú)法登錄以發(fā)布表單。
需要注意的重要一點(diǎn)是,應用于框架的沙盒標志也適用于在沙盒中創(chuàng )建的任何窗口或框架。這意味著(zhù)我們必須添加allow-forms到框架的沙箱中,即使表單只存在于框架彈出的窗口中。
使用該sandbox屬性后,小部件僅獲得它所需的權限,并且插件、頂部導航和指針鎖定等功能仍然被阻止。我們降低了嵌入小部件的風(fēng)險,沒(méi)有任何不良影響。這對所有相關(guān)人員來(lái)說(shuō)都是一場(chǎng)勝利。
參考網(wǎng)址:https://www.html5rocks.com/en/tutorials/security/sandboxed-iframes/
呢 稱(chēng): | |
表 情: | |
內 容: |
評論內容:不能超過(guò) 1000 字,需審核,請自覺(jué)遵守互聯(lián)網(wǎng)相關(guān)政策法規。 |
驗證碼: | |
您發(fā)布的評論即表示同意遵守以下條款:
一、不得利用本站危害國家安全、泄露國家秘密,不得侵犯國家、社會(huì )、集體和公民的合法權益;
二、不得發(fā)布國家法律、法規明令禁止的內容;互相尊重,對自己在本站的言論和行為負責;
三、本站對您所發(fā)布內容擁有處置權。