通過限制對內網地址的訪問來達到防禦***F的效果。
內網,即Private Network是有標準定義的,有下面這些:
IP協議私有網段
10.0.0.0/8
172.16.0.0/12
192.168.0.0/16
私有網段,運營商級NAT內網保留地址段,例如各種proxy:
100.64.0.0/10
Local Link網段,獲取DHCP失敗時,系統會分配這個網段的IP給host,方便跟同一局域網的機器交流
169.254.0.0/16
迴環網段
127.0.0.0/8
不過限制IP是不能完全防住的,由於存在DNS繞過的漏洞(參考下面的文章《DNS繞過策略》)。這種漏洞原理上是利用了兩次DNS之間的間隙去切換DNS指向,如果沒有這個間隙的話,IP攔截是足夠的。所以邏輯上建議做成這個樣子:
1、用DNS獲取url中host的IP
2、檢查IP是否爲內網網段
3、直接跟IP建立鏈接,獲取socket
4、直接往socket做HTTP請求
這樣就可以保證在第二步攔下所有內網IP。