歡迎光臨
每天分享高質量文章

Web 應用常見安全漏洞一覽

作者:深予之 (@senntyou)

鏈接:https://segmentfault.com/a/1190000018004657

1、SQL 註入

SQL 註入就是通過給 web 應用接口傳入一些特殊字符,達到欺騙服務器執行惡意的 SQL 命令。

SQL 註入漏洞屬於後端的範疇,但前端也可做體驗上的優化。

原因

當使用外部不可信任的資料作為引數進行資料庫的增、刪、改、查時,如果未對外部資料進行過濾,就會產生 SQL 註入漏洞。

比如:

  1. name = "外部輸入名稱";
  2.  
  3. sql = "select * from users where name=" + name;

上面的 SQL 陳述句目的是通過用戶輸入的用戶名查找用戶信息,因為由於 SQL 陳述句是直接拼接的,也沒有進行過濾,所以,當用戶輸入''or'1'='1'時,這個陳述句的功能就是搜索users全表的記錄。

  1. select * from users where name='' or '1'='1';
解決方案

具體的解決方案很多,但大部分都是基於一點:不信任任何外部輸入。

所以,對任何外部輸入都進行過濾,然後再進行資料庫的增、刪、改、查。

此外,適當的權限控制、不曝露必要的安全信息和日誌也有助於預防 SQL 註入漏洞。

