Được rồi, tôi gặp sự cố xác thực nhỏ. Dịch vụ web của tôi cho phép kết nối với API của tôi qua HTTP với tên người dùng và mật khẩu, nhưng kết nối này cũng có thể bị giới hạn ở một địa chỉ IP cụ thể.Cách sử dụng HTTP_X_FORWARDED_FOR đúng cách?
Điều này có nghĩa là $_SERVER['REMOTE_ADDR']
có thể không chính xác. Tôi đã biết rằng mọi thông tin IP có thể không bao giờ thực sự được dựa vào - tôi chỉ có giới hạn trong một nỗ lực để thêm một lớp bảo mật khác.
Nếu đây là tổng quan chung của một yêu cầu đến máy chủ web của tôi:
clientSERVER => clientPROXY => myPROXY => mySERVER
Sau đó, điều này có nghĩa rằng myserver lãm REMOTE_ADDR
của MyProxy thay vì đó của khách hàng và gửi IP thực tế của khách hàng là HTTP_X_FORWARDED_FOR
.
Để khắc phục điều này, dịch vụ web của tôi có danh sách địa chỉ IP 'tin cậy proxy' và nếu REMOTE_ADDR
là một trong những địa chỉ IP đáng tin cậy đó, thì nó sẽ cho dịch vụ web của tôi biết địa chỉ IP thực tế là giá trị HTTP_X_FORWARDED_FOR
.
Bây giờ vấn đề là với clientPROXY. Điều này có nghĩa là (thường xuyên) mySERVER nhận được giá trị HTTP_X_FORWARDED_FOR
có nhiều địa chỉ IP. Theo tài liệu HTTP_X_FORWARDED_FOR
, giá trị là danh sách địa chỉ IP được phân tách bằng dấu phẩy, trong đó IP đầu tiên là địa chỉ IP của ứng dụng khách thực sự và mọi địa chỉ IP khác là của proxy.
Vì vậy, nếu HTTP_X_FORWARDED_FOR
có nhiều giá trị và dịch vụ của tôi bị hạn chế IP, tôi có phải kiểm tra giá trị 'cuối cùng' của HTTP_X_FORWARDED_FOR
đối với danh sách IP được cho phép của tôi không? Tôi giả định rằng trong một hệ thống, nơi tôi phải thiết lập danh sách các địa chỉ IP được cho phép, địa chỉ IP được đưa vào danh sách trắng phải là địa chỉ của proxy và không phải là IP phía sau proxy (vì đó có thể là một số IP localhost). và thay đổi thường xuyên).
Và nội dung của HTTP_CLIENT_IP
là gì?
http : //stackoverflow.com/q/7445592/759866 – Benjamin