摘要:不過真正的問題在于第三方內容是不是安全的。第三方的作用更接近于腳本而不是圖像。結論第三方內容并不安全這些只是我所知道的一些技巧,我相信還會有更多類似的小技巧。第三方內容在其沙箱中具有很高的影響力。
原文:https://jakearchibald.com/201...
翻譯:瘋狂的技術宅
本文首發微信公眾號:jingchengyideng
歡迎關注,每天都給你推送新鮮的前端技術文章
前一段時間,有很多關于用CSS構建的“鍵盤記錄器”的討論(源代碼見:https://github.com/maxchehab/...)。
有些人要求瀏覽器“修復”它。 另有一些人挖掘得更深一些,發現它只影響使用React及類似框架編寫的網站,并為此指責React。 不過真正的問題在于第三方內容是不是“安全的”。
下面我們逐一分析這些第三方內容。
第三方圖片如果因為我信任example.com,就在自己的代碼中包含上述內容。那么 他們可能會刪除資源,從而給我返回一個404,使我的網站看起來支離破碎,從而辜負了這種信任。同時他們也有可能會用一些不恰當的內容取代原來的圖片。
不過圖像的影響僅限于元素本身的內容框。 我可以向自己的用戶解釋“這是來自example.com的內容,如果它變冒犯了你,那是他們的錯,可別來找我”,并寄希望于用戶們能夠相信我。 但是這種事肯定不會影響我數據庫中密碼字段之類的東西。
第三方腳本與圖片相比,第三方腳本有更多的控制權。 如果我的代碼中包含上述內容,就會給example.com完全控制自己的網站的機會。 他們能:
讀取/更改頁面內容。
監控用戶交互的每一個步驟。
運行計算量很大的代碼(比如用你的瀏覽器挖礦)。
盜取用戶的cookie向我的來源發出請求,并轉發響應數據。
讀取/更改原始存儲。
幾乎可以做任何他們想做的事。
“原始存儲”位非常重要。 如果腳本影響了IndexedDB或緩存存儲API,即使你把腳本刪掉,攻擊也可能會仍然繼續。
如果你在自己的代碼中引用了來自其他來源的腳本,那么必須絕對信任它們,并保證其安全性。
如果遇到惡意腳本,則應使用 Clear-Site-Data 標頭清除所有站點數據。
第三方CSSCSS的作用更接近于腳本而不是圖像。和腳本一樣,它適用于整個頁面。 它可以:
刪除/添加/修改頁面內容。
根據頁面內容發出請求。
對許多用戶交互作出響應。
CSS不能修改原始存儲,你不能用CSS寫一個挖礦程序(也有可能,或許我還不知道),但惡意CSS仍然可以造成很大的破壞。
鍵盤記錄器咱們從最開始的那個問題開始
input[type="password"][value$="p"] { background: url("/password?p"); }
如果輸入的 value 屬性以 p 結尾,上面的代碼將觸發對 /password?p 的請求。 對每個字符都會執行此操作,這樣你會獲得大量鍵盤輸入的數據。
默認情況下,瀏覽器不會將用戶輸入的值存儲在 value 屬性中,因此攻擊往往在同步這些值的內容時發生,例如React。
為了緩解這種情況,React可以使用另一種同步密碼字段的方法,或者瀏覽器可以限制與密碼字段的 value 屬性匹配的選擇器,但這僅僅是一種虛假的安全感。 你只不過是解決了一個特定的問題,但其他情況下一切照舊。
如果 React 切換到使用data-value屬性,則上述手段將失敗。如果站點將輸入更改為type ="text",那么用戶可以看到他們正在輸入的內容,則這種手段失敗。 如果站點創建
此外,還有許多基于CSS的攻擊:
消失的內容body { display: none; } html::after { content: "HTTP 500 Server Error"; }
這是一個極端的例子,但想象一下,如果第三方代碼為你的一小部分用戶做了這種事,會出現什么樣的后果:將會侵蝕掉用戶對你的信任,同時很難排查問題到底出在何處。
更加腹黑的黑客可能會偶爾刪除“購買”按鈕,或著重新排列內容中的段落。
添加內容.price-value::before { content: "1"; }
哎呀,你這么快就漲價了!
移除內容delete-everything-button { opacity: 0; position: absolute; top: 500px; left: 300px; }
把一個有“刪庫跑路”功能的按鈕設為不可看,然后再把它放在用戶可能會點擊的地方。
值得慶幸的是,如果按鈕執行的是后果非常嚴重的操作,該網站可能會首先顯示確認對話框。 沒關系,只需使用更多的CSS來誘騙用戶單擊“是的我確定!”按鈕而不是“哦天吶!不是!”按鈕。
想象一下,如果瀏覽器確實試圖消除“鍵盤記錄”這種小伎倆的影響。攻擊者還可以在頁面上放一個非密碼文本輸入框(可能是搜索字段)并將其覆蓋在密碼輸入框之上,呵呵,現在他們又回來了。
讀取屬性你擔心的可不僅僅是密碼。 一些私有內容可能會保存在屬性中:
所有這些都可以被CSS選擇器設為目標,并且可以把結果發到某個服務器上。
監控互動.login-button:hover { background: url("/login-button-hover"); } .login-button:active { background: url("/login-button-active"); }
可以將hover和active等動作發送回服務器。 適當的使用CSS,你可以很好地了解用戶想要干什么。
讀取文本@font-face { font-family: blah; src: url("/page-contains-q") format("woff"); unicode-range: U+71; } html { font-family: blah, sans-serif; }
在這種情況下,如果頁面包含q,將發送請求。 你可以為不同的文字創建大量的這種請求,并可以定位特定的元素。 字體還可以包含連字,因此還可以檢測字符序列。 你甚至可以將字體技巧與滾動條檢測相結合,從而能推斷出更多相關內容的信息。
結論:第三方內容并不安全這些只是我所知道的一些技巧,我相信還會有更多類似的小技巧。
第三方內容在其沙箱中具有很高的影響力。 雖然圖像或沙盒iframe有著非常小的沙箱,但腳本和樣式的作用范圍卻影響你的整個頁面,甚至是整個站點。
如果你擔心用戶會欺騙你的網站去加載第三方資源,可以使用CSP(內容安全策略)保證安全,從而限制從中獲取圖像,腳本和樣式的位置。
還可以使用子資源完整性來確保腳本/樣式的內容與特定的哈希匹配,否則將無法執行。
如果你對這種安全技術感興趣,包括滾動條技巧的更多細節,可以去看看Mathias Bynens在2014年的演講,Mike West在2013年的演講,或Mario Heiderich等人的2012年論文。 沒錯,這些技術并不是最新的。
本文首發微信公眾號:jingchengyideng
歡迎關注,每天都給你推送新鮮的前端技術文章
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/11464.html
摘要:不過真正的問題在于第三方內容是不是安全的。第三方的作用更接近于腳本而不是圖像。結論第三方內容并不安全這些只是我所知道的一些技巧,我相信還會有更多類似的小技巧。第三方內容在其沙箱中具有很高的影響力。 原文:https://jakearchibald.com/201...翻譯:瘋狂的技術宅 本文首發微信公眾號:jingchengyideng歡迎關注,每天都給你推送新鮮的前端技術文章 前...
答案自己谷歌或百度找。 一、來源背景 面試題是來自微博@牛客網發布的真實大廠前端面經題目,我一直在收集題目長期一個一個的記錄下來的,可能會有重復,但基本前端的面試大綱和需要掌握的知識都在其中了,面試題僅做學習參考,學習者閱后也要用心鉆研其中的原理,重要知識需要系統學習、透徹學習,形成自己的知識鏈。 二、532道前端真實大廠面試題 express和koa的對比,兩者中間件的原理,koa捕獲異常多種情...
答案自己谷歌或百度找。 一、來源背景 面試題是來自微博@牛客網發布的真實大廠前端面經題目,我一直在收集題目長期一個一個的記錄下來的,可能會有重復,但基本前端的面試大綱和需要掌握的知識都在其中了,面試題僅做學習參考,學習者閱后也要用心鉆研其中的原理,重要知識需要系統學習、透徹學習,形成自己的知識鏈。 二、532道前端真實大廠面試題 express和koa的對比,兩者中間件的原理,koa捕獲異常多種情...
答案自己谷歌或百度找。 一、來源背景 面試題是來自微博@牛客網發布的真實大廠前端面經題目,我一直在收集題目長期一個一個的記錄下來的,可能會有重復,但基本前端的面試大綱和需要掌握的知識都在其中了,面試題僅做學習參考,學習者閱后也要用心鉆研其中的原理,重要知識需要系統學習、透徹學習,形成自己的知識鏈。 二、532道前端真實大廠面試題 express和koa的對比,兩者中間件的原理,koa捕獲異常多種情...
摘要:前端面試每日題,以面試題來驅動學習,每天進步一點讓努力成為一種習慣,讓奮斗成為一種享受相信堅持的力量項目地址推薦歡迎跟一起折騰前端,系統整理前端知識,目前正在折騰,打算打通算法與數據結構的任督二脈。 《論語》,曾子曰:吾日三省吾身(我每天多次反省自己)。 前端面試每日3+1題,以面試題來驅動學習,每天進步一點! 讓努力成為一種習慣,讓奮斗成為一種享受!相信 堅持 的力量!!! 項目...
閱讀 1707·2023-04-26 02:30
閱讀 1033·2021-11-10 11:36
閱讀 1380·2021-10-08 10:14
閱讀 3496·2021-09-28 09:35
閱讀 1552·2021-08-23 09:47
閱讀 2544·2019-08-30 15:56
閱讀 1469·2019-08-30 15:44
閱讀 1750·2019-08-30 13:59