Web 應用基于 C/S(Client/Server)服務模型搭建:用戶端發送請求,服務端負責響應。一般用戶端就是浏覽器,但可以向伺服器發送請求的軟體則遠遠不限于浏覽器。Web 伺服器通常以公開的域名接收請求并提供服務,需要應對任何來源的請求。
保障 Web 應用的安全需要前後端配合,但主要還是服務端。服務端需要全面分析項目所實作的功能,對任何可能暴露漏洞、引發攻擊的接口,都要提前拟定防禦措施,由前後端共同配合實施,落實到位。
本文總結了 Web 應用最常見的 6 種漏洞,并對這些漏洞的危害、成因以及解決方案進行了簡要分析。
- SQL 注入
- 權限繞過
- XSS
- CSRF
- SSRF
- 郵件 / 短信轟炸
漏洞危害:
- 洩露使用者隐私
- 執行惡意代碼
- 繞過通路控制
XSS(Cross Site Scripting,跨站點腳本),是由于沒有恰當過濾使用者輸入,導緻攻擊者把惡意腳本上傳到伺服器,進而注入到網頁中。
要堵住這個漏洞,關鍵不在于輸入過濾,而在于輸出過濾。
解決方案:使用者可以通過表單向伺服器送出任意文本,但在伺服器要渲染使用者輸入内容時,必須進行反 XSS 過濾。
- 可導緻資料庫被拖
- 重要資訊洩露
- 上傳 webshell
- 執行系統指令,進而控制伺服器
之是以會發生 SQL 注入,主要因為代碼中存在拼接 SQL 語句的情況。比如:
SELECT field FROM tableName WHERE ( name = " + name + " )複制代碼
這個查詢使用參數name拼接了一條SELECT語句。
要堵住這個漏洞,關鍵是保證參數name的值必須合法有效。
解決方案:在實際拼接 SQL 語句之前,要對name進行合法性驗證,通過驗證後再去拼接。
- 攻擊者執行未經授權的功能
- 攻擊者通路其他正常使用者的資訊
- 攻擊者越權使用高權限使用者的功能
權限繞過,顯然是因為沒有對使用者身份及權限進行驗證或者驗證不完善造成的。
要堵住這個漏洞,核心是確定使用者有權發送相應請求。
解決方案:伺服器給使用者浏覽器種上 cookie,同時根據 cookie 生成唯一的 token,與 cookie 值一同儲存在伺服器上(或資料庫裡)。對于敏感的操作(比如發表、修改文章),服務端要驗證 cookie 是否與 token 一緻。
- 攻擊者能夠欺騙受害使用者完成應用允許的任一狀态改變的操作
CSRF(Cross-Site Request Forgery,跨站點請求僞造),就是利用受站點信任的使用者發送惡意請求。
要堵住這個漏洞,核心也是確定使用者有權限發送相應請求。
解決方案:在重要請求中的每一個 URL 和所有的表單中添加 token,并在伺服器端驗證該 token。
- 攻擊者可以利用這個漏洞,讓伺服器替他請求資源,特别是内網資源
- 對内網 web 應用進行指紋識别
- 利用 file 協定讀取本地檔案
SSRF(Server Side Request Forge,服務端請求僞造),利用 Web 伺服器可以通路内網竊取内網資訊或攻擊内網伺服器。
要堵住這個漏洞,關鍵在于驗證使用者輸入的網址,特别是網址解析後的 IP 位址。
解決方案:解析使用者送出的網址得到 IP,對于短連結或 xip.io 等代理服務生成的 IP 必須跟蹤解析,然後屏蔽内網 IP 段。
- 騷擾未知使用者
- 消耗伺服器資源
郵件 / 短信轟炸,主要由于郵件訂閱或短信驗證接口沒有做好防護。