簡體   English   中英

CSP style-src: 'unsafe-inline' - 值得嗎?

[英]CSP style-src: 'unsafe-inline' - is it worth it?

目前我在我的所有網站上都使用 Modernizr,事實證明,由於它的工作方式,它需要允許unsafe-inline樣式。 我已經不允許內聯腳本和腳本的 unsafe-eval 了。 好奇允許內聯樣式存在哪些安全風險?

允許內聯樣式使您容易受到“其他 XSS”的影響。 跨站點樣式攻擊。

這里的想法是,用戶可以在您的文檔中注入樣式屬性的任何地方,他們都可以按照他們想要的方式修改頁面的外觀。 我將列出幾個按嚴重程度排序的潛在攻擊:

  1. 他們可以把你的頁面變成粉紅色,讓它看起來很傻。
  2. 他們可以修改您頁面的文本,使您看起來像是在說一些冒犯性的話,可能會冒犯您的讀者群。
  3. 他們可以使用戶生成的內容(例如他們提供的鏈接)出現在人們期望看到用戶內容的正常位置之外,使其看起來是官方的。 (例如,用他們自己的鏈接替換您網站上的“登錄”按鈕)。
  4. 使用精心設計的樣式規則,他們可以將頁面上包含的任何信息發送到外部域,並惡意公開或以其他方式使用這些數據來攻擊您的用戶。

第四個示例,盡管存在unsafe-inline ,但可以完全防止信息泄露到外部域,前提是您確保您的其他 CSP 規則永遠不允許任何類型的請求進入不受信任或通配符域。 但是如果您錯過在某處阻止樣式屬性,前 3 個總是可能的。

幾年前, Mike West為 CSSConf 做了一個很好的 演講,提供了更多的例子。

就我個人而言,我發現不對 CSS 使用 unsafe-inline 是不切實際的。 這意味着我必須為每種樣式使用外部樣式表文件。 着色文本,居中文本等。它可以做到。 您可以通過使用主樣式表“main.css”和每個頁面的文件表(“index.css”、“contect.css”等)來做到這一點。 但是,我並沒有那么愚蠢,以至於允許任意代碼執行; 我過濾掉所有更少的東西,然后擦掉所有的跡象。 我認為這是一個不合理的限制。 阻止內聯 JavaScript 並不像阻止內聯 CSS 那樣糟糕。 我可以看到阻塞內聯 JavaScript。 但是我不認為我會那樣做。 如果你小心地過濾你的 less then 和 grater then 符號(除了不過濾這些之外,你還可以做一些其他愚蠢的事情)如果你不犯允許任意代碼執行的愚蠢錯誤,那么你是安全的。 創建這些內聯塊只是為了保護以允許任意代碼執行的方式搞砸代碼的 Web 開發人員。 但是這些塊使編碼變得有點困難。 所以這是一個權衡。

TLDR 恕我直言,不值得阻止內聯 CSS,值得阻止內聯 JavaScript,但沒有必要。 我不會考慮阻止內聯 CSS,我不會阻止內聯 JavaScript,但我可能會考慮。

經驗:我是一名網頁設計師,使用 HTML CSS JavaScript 和 PHP 進行代碼設計。 我有自己的網站,我手工編碼。 我使用官方的 w3 驗證器進行驗證。 我跟上 HTML5 等網頁設計標准。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM