X-Forwarded-For (XFF) dùng để thông báo địa chỉ IP gốc của người dùng khi kết nối với web server thông qua proxy.
Dạng tổng quát của XFF là:
- X-Forwarded-For: client, proxy1, proxy2
trong đó phần giá trị là “dấu phẩy + khoảng trắng” phân cách các địa chỉ IP. Địa chỉ bên trái nhất là IP gốc, kế tiếp là IP các proxy trung gian. Thí dụ, kết nối thông qua proxy1, proxy2, và rồi proxy3 (không hiện trong header). Proxy3 được xem như địa chỉ kết nối từ xa với server.
client --> proxy1 --> proxy2 --> [ proxy3 ] --> web server
Một số ứng dụng web làm việc với IP gốc, thí dụ FShare tạo link VIP chỉ dùng với IP gốc và không có hiệu lực khi dùng trên máy có IP khác. Khi đó có thể dùng XFF để giả lập IP gốc cho ứng dụng.
Thí dụ qui trình lấy link VIP FShare như sau
client --> Web server của FShare => Tạo ra link gắn với IP của client
Qui trình giả lập nhờ client1 lấy link cho client2
client1 + XFF IP của client2 --> Web server của FShare => Tạo ra link gắn với IP của client2
Đoạn mã sau đây, bằng ngôn ngữ PHP, mở trang chủ FShare dùng XFF
$cmd='curl -skLG -c cookies.txt -A \'' . $_SERVER['HTTP_USER_AGENT'] . '\' -H \'X-Forwarded-For: ' . $_SERVER['REMOTE_ADDR'] . '\' https://www.fshare.vn'; $p=shell_exec($cmd);
Các câu lệnh login, lấy link VIP và logout đều dùng XFF.
Khi đó, link VIP lấy được mặc dù từ IP của web server nhưng được tạo ra theo IP $_SERVER[‘REMOTE_ADDR’]