參考《Web 安全漏洞之 SQL 註入 – 防禦方法》(https://juejin.im/post/5bd5b820e51d456f72531fa8#heading-2) 瞭解具體的解決方案。

推薦參考
  • 《Web 安全漏洞之 SQL 註入》:https://juejin.im/post/5bd5b820e51d456f72531fa8

  • 《SQL 註入詳解》:https://segmentfault.com/a/1190000007520556

2、XSS 攻擊

XSS 攻擊全稱跨站腳本攻擊(Cross-Site Scripting),簡單的說就是攻擊者通過在標的網站上註入惡意腳本並運行,獲取用戶的敏感信息如 Cookie、SessionID 等,影響網站與用戶資料安全。

XSS 攻擊更偏向前端的範疇,但後端在儲存資料的時候也需要對資料進行安全過濾。

原因

當攻擊者通過某種方式向瀏覽器頁面註入了惡意代碼,並且瀏覽器執行了這些代碼。

比如:

在一個文章應用中(如微信文章),攻擊者在文章編輯後臺通過註入script標簽及js代碼,後端未加過濾就儲存到資料庫,前端渲染文章詳情的時候也未加過濾,這就會讓這段js代碼執行,引起 XSS 攻擊。

解決方案

一個基本的思路是渲染前端頁面(不管是客戶端渲染還是服務器端渲染)或者動態插入 HTML 片段時,任何資料都不可信任,都要先做 HTML 過濾,然後再渲染。

參考《前端安全系列(一):如何防止XSS攻擊? – 攻擊的預防》(https://segmentfault.com/a/1190000016551188#articleHeader7) 瞭解具體的解決方案。

推薦參考
  • 《前端安全系列(一):如何防止XSS攻擊?》:https://segmentfault.com/a/1190000016551188

  • 《前端防禦 XSS》:https://juejin.im/entry/56da82a87664bf0052ebad41

  • 《淺說 XSS 和 CSRF》:https://juejin.im/entry/5b4b56fd5188251b1a7b2ac1

3、CSRF 攻擊

CSRF 攻擊全稱跨站請求偽造(Cross-site Request Forgery),簡單的說就是攻擊者盜用了你的身份,以你的名義發送惡意請求。

原因

一個典型的 CSRF 攻擊有著如下的流程:

  • 受害者登錄 a.com,並保留了登錄憑證(Cookie)

  • 攻擊者引誘受害者訪問了 b.com

  • b.com 向 a.com 發送了一個請求: a.com/act=xx(瀏覽器會預設攜帶 a.com 的 Cookie)

  • a.com 接收到請求後,對請求進行驗證,並確認是受害者的憑證,誤以為是受害者自己發送的請求

  • a.com 以受害者的名義執行了 act=xx

  • 攻擊完成,攻擊者在受害者不知情的情況下,冒充受害者,讓 a.com 執行了自己定義的操作

註:上面的過程摘自《前端安全系列之二:如何防止CSRF攻擊?》(https://segmentfault.com/a/1190000016659945)。

解決方案

防止 CSRF 攻擊需要在服務器端入手,基本的思路是能正確識別是否是用戶發起的請求。

參考《前端安全系列之二:如何防止CSRF攻擊? – 防護策略》(https://segmentfault.com/a/1190000016659945#articleHeader4) 瞭解具體的解決方案。

推薦參考
  • 《前端安全系列之二:如何防止CSRF攻擊?》:https://segmentfault.com/a/1190000016659945

  • 《Web安全漏洞之CSRF》:https://juejin.im/post/5ba1a800e51d450e8657f5dd

  • 《淺說 XSS 和 CSRF》:https://juejin.im/entry/5b4b56fd5188251b1a7b2ac1

4、DDoS 攻擊

DoS 攻擊全稱拒絕服務(Denial of Service),簡單的說就是讓一個公開網站無法訪問,而 DDoS 攻擊(分佈式拒絕服務 Distributed Denial of Service)是 DoS 的升級版。

這個就完全屬於後端的範疇了。

原因

攻擊者不斷地提出服務請求,讓合法用戶的請求無法及時處理,這就是 DoS 攻擊。

攻擊者使用多台計算機或者計算機集群進行 DoS 攻擊,就是 DDoS 攻擊。

解決方案

防止 DDoS 攻擊的基本思路是限流,限制單個用戶的流量(包括 IP 等)。

參考《DDoS的攻擊及防禦 – 防禦》(https://segmentfault.com/a/1190000016584829#articleHeader19) 瞭解具體的解決方案。

推薦參考
  • 《DDoS的攻擊及防禦》:https://segmentfault.com/a/1190000016584829

  • 《淺談 DDoS 攻擊與防禦》:https://juejin.im/entry/5b7a21256fb9a01a031aef67

  • 《使用 Nginx、Nginx Plus 抵禦 DDOS 攻擊》:https://juejin.im/entry/56d824591ea493005db9d284

5. XXE 漏洞

XXE 漏洞全稱 XML 外部物體漏洞(XML External Entity),當應用程式解析 XML 輸入時,如果沒有禁止外部物體的加載,導致可加載惡意外部檔案和代碼,就會造成任意檔案讀取、命令執行、內網端口掃描、攻擊內網網站等攻擊。

這個只在能夠接收 XML 格式引數的接口才會出現。

解決方案

1、禁用外部物體

2、過濾用戶提交的XML資料

參考《xxe漏洞的學習與利用總結》(https://www.cnblogs.com/r00tuser/p/7255939.html) 瞭解具體的解決方案。

推薦參考
  • 《好剛:6分鐘視頻看懂XXE漏洞攻擊》:https://juejin.im/entry/5b719fdc6fb9a009a0607aaa

  • 《xxe漏洞的學習與利用總結》:https://www.cnblogs.com/r00tuser/p/7255939.html

  • 《XXE漏洞攻防學習(上)》:https://www.cnblogs.com/ESHLkangi/p/9245404.html

6、JSON 劫持

JSON 劫持(JSON Hijacking)是用於獲取敏感資料的一種攻擊方式,屬於 CSRF 攻擊的範疇。

原因

一些 Web 應用會把一些敏感資料以 json 的形式傳回到前端,如果僅僅通過 Cookie 來判斷請求是否合法,那麼就可以利用類似 CSRF 的手段,向標的服務器發送請求,以獲得敏感資料。

比如下麵的鏈接在已登錄的情況下會傳回 json 格式的用戶信息:

  1. http://www.test.com/userinfo

攻擊者可以在自己的虛假頁面中,加入如下標簽:

赞(0)

分享創造快樂