sandbox
屬性是 <iframe>
元素的一個強大的安全特性,它允許你對嵌入的文件施加額外的限制,從而建立一個更安全的瀏覽環境。透過在 <iframe>
中新增 sandbox
屬性,你實際上是將 iframe 內容放入了一個“沙盒”中,限制了它可以執行的操作。
sandbox
屬性的作用是限制 iframe 中的程式碼的許可權,防止惡意程式碼對主網站或使用者資訊造成損害。 如果沒有指定任何值,sandbox
屬性會啟用所有限制。 你也可以透過指定特定的值來允許某些操作,從而更精細地控制 iframe 的行為。
以下是 sandbox
屬性的一些關鍵作用和常用值:
-
完全限制 (空值):
<iframe sandbox>
如果sandbox
屬性為空,則會啟用所有限制。這將對 iframe 內容施加最嚴格的限制,包括阻止指令碼執行、表單提交、連結跳轉、外掛載入以及同源策略的修改。 這適用於你完全不信任 iframe 內容的情況。 -
允許特定許可權: 你可以透過在
sandbox
屬性中新增特定的值來允許某些操作。例如:allow-scripts
:允許執行 JavaScript 指令碼。 這是最常用的值之一,因為很多 iframe 內容都需要 JavaScript 才能正常工作。allow-forms
:允許提交表單。allow-same-origin
:允許 iframe 內容與主文件同源。 這意味著 iframe 可以訪問主文件的 cookies、localStorage 等資料。 注意: 謹慎使用此值,因為它可能會帶來安全風險。allow-top-navigation
:允許 iframe 內容導航到頂層視窗。allow-popups
:允許 iframe 內容開啟彈出視窗。allow-modals
:允許 iframe 內容顯示模態對話方塊 (例如window.alert
,window.confirm
,window.prompt
)。allow-orientation-lock
:允許 iframe 內容鎖定螢幕方向。allow-pointer-lock
:允許 iframe 內容鎖定指標。allow-presentation
:允許 iframe 內容啟動全屏演示。allow-popups-to-escape-sandbox
:允許 sandboxed iframe 開啟新的未受 sandbox 限制的視窗。 注意: 謹慎使用此值,因為它可能會帶來安全風險。allow-storage-access-by-user-activation
:允許 iframe 請求儲存訪問許可權(例如 cookies)。需要使用者互動才能授予許可權。
示例:
- 完全限制:
<iframe sandbox src="..." />
- 允許指令碼和表單提交:
<iframe sandbox="allow-scripts allow-forms" src="..." />
- 允許指令碼和同源訪問 (高風險):
<iframe sandbox="allow-scripts allow-same-origin" src="..." />
最佳實踐:
- 最小許可權原則: 只允許 iframe 執行必要的操作,儘可能限制其許可權。
- 避免
allow-same-origin
: 除非絕對必要,否則避免使用allow-same-origin
,因為它會增加安全風險。 - 結合其他安全措施:
sandbox
屬性只是其中一種安全措施,應與其他安全措施結合使用,例如 Content Security Policy (CSP)。
總而言之,sandbox
屬性是保護你的網站免受惡意 iframe 內容侵害的有效工具。透過理解和正確使用 sandbox
屬性,你可以顯著提高網站的安全性。