Web安全之服務器端請求偽造(SSRF)類漏洞詳解及預防
如何理解服務器端請求偽造(SSRF)類漏洞
當服務器向用戶提交的未被嚴格校驗的URL發起請求的時候,就有可能會發生服務器端請求偽造(SSRF,即Server-Side Request Forgery)攻擊。
SSRF是由攻擊者構造惡意請求URL,由服務端發起請求的安全漏洞。攻擊者可以利用SSRF漏洞來攻擊到內部系統,因為服務器請求天然發生在系統內部。SSRF 形成的原因大都是由于服務端提供了從其他服務端應用獲取數據的功能,但又沒有對目標地址做校驗與限制。
應用程序為了給用戶提供更多更方便的功能,從另一個URL獲取數據的場景越來越多,因此SSRF漏洞也越來越多。此外,由于云服務和體系結構的復雜性,SSRF攻擊產生的影響也越來越大。
舉個例子
假設一個電商網站,展示商品詳情的時候也同時展示庫存數量,庫存數量需要提供商品詳情信息的后端服務通過REST API查詢其他后端服務得到,而其他后端服務的URL地址直接包含在查詢商品詳情的接口中,作為此接口的一個參數。所以展示商品詳情界面會發出如下請求:
這種情況下,攻擊者可以通過修改請求參數stockApi以指定任意URL,例如:
此時,服務端就會訪問http://localhost/admin并將其內容返回給用戶,攻擊者就可以采用這用方式來嘗試獲取到服務器相關的信息。
如何預防SSRF攻擊
- 嚴格校驗用戶輸入的URL,可以使用白名單過濾來限制輸入,只允許特定的協議、主機和端口。
- 不要把原始的響應數據返回給客戶端。
- 限制Web應用程序的網絡訪問權限,可以讓遠程資源訪問功能使用單獨的網絡。
- 限制Web應用程序對服務器端資源的訪問權限,可以使用訪問控制列表(ACL)來限制應用程序可以訪問的URL和端口。
- 加強代碼審核,通過人工審核和自動化審核工具審核的方式來發現潛在的SSRF漏洞。