關於HTTP Headers X-Forwarded-For

關於HTTP Headers X-Forwarded-For

X-Forwarded-For (XFF) 標頭是辨識用戶端透過 HTTP 代理或負載平衡 IP 位置來源的,
事實上的標準。如果流量是在伺服器與用戶端中間擷取,伺服器日誌就只會代理或負載平衡的 IP 位置。
如果要檢查用戶端的 IP 的原始來源,就會去檢查 X-Forwarded-For 請求標頭。

語法

1
2
3
4
5
6
X-Forwarded-For: <client>, <proxy1>, <proxy2>
---
<client>
用戶端的 IP 位置
<proxy1>, <proxy2>
如果請求用上了多個代理,則列出每個後續代理的 IP 地址。也就是說,最右邊的 IP 位置,是最新代理的 IP 位置;最左邊的 IP 位置,是用戶端原始來源的 IP 位置。

X-Forwarded-For 可能被Hijack??

1
HTTP headers 可透過工具修改X-Forwarded-For內的值來達到hijack進而產生資安議題。

解決方法

1
2
3
4
5
在CDN上設定一組私有headers欄位來記錄 <client>, <proxy1>, <proxy2>...等IP,並在CDN上
將IP加密,Server端在使用解密的方式取得相關IP,來進行白名單驗證。

因為在CDN上設定另一組看不到的私有headers欄位以及透過加密加強資安,讓用戶端難以進行
Hijack。