內容安全策略 (CSP) 是一個 W3C 規範,用於指示客戶端瀏覽器哪些位置和/或哪種類型的資源允許載入。此規範使用「指令」來定義目標資源類型的載入行為。指令可以使用 HTTP 回應標頭或 HTML <meta>
標籤來指定。
lusca
是在 Apache 授權 下的開源軟體。
首先
# In your sails app
npm install lusca --save --save-exact
然後在 config/http.js
中新增 csp
// ...
csp: require('lusca').csp({
policy: {
'default-src': '*'
}
}),
// ...
order: [
// ...
'csp',
// ...
]
為了讓您了解其運作方式,以下是截至 2017 年支援的 CSP 指令快照
指令 | |
---|---|
default-src | 在未定義資源類型專用指令時,所有資源類型的載入策略(後備方案) |
script-src | 定義受保護的資源可以執行的腳本 |
object-src | 定義受保護的資源可以從哪裡載入外掛程式 |
style-src | 定義使用者應用於受保護資源的樣式 (CSS) |
img-src | 定義受保護的資源可以從哪裡載入圖片 |
media-src | 定義受保護的資源可以從哪裡載入影片和音訊 |
frame-src | 定義受保護的資源可以從哪裡嵌入框架 |
font-src | 定義受保護的資源可以從哪裡載入字型 |
connect-src | 定義受保護的資源可以使用腳本介面載入哪些 URI |
form-action | 定義哪些 URI 可以用作 HTML 表單元素的動作 |
sandbox | 指定使用者代理程式應用於受保護資源的 HTML 沙箱策略 |
script-nonce | 透過要求腳本元素上存在指定的 nonce 來定義腳本執行 |
plugin-types | 透過限制可以嵌入的資源類型,定義受保護資源可以調用的外掛程式集 |
reflected-xss | 指示使用者代理程式啟用或停用任何用於過濾或阻止反射型跨站腳本攻擊的啟發式方法,效果等同於非標準 X-XSS-Protection 標頭的效果。 |
report-uri | 指定使用者代理程式將傳送關於策略違規報告的 URI |
更多資訊,請參閱 W3C CSP 規範。
不同的瀏覽器支援不同的 CSP 回應標頭。例如,Content-Security-Policy
是 W3C 標準,但各種版本的 Chrome、Firefox 和 IE 使用 X-Content-Security-Policy
或 X-WebKit-CSP
。關於瀏覽器支援的最新資訊,請參閱 OWasp。