Content-Security-Policy (CSP)
åºçº¿
广æ³å¯ç¨
*
èª 2016å¹´8æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
* æ¤ç¹æ§çæäºé¨åçæ¯æç¨åº¦å¯è½ææä¸åã
HTTP ååºæ 头 Content-Security-Policy å
许ç«ç¹ç®¡çè
æ§å¶ç¨æ·ä»£çè½å¤ä¸ºæå®ç页é¢å è½½åªäºèµæºãé¤äºå°æ°ä¾å¤æ
åµï¼è®¾ç½®çæ¿çä¸»è¦æ¶åæå®æºæå¡å¨åèæ¬ç«¯ç¹ãè¿å°å¸®å©é²æ¢è·¨ç«èæ¬æ»å»ã
åè§å 容å®å ¨çç¥ï¼CSPï¼ï¼ä»¥æ¥ç CSP åéå°æµè§å¨çç»èï¼å®é¿ä»ä¹æ ·ï¼åå ¶ç¨ä¾åé¨ç½²çç¥ã
| æ 头类å | ååºæ 头 |
|---|---|
| ç¦æ¢ä¿®æ¹çæ 头 | å¦ |
è¯æ³
Content-Security-Policy: <policy-directive>; <policy-directive>
å
¶ä¸ <policy-directive> åºä¸ºä¸å«æ ç¹ç <directive> <value> å½¢å¼ã
æä»¤
>Fetch æä»¤
Fetch æä»¤æ§å¶æå®èµæºç±»åå¯ä»¥ä»åªéå è½½ã
child-src-
为 Web Worker åå ¶ä»åµå¥æµè§ä¸ä¸æï¼ä¾å¦ç¨
<frame>å<iframe>å è½½å°é¡µé¢çå å®¹ï¼æå®åæ³æºãframe-srcåworker-srcçåå¤å¼ã connect-src-
éå¶è½éè¿èæ¬æ¥å£å è½½ç URLã
default-src-
ä¸ºå ¶ä» Fetch æä»¤æä¾åå¤å¼ã
å ¶ä»ææ Fetch æä»¤çåå¤å¼ã
fenced-frame-src-
æå®å¯ä»¥å è½½å°
<fencedframe>å ç´ çå 嵿µè§å¨å 容çåæ³æºã font-src-
æå®éè¿
@font-faceå è½½åä½çåæ³æºã frame-src-
为å è½½å°
<frame>å<iframe>çå ç´ ä¸çåµå¥æµè§ä¸ä¸ææå®åæ³æºã img-src-
æå®å¾çå徿 çåæ³æºã
manifest-src-
æå®åºç¨ç¨åºæ¸ åæä»¶çåæ³æºã
media-src-
æå®éè¿
<audio>ã<video>å<track>æ ç¾å è½½çåªä½æä»¶çåæ³æºã object-srcprefetch-src-
æå®é¢å è½½æé¢æ¸²æçåæ³æºã
script-src-
æå® JavaScript æ WebAssembly çåæ³æºã
script-src-elemåscript-src-attrçåå¤å¼ã script-src-elem-
æå® JavaScript
<script>å ç´ çåæ³æºã script-src-attr-
æå® JavaScript å èäºä»¶å¤çå¨çåæ³æºã
style-src-
æå®å±å æ ·å¼è¡¨æä»¶çåæ³æºã
style-src-elemåstyle-src-attrçåå¤å¼ã style-src-elem-
为带æ
rel="stylesheet"çæ ·å¼è¡¨<style>å ç´ å<link>å ç´ æå®åæ³æºã style-src-attr-
æå®å个 DOM å ç´ çè¡å æ ·å¼çåæ³æºã
worker-src-
æå®
WorkerãSharedWorkeræServiceWorkerèæ¬çåæ³æºã
ææ Fetch æä»¤å¯ä»¥æå®ä¸ä¸ª 'none' å¼ï¼è¡¨ç¤ºè¯¥èµæºå®å
¨è¢«ç¦æ¢ï¼æè
æå®ä¸ä¸ªæå¤ä¸ªæºè¡¨è¾¾å¼ï¼è¡¨ç¤ºè¯¥ç±»èµæºçåæ³æºãè§ Fetch æä»¤è¯æ³ã
åå¤å¼
æäº Fetch æä»¤æ¯ä½ä¸ºå ¶ä»å ·ä½æä»¤çåå¤å¼ãè¿æå³çå¦ææ²¡ææå®å ·ä½çæä»¤ï¼å°±å¯¹è¯¥èµæºç±»å使ç¨åå¤å¼æä¾ççç¥ã
default-srcæ¯å ¶ä»ææ Fetch æä»¤çåå¤å¼ãscript-srcæ¯script-src-attråscript-src-elemçåå¤å¼ãstyle-srcæ¯style-src-attråstyle-src-elemçåå¤å¼ãchild-srcæ¯frame-srcåworker-srcçåå¤å¼ã
ä¾å¦ï¼
- å¦ææ²¡ææä¾
img-srcï¼ä½å å«äºdefault-srcï¼é£ä¹default-srcå®ä¹ççç¥å°åºç¨äºå¾åã - å¦ææ²¡ææä¾
script-src-elemï¼ä½å å«äºscript-srcï¼é£ä¹script-srcå®ä¹ççç¥å°åºç¨äº<script>å ç´ ã - 妿
script-src-elemåscript-src齿²¡ææä¾ï¼ä½å å«äºdefault-srcï¼é£ä¹default-srcå®ä¹ççç¥å°åºç¨äº<script>å ç´ ã
ææ¡£æä»¤
ææ¡£æä»¤ç®¡çéç¨çç¥çææ¡£æ worker ç¯å¢ç屿§ã
å¯¼èªæä»¤
å¯¼èªæä»¤ç®¡çç¨æ·å¯ä»¥å¯¼èªæè æäº¤è¡¨åçä½ç½®ã
form-action-
éå¶å¯ç¨ä½ç»å®ä¸ä¸æè¡¨åæäº¤ç®æ ç URLã
frame-ancestors-
æå®å¯è½åµå ¥é¡µé¢çææç¶é¡¹
<frame>ã<iframe>ã<object>æ<embed>ã
æ¥åæä»¤
æ¥åæä»¤æ§å¶ CSP è¿è§æ¥åçç®æ URLãä½ç¨äº Content-Security-Policy å Content-Security-Policy-Report-Onlyã
report-to-
æä¾ä»£è¡¨ä¸ä¸ªæå¤ä¸ªæ¥å端ç¹ç tokenï¼ç¨äºåé CSP è¿è§ä¿¡æ¯ã token 代表çæç¹éè¿å ¶ä» HTTP æ 头æä¾ï¼æ¯å¦
Reporting-EndpointsåReport-Toãè¦åï¼æ¤æä»¤æå¾æ¿æ¢
report-uriï¼å¨æ¯æreport-toçæµè§å¨ï¼report-uriä¼è¢«å¿½ç¥ã 使¯ï¼å¨report-toè¢«å¹¿æ³æ¯æåï¼ä½ åºè¯¥ä¸¤è åæå®ï¼å ¶ä¸endpoint_nameæ¯åç¬æä¾ç端ç¹çååï¼ï¼httpContent-Security-Policy: â¦; report-uri https://endpoint.example.com; report-to endpoint_name
å ¶ä»æä»¤
require-trusted-types-for-
å¨ DOM XSS æ³¨å ¥è½ç¹å¼ºå¶æ§è¡ Trusted Typeã
trusted-types-
ç¨äºæå® Trusted Type çç¥çå 许å¼ãTrusted Type å 许ç¨åºç¦ç¨ DOM XSS æ³¨å ¥è½ç¹ï¼åªæ¥åä¸å¯æ¬ºéªçãåºå®çå¼ï¼ä»¥ä»£æ¿å符串ã
upgrade-insecure-requests-
让æµè§å¨æä¸ä¸ªç½ç«ææçä¸å®å ¨ URLï¼éè¿ HTTP 访é®ï¼å½åå·²ç»è¢«å®å ¨ç URL 龿¥ï¼éè¿ HTTPS 访é®ï¼æ¿ä»£ãè¿ä¸ªæä»¤æ¯ä¸ºäºé£äºæå¤§éä¸å®å ¨çéç URL éè¦è¢«éåæ¶ååå¤çã
å¼ç¨æä»¤
block-all-mixed-content-
å½é¡µé¢ä½¿ç¨ HTTPS æ¶ï¼é»æ¢ä½¿ç¨ HTTP çèµæºå è½½ã
report-uri-
ç»æµè§å¨æä¾åé CSP è¿è§æ¥åç URLãå·²ç»è¢«
report-toæä»¤å代ã
Fetch æä»¤è¯æ³
ææç Fetch æä»¤å¯ä»¥æå®ä¸ºä»¥ä¸å½¢å¼ä¹ä¸ï¼
- åç¬
'none'å¼ï¼è¡¨ç¤ºåºå®å ¨é»æ¢å è½½ç¹å®èµæºç±»åã - ä¸ä¸ªæå¤ä¸ªæºè¡¨è¾¾å¼å¼ï¼è¡¨ç¤ºè¯¥èµæºç±»åçåæ³æ¥æºã
æ¯ä¸ªæ¥æºè¡¨è¾¾å¼å¯ä»¥éç¨ä»¥ä¸ååºçå½¢å¼ä¹ä¸ãéè¦æ³¨æçæ¯ï¼å¹¶éææå½¢å¼é½éç¨äºææ Fetch æä»¤ï¼è¯·åé æ¯ä¸ª Fetch æä»¤çææ¡£ï¼äºè§£éç¨çå½¢å¼ã
<host-source> å <scheme-source> æ ¼å¼å¿
é¡»ä¸å å¼å·ï¼èå
¶ä»æææ ¼å¼å¿
é¡»ç¨åå¼å·æ¬èµ·æ¥ã
'nonce-<nonce_value>'
该å¼ç±å符串 nonce- åä¸ä¸ª Base64 ç¼ç çåç¬¦ä¸²ç»æãæ¤åç¬¦ä¸²æ¯æå¡å¨ä¸ºæ¯ä¸ª HTTP ååºçæçéæºå¼ãä¾å¦ï¼
'nonce-416d1177-4d12-4e3b-b7c9-f6c409789fb8'
ç¶åï¼æå¡å¨å¯ä»¥å°ç¸åçå¼ä½ä¸ºä»»ä½ <script> æ <style> èµæºç nonce 屿§çå¼ï¼è¿äºèµæºæ¯å¸æä»ææ¡£å è½½çã
æµè§å¨å° CSP æä»¤ä¸çå¼ä¸å ç´ å±æ§ä¸çå¼è¿è¡æ¯è¾ï¼ä» å½ä¸¤è å¹é æ¶æå è½½èµæºã
妿æä»¤ä¸åæ¶å
å« nonce å unsafe-inlineï¼æµè§å¨ä¼å¿½ç¥ unsafe-inlineã
æå ³æ´å¤ç¨æ³ä¿¡æ¯ï¼è¯·åé CSP æåä¸ç Nonceã
'<hash_algorithm>-<hash_value>'
该å¼ç±æ è¯æ£åç®æ³çå符串ã- åä¸ä¸ªè¡¨ç¤ºæ£åå¼ç base64 ç¼ç åç¬¦ä¸²ç»æã
- æ£åç®æ³æ è¯ç¬¦å¿
é¡»æ¯
sha256ãsha384æsha512ä¹ä¸ã - æ£å弿¯ä½¿ç¨ä»¥ä¸æ£å彿°ä¹ä¸è®¡ç®ç
<script>æ<style>èµæºçæ£åå¼ç base64 ç¼ç ï¼SHA-256ãSHA-384 æ SHA-512ã
ä¾å¦ï¼
'sha256-cd9827ad...'
彿µè§å¨æ¥æ¶ææ¡£æ¶ï¼å®ä¼å¯¹ææ <script> å <style> å
ç´ çå
容è¿è¡æ£å计ç®ï¼å°ç»æä¸ CSP æä»¤ä¸ç任使£åå¼è¿è¡æ¯è¾ï¼ä»
å¨å¹é
æ¶å è½½èµæºã
妿å
ç´ å è½½å¤é¨èµæºï¼ä¾å¦ï¼éè¿ src 屿§ï¼ï¼åå
ç´ è¿å¿
须设置 integrity 屿§ã
妿æä»¤ä¸åæ¶å
嫿£åå unsafe-inlineï¼æµè§å¨ä¼å¿½ç¥ unsafe-inlineã
æå ³æ´å¤ç¨æ³ä¿¡æ¯ï¼è¯·åé CSP æåä¸çæ£åå¼ã
<host-source>
主æºç URL æ IP å°åï¼æ¯èµæºçæææ¥æºã
åè®®ã端å£å·åè·¯å¾æ¯å¯éçã
妿çç¥åè®®ï¼åä½¿ç¨ææ¡£æºçåè®®ã
å¹é åè®®æ¶å 许å®å ¨å级ãä¾å¦ï¼
http://example.comä¹å 许æ¥èªhttps://example.comçèµæºãws://example.orgä¹å 许æ¥èªwss://example.orgçèµæºã
å¯ä»¥ä½¿ç¨éé
符ï¼'*'ï¼è¡¨ç¤ºåååã主æºå°åå端å£å·ï¼è¡¨ç¤ºææåæ³å¼é½ææãä¾å¦ï¼
http://*.example.comå 许æ¥èªexample.comçä»»ä½ååçèµæºï¼éè¿ HTTP æ HTTPSï¼ã
以/ç»å°¾çè·¯å¾å¹é
å®ä»¬ä½ä¸ºåç¼çä»»ä½è·¯å¾ãä¾å¦ï¼
example.com/api/å°å 许æ¥èªexample.com/api/users/newçèµæºã
æªä»¥/ç»å°¾çè·¯å¾ç²¾ç¡®å¹é
ãä¾å¦ï¼
https://example.com/file.jsä» å 许æ¥èªhttps://example.com/file.jsçèµæºï¼èä¸å 许æ¥èªhttps://example.com/file.js/file2.jsçèµæºã
<scheme-source>
表示ä¸ç§æ¹æ¡ï¼ä¾å¦ https:ãå¿
é¡»å
å«åå·ã
å 许å®å ¨å级ï¼å æ¤ï¼
http:ä¹å 许éè¿ HTTPS å è½½çèµæºãws:ä¹å 许éè¿ WSS å è½½çèµæºã
'self'
ä» å 许ä»ä¸ææ¡£ç¸åçæºå è½½ç»å®ç±»åçèµæºã
å 许å®å ¨å级ãä¾å¦ï¼
- å¦æææ¡£æ¥èª
http://example.comï¼å CSP'self'ä¹å 许æ¥èªhttps://example.comçèµæºã - å¦æææ¡£æ¥èª
ws://example.orgï¼å CSP'self'ä¹å 许æ¥èªwss://example.orgçèµæºã
'unsafe-eval'
é»è®¤æ
åµä¸ï¼å¦æ CSP å
å« default-src æ script-src æä»¤ï¼åç¦æ¢ä½¿ç¨å¨æè®¡ç®å
¶åæ°ä¸º JavaScript ç JavaScript 彿°ãè¿å
æ¬ eval()ãsetTimeout() ç code åæ°ï¼æ Function() æé 彿°ã
unsafe-eval å
³é®åå¯ç¨äºæ¤éæ¤ä¿æ¤ï¼å
è®¸å¨æè®¡ç®å符串为 JavaScriptã
è¦åï¼å¼å人ååºé¿å
使ç¨'unsafe-eval'ï¼å 为å®ç ´åäº CSP ç大é¨åä¿æ¤ç®çã
æå
³æ´å¤ç¨æ³ä¿¡æ¯ï¼è¯·åé
CSP æåä¸ç eval() å类似ç APIã
'wasm-unsafe-eval'
é»è®¤æ
åµä¸ï¼å¦æ CSP å
å« default-src æ script-src æä»¤ï¼å页é¢ä¸å
许使ç¨è¯¸å¦ WebAssembly.compileStreaming() ä¹ç±»ç彿°ç¼è¯ WebAssemblyã
wasm-unsafe-eval å
³é®åå¯ç¨äºæ¤éæ¤ä¿æ¤ãè¿æ¯æ¯ 'unsafe-eval' æ´å®å
¨çæ¿ä»£æ¹æ¡ï¼å 为å®ä¸ä¼å¯ç¨ JavaScript çä¸è¬è®¡ç®ã
'unsafe-inline'
é»è®¤æ
åµä¸ï¼å¦æ CSP å
å« default-src æ script-src æä»¤ï¼åç¦æ¢æ§è¡å
è JavaScriptãè¿å
æ¬ï¼
- å
è
<script>æ ç¾ - å èäºä»¶å¤çå¨å±æ§
javascript:URL
类似å°ï¼å¦æ CSP å
å« default-src æ style-src æä»¤ï¼åå
è CSS ä¹ä¸ä¼è¢«å è½½ï¼å
æ¬ï¼
- å
è
<style>æ ç¾ style屿§ã
unsafe-inline å
³é®åå¯ç¨äºæ¤éæ¤ä¿æ¤ï¼å
许å è½½ææè¿äºå½¢å¼çèµæºã
è¦åï¼å¼å人ååºé¿å
ä½¿ç¨ 'unsafe-inline'ï¼å 为å®ç ´åäº CSP ç大é¨åä¿æ¤ç®çã
æå ³æ´å¤ç¨æ³ä¿¡æ¯ï¼è¯·åé CSP æåä¸çå è JavaScriptã
'unsafe-hashes'
é»è®¤æ
åµä¸ï¼å¦æ CSP å
å« default-src æ script-src æä»¤ï¼åå
èäºä»¶å¤çç¨åºå±æ§ï¼å¦ onclickï¼åå
è style 屿§ä¸å
许æ§è¡ã
'unsafe-hashes' 表达å¼å
许æµè§å¨å¯¹å
èäºä»¶å¤çç¨åºå style 屿§ä½¿ç¨æ£å表达å¼ãä¾å¦ï¼ä¸ä¸ª CSP æä»¤å¯è½å
å«ä»¥ä¸å
容ï¼
script-src 'unsafe-hashes' 'sha256-cd9827ad...'
妿æ£åå¼ä¸å
èäºä»¶å¤çç¨åºå±æ§å¼æ style 屿§å¼çæ£åå¼å¹é
ï¼åå
è®¸ä»£ç æ§è¡ã
è¦åï¼'unsafe-hashes' 弿¯ä¸å®å
¨çã
ç¹å«æ¯ï¼æ»å»è
å¯ä»¥å°å
èäºä»¶å¤çç¨åºå±æ§çå
容注å
¥å°å
è <script> å
ç´ ä¸ï¼ä»¥æ¤å®ç°æ»å»ãä¾å¦ï¼å设å
èäºä»¶å¤çç¨åºæ¯ï¼
<button onclick="transferAllMyMoney()">转账ææèµé</button>
妿æ»å»è
è½å¤æ³¨å
¥ä¸ä¸ªå
嫿¤ä»£ç çå
è <script> å
ç´ ï¼CSP ä¼å
许å®èªå¨æ§è¡ã
å³ä½¿è¿æ ·ï¼'unsafe-hashes' æ¯ 'unsafe-inline' è¦å®å
¨å¾å¤ã
'inline-speculation-rules'
é»è®¤æ
åµä¸ï¼å¦æ CSP å
å« default-src æ script-src æä»¤ï¼åä¸å
许æ§è¡å
è JavaScriptã'inline-speculation-rules' å
许æµè§å¨å è½½ type 屿§ä¸º speculationrules çå
è <script> å
ç´ ã
æå ³æ´å¤ä¿¡æ¯ï¼è¯·åé æ¨æµè§å APIã
'strict-dynamic'
'strict-dynamic' å
³é®å使å¾éè¿ nonce æ hash ä¿¡ä»»çèæ¬æ©å±å°æ¤èæ¬å¨æå è½½çèæ¬ï¼ä¾å¦éè¿ä½¿ç¨ Document.createElement() å建æ°ç <script> æ ç¾ï¼ç¶åéè¿ Node.appendChild() å°å
¶æå
¥ææ¡£ä¸ã
妿æ¤å ³é®ååºç°å¨æä»¤ä¸ï¼å以䏿¥æºè¡¨è¾¾å¼å¼é½å°è¢«å¿½ç¥ï¼
æå
³æ´å¤ç¨æ³ä¿¡æ¯ï¼è¯·åé
CSP æåä¸ç strict-dynamic å
³é®åã
'report-sample'
妿æ¤è¡¨è¾¾å¼å
å«å¨æ§å¶èæ¬ææ ·å¼çæä»¤ä¸ï¼å¹¶ä¸è¯¥æä»¤å¯¼è´æµè§å¨é»æ¢ä»»ä½å
èèæ¬ãå
èæ ·å¼æäºä»¶å¤çç¨åºå±æ§çæ§è¡ï¼åæµè§å¨çæçè¿è§æ¥åå°å
å«ä¸ä¸ª sample 屿§ï¼å
¶ä¸å
å«è¢«é»æ¢èµæºçå 40 个å符ã
Worker ä¸ç CSP
Worker ä¸è¬æ¥è¯´ä¸è¢«å建ä»çææ¡£ï¼æè
ç¶çº§ Workerï¼ç CSP 管çã妿è¦ä¸º Worker æå® CSPï¼å¯ä»¥ä¸º Worker èæ¬ç请æ±è®¾ç½® CSP ååºæ 头 Content-Security-Policyã
ä¾å¤çæ 嵿¯ï¼å¦æ Worker èæ¬çæ¥æºæ¯ä¸ä¸ªå ¨å±å¯ä¸ IDï¼æ¯å¦ï¼å®ç URL æ¯ä¸ä¸ªç»æåçæ°æ®æè blobï¼ãå¨è¿ç§æ åµä¸ï¼è¿ä¸ª Worker ä¼ç»§æ¿å®æå±çææ¡£æè å建å®ç Worker ç CSPã
å¤éå 容å®å ¨çç¥
CSP å
许å¨ä¸ä¸ªèµæºä¸æå®å¤ä¸ªçç¥ï¼å
æ¬éè¿ Content-Security-Policy æ 头ï¼ä»¥å Content-Security-Policy-Report-Only æ 头ï¼å <meta> å
ç´ ã
ä½ å¯ä»¥å以ä¸å®ä¾ä¸æ ·å¤æ¬¡è°ç¨ Content-Security-Policy æ 头ãç¹å«æ³¨æè¿éç connect-src æä»¤ã尽管第äºä¸ªçç¥å
è®¸è¿æ¥ï¼ç¬¬ä¸ä¸ªçç¥ä»ç¶å
æ¬äº connect-src 'none'ãæ·»å äºéå ççç¥åï¼åªä¼è®©èµæºä¿æ¤çè½åæ´å¼ºï¼ä¹å°±æ¯è¯´ä¸ä¼å
许任ä½è¿æ¥ï¼çåäºæä¸¥æ ¼ççç¥ connect-src 'none' å¼ºå¶æ§è¡ã
Content-Security-Policy: default-src 'self' http://example.com;
connect-src 'none';
Content-Security-Policy: connect-src http://example.com/;
script-src http://example.com/
示ä¾
>ç¦ç¨ä¸å®å ¨çå è代ç ï¼åªå 许 HTTPS èµæº
è¿ä¸ª HTTP æ 头设置é»è®¤çç¥ä¸ºåªå
è®¸ç¨ HTTPS å è½½èµæºãç±äºæ²¡æè®¾ç½® unsafe-inline å unsafe-evalï¼å
è代ç 被ç¦ç¨ã
Content-Security-Policy: default-src https:
åæ ·çéå¶å¯ä»¥éè¿ HTML <meta> å
ç´ æ½å ã
<meta http-equiv="Content-Security-Policy" content="default-src https:" />
å 许å è代ç å HTTPS èµæºï¼ä½ç¦ç¨æä»¶
æ¤çç¥å¯ç¨äºå·²åå¨çç½ç«ä¸æè¿å¤å è代ç çæ åµï¼æ¨å¨ç¡®ä¿èµæºä» éè¿ HTTPS å è½½ï¼å¹¶ç¦ç¨æä»¶ï¼
Content-Security-Policy: default-src https: 'unsafe-eval' 'unsafe-inline'; object-src 'none'
æµè¯æ¶æ¥åä½ä¸æ½å éå¶
æ¤ç¤ºä¾è®¾ç½®äºä¸åä¸ä¸ªä¾åç¸åçéå¶ï¼ä½ä½¿ç¨äº Content-Security-Policy-Report-Only æ 头å report-to æä»¤ãè¿ç§æ¹æ³å¨æµè¯æé´ä½¿ç¨ï¼ç¨äºæ¥åè¿è§è¡ä¸ºä½ä¸é»æ¢ä»£ç æ§è¡ã
æ¥å端ç¹ï¼URLï¼ä½¿ç¨ Reporting-Endpoints HTTP ååºæ 头å®ä¹ã
Reporting-Endpoints: csp-endpoint="https://example.com/csp-reports"
ç¶åå¨ CSP ä¸ä½¿ç¨ report-to æä»¤éæ©ç¹å®ç端ç¹ä½ä¸ºæ¥åç®æ ã
Content-Security-Policy-Report-Only: default-src https:; report-uri /csp-violation-report-url/; report-to csp-endpoint
请注æï¼report-uri æä»¤å¨ä¸é¢ç示ä¾ä¸ä¹è¢«æå®ï¼å 为 report-to 卿µè§å¨ä¸çæ¯æå°æªå¹¿æ³ã
æ´å¤ç¤ºä¾è¯·åé å 容å®å ¨çç¥ï¼CSPï¼å®ç°ã
è§è
| è§è |
|---|
| Content Security Policy Level 3 > # csp-header > |
æµè§å¨å ¼å®¹æ§
åè§
Content-Security-Policy-Report-Only- å 容å®å ¨çç¥ï¼CSPï¼
- æµè§å¨æä»¶ä¸ç CSP
- éç¨ä¸¥æ ¼ççç¥
- CSP è¯ä¼°å¨ââè¯ä¼°ä½ çå 容å®å ¨çç¥