淺析如何做web安全問題
一、安全世界觀
在網際網路發展之初,IE 瀏覽器壟斷的時期,大家上網的目的都很單純,主要通過瀏覽器分享資訊,獲取新聞。但隨著網際網路的不斷髮展發展,一個網頁能做的事情越來越多,除了看新聞,我們還可以看視訊、玩遊戲、購物、聊天等,這些功能都大大豐富了我們的生活。
隨著網頁功能的逐漸增多,就開始出現了一些黑帽子,他們試圖通過一些技術手段來牟取利益。比如木馬病毒,它可以監控你的鍵盤,將你在鍵盤上敲打的內容傳送到黑客的機器上,黑客通過分析這些內容,很容易就能得到你的遊戲賬號和密碼。在這之後,就誕生出了一些防毒軟體,致力於解決網路上的各種病毒,隨著不斷地發展,防毒軟體已經成為一臺電腦必不可少的軟體。
為什麼會出現這樣的安全問題?
安全歸根到底是信任的問題,如果所有人都按照正常的流程去上網,不去謀取私利,也就沒有安全問題可談了。
安全的根本在於信任,但要讓所有人互相信任談何容易。在當前階段,我們可以做到:持續做好安全防護,讓漏洞越來越少,非法攻擊越來越困難,這樣就能逐漸減少黑帽子的數量,讓病毒製造者越來越少。
1、如何做好安全
要做好安全,首先得理解安全問題的屬性,前人通過無數實踐,最後將安全的屬性總結為安全三要素,分別為:
1)機密性
- 保護資料內容不被洩露。
- 通常使用加密的方法。
2)完整性
- 保護資料內容是完整的、沒有被篡改。
- 通常使用數字簽名的方法。
3)可用性。
- 資料隨時都能夠使用。
- 通常是在防禦 DOS。
2、安全評估
有了安全 3 要素之後,我們就可以對安全問題進行評估了。
1)資產等級劃分
- 找出最重要的資料。
- 找出最重要資料的宿主空間,如:在資料庫裡,那麼資料庫就得重點防禦。
- 找出資料庫的宿主空間,如:在一臺伺服器上,那麼這臺伺服器就得做次等防禦。
- 找出伺服器的宿主空間,如:在 OSI 網路層級上,那麼在網路層面就得做一般防禦。
2)威脅分析
- 找出威脅(可能造成危害的來源)。
- 找出風險(可能出現的損失叫做風險)。
3)風險分析
- 採取多標準決策分析,即:風險 = 威脅等級 * 威脅可行性。
- 計算所有的威脅,將最終的風險進行排序,優先解決風險大的問題。
4)確認解決方案
- 找出不安全的實現方式,並確定解決方案。
- 解決方案不要改變商業需求的初衷。
- 解決方案需對使用者透明,不要改變使用者的習慣。
做好安全評估之後,我們就有了一份安全解決方案,後續的安全工作只需按照這個方案去做,就沒有任何問題。
3、安全的原則
有了安全解決方案之後,我們還可以制定一些安全原則,遵守原則做事,可以讓我們事半功倍。
1)黑名單、白名單原則
- 白名單方案指的是給安全的資源授權。
- 黑名單方案指的是禁用不安全的資源。
- 我們應該優先使用白名單方案,因為黑名單通常統計不完所有的不安全資源。
- 如:XSS 攻擊的方式非常多,可以通過 script、css、image 標籤等,儘管你將這些標籤都加入黑名單,也不能保證其他的標籤都沒有 XSS 的攻擊隱患。
2)最小許可權原則
- 只授予必要的許可權,不要過度授權,減少出錯機會。
- 如:普通許可權的 Linux 使用者只能操作
~
資料夾下的目錄,如果有人想刪庫跑路,在執行rm -rf /
時,就會提示無許可權。
3)縱深防禦原則
- 這條原則類似
木桶理論
,安全水平往往取決於最短的那塊板。 - 即:不要留下短板,黑帽子們往往可以利用短板為突破口,挖掘更大的漏洞。
4)資料與程式碼分離原則
- 當用戶資料被當成程式碼執行時,混淆了資料和程式碼的邊界,從而導致安全問題。
- 如:XSS 就是利用這一點去攻擊的。
5)不可預測性原則
- 這條原則是為了提高攻擊門檻,有效防止基於篡改、偽造的攻擊。
- 如:資料庫中使用 uuid 代替 number 型的自增主鍵,可以避免 id 被攻擊者猜到,從而進行批量操作。
- token 也是利用不可預測性,攻擊者無法構造 token 也就無法進行攻擊。
有了這些安全原則,接下來介紹幾個常見的攻防案例。
二、安全攻防案例
安全攻防的案例非常多,這裡主要介紹幾個出鏡率比較高的安全問題。
客戶端攻擊主要有:XSS 攻擊、CSRF 攻擊、點選劫持。
1、XSS攻擊
XSS 攻擊的本質是將使用者資料當成了 HTML 程式碼一部分來執行,從而混淆原本的語義,產生新的語義。
如圖所示,我們註冊了一個<script>alert(document.cookie)</script>
的使用者名稱,所有能看到此使用者名稱字的頁面,都會彈出當前瀏覽器的 Cookie,如果程式碼的邏輯是將 Cookie 傳送到攻擊者的網站,攻擊者就能冒充當前使用者進行登入了。
XSS 攻擊方式有很多,所有和使用者互動的地方,都有可能存在 XSS 攻擊。例如:
- 所有 input 框。
- window.location。
- window.name。
- document.referrer。
- document.cookie。
- localstorage。
- ...
由於頁面中與使用者互動的地方非常多,肯定還有一些 XSS 的攻擊方式沒有被發現,而一旦被黑帽子發現,就可能造成嚴重的影響,所以我們務必引起重視。