最近在做CSP的一些研究,從主流網站上發現了一些奇怪的CSP宣告。
對于 Facebook,登錄后,CSP 是這樣的:
default-src * data: blob: 'self';
script-src *.facebook.com *.fbcdn.net *.facebook.net *.google-analytics.com *.google.com 127.0.0.1:* 'unsafe-inline' 'unsafe-eval' blob: data: 'self';
style-src data: blob: 'unsafe-inline' *;
connect-src *.facebook.com facebook.com *.fbcdn.net *.facebook.net wss://*.facebook.com:* wss://*.whatsapp.com:* attachment.fbsbx.com ws://localhost:* blob: *.cdninstagram.com 'self';
block-all-mixed-content;
upgrade-insecure-requests;
讓我感到困惑的是,default-src使用小行星(*)然后遵循其他更嚴格的規則(“自我”):
default-src * data: blob: 'self';
在我最近的研究中,通常不建議使用小行星語法,這會使您的網站不安全。而且我無法弄清楚這條規則的最終效果是什么,如果self總是覆寫*,那為什么要留下一個多余的*.
至于 Twitter,他們的 CSP 是這樣的:
connect-src 'self' blob: https://*.giphy.com https://*.pscp.tv https://*.video.pscp.tv https://*.twimg.com https://api.twitter.com https://api-stream.twitter.com https://ads-api.twitter.com https://aa.twitter.com https://caps.twitter.com https://media.riffsy.com https://pay.twitter.com https://sentry.io https://ton.twitter.com https://twitter.com https://upload.twitter.com https://www.google-analytics.com https://app.link https://api2.branch.io https://bnc.lt wss://*.pscp.tv https://vmap.snappytv.com https://vmapstage.snappytv.com https://vmaprel.snappytv.com https://vmap.grabyo.com https://dhdsnappytv-vh.akamaihd.net https://pdhdsnappytv-vh.akamaihd.net https://mdhdsnappytv-vh.akamaihd.net https://mdhdsnappytv-vh.akamaihd.net https://mpdhdsnappytv-vh.akamaihd.net https://mmdhdsnappytv-vh.akamaihd.net https://mdhdsnappytv-vh.akamaihd.net https://mpdhdsnappytv-vh.akamaihd.net https://mmdhdsnappytv-vh.akamaihd.net https://dwo3ckksxlb0v.cloudfront.net ;
default-src 'self';
form-action 'self' https://twitter.com https://*.twitter.com;
font-src 'self' https://*.twimg.com;
frame-src 'self' https://twitter.com https://mobile.twitter.com https://pay.twitter.com https://cards-frame.twitter.com https://accounts.google.com/;
img-src 'self' blob: data: https://*.cdn.twitter.com https://ton.twitter.com https://*.twimg.com https://analytics.twitter.com https://cm.g.doubleclick.net https://www.google-analytics.com https://www.periscope.tv https://www.pscp.tv https://media.riffsy.com https://*.giphy.com https://*.pscp.tv https://*.periscope.tv https://prod-periscope-profile.s3-us-west-2.amazonaws.com https://platform-lookaside.fbsbx.com https://scontent.xx.fbcdn.net https://scontent-sea1-1.xx.fbcdn.net https://*.googleusercontent.com https://imgix.revue.co;
manifest-src 'self';
media-src 'self' blob: https://twitter.com https://*.twimg.com https://*.vine.co https://*.pscp.tv https://*.video.pscp.tv https://*.giphy.com https://media.riffsy.com https://dhdsnappytv-vh.akamaihd.net https://pdhdsnappytv-vh.akamaihd.net https://mdhdsnappytv-vh.akamaihd.net https://mdhdsnappytv-vh.akamaihd.net https://mpdhdsnappytv-vh.akamaihd.net https://mmdhdsnappytv-vh.akamaihd.net https://mdhdsnappytv-vh.akamaihd.net https://mpdhdsnappytv-vh.akamaihd.net https://mmdhdsnappytv-vh.akamaihd.net https://dwo3ckksxlb0v.cloudfront.net;
object-src 'none';
script-src 'self' 'unsafe-inline' https://*.twimg.com https://www.google-analytics.com https://twitter.com https://app.link https://accounts.google.com/gsi/client https://appleid.cdn-apple.com/appleauth/static/jsapi/appleid/1/en_US/appleid.auth.js 'nonce-ODdiNzNlNGYtNjFmNS00ZmYxLWE0ZjctODViNTU5YmI4Zjk5';
style-src 'self' 'unsafe-inline' https://accounts.google.com/gsi/style https://*.twimg.com;
worker-src 'self' blob:;
report-uri https://twitter.com/i/csp_report?a=O5RXE===&ro=false
讓我困惑的是script-src:
script-src 'self' 'unsafe-inline' https://*.twimg.com https://www.google-analytics.com https://twitter.com https://app.link https://accounts.google.com/gsi/client https://appleid.cdn-apple.com/appleauth/static/jsapi/appleid/1/en_US/appleid.auth.js 'nonce-ODdiNzNlNGYtNjFmNS00ZmYxLWE0ZjctODViNTU5YmI4Zjk5';
我認為nonce旨在防止使用unsafe-inline,但在上述指令中,兩者都存在。同樣,我的問題是如果后者覆寫前者,為什么要留下一個多余的unsafe-inline.
uj5u.com熱心網友回復:
default-src * data: blob: 'self';在我最近的研究中,通常不建議使用小行星語法,這會使您的網站不安全。
這通常是肯定的,但對 XSS 來說最有潛在危險的是script-src和connect-src指令有自己的源白名單,沒有*.
對于其余的回退指令,星號*不是危險的來源(可能除外object-src),相反,這是必要的,因為用于托管影像或媒體內容的第三方主機串列可能是無窮無盡的。
而且我無法弄清楚這條規則的最終效果是什么,如果
'self'總是覆寫 *,那么為什么要留下一個多余的*.
實際上它是*overrides 'self'。是的,'self'使用*. 在大公司中,IT 專家不喜歡接觸有效的東西。我認為經過一些研究后,“自我”仍然是一種返祖現象,因為一些較舊的 Safari 存在'self'.
我認為
nonce旨在防止使用unsafe-inline,但在上述指令中,兩者都存在。
這是為瀏覽器向后兼容而設計的。
在CSP存在nonce的'unsafe-inline'將現代瀏覽器被忽略。不支持 nonce 的舊瀏覽器將看到'unsafe-inline'并允許執行行內腳本。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/368052.html
標籤:Facebook 安全 推特 http-headers 内容安全策略
上一篇:如何進行移動安全測驗
下一篇:Vaadin21Flow SpringSecurityOAuth2:找不到“oauth2/authorization/google”的路由
