hôm nay tôi đã gặp một hành vi khá lạ lùng của một ứng dụng dựa trên php của tôi. Trong một phần nhất định của hệ thống, có giao diện người dùng sử dụng các cuộc gọi AJAX để điền vào danh sách các ô có nội dung từ chương trình phụ trợ.php/ajax REMOTE_ADDR đặt thành IP của bộ điều hợp mạng không có thật
Bây giờ, trình lắng nghe AJAX thực hiện kiểm tra bảo mật trên tất cả các yêu cầu gửi đến, đảm bảo rằng chỉ các IP khách hàng hợp lệ mới nhận được phản hồi. IP hợp lệ cũng được lưu trữ trong chương trình phụ trợ.
Để có được IP của khách hàng tôi đã sử dụng đồng bằng cũ
$_SERVER['REMOTE_ADDR']
mà hoạt động ra cho hầu hết các khách hàng. Hôm nay tôi chạy vào một cài đặt nơi remote_addr chứa IP của một bộ điều hợp mạng mà không phải là một trong đó thực hiện giao tiếp thực tế cho ứng dụng của tôi.
Googling xung quanh agve tôi Roshan's Blog entry on the topuic:
function getRealIpAddr()
{
if (!empty($_SERVER['HTTP_CLIENT_IP'])) //check ip from share internet
{
$ip=$_SERVER['HTTP_CLIENT_IP'];
}
elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))//check ip is pass from prxy
{
$ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
}
else
{
$ip=$_SERVER['REMOTE_ADDR'];
}
return $ip;
}
Đáng buồn là vấn đề vẫn còn.
Có ai từng vấp phải vấn đề này (thực ra tôi không nghĩ rằng mình đã phát hiện ra một vấn đề mới hoàn toàn ^^) và có ý tưởng cho tôi cách khắc phục vấn đề này không?
EDIT:
Tôi đang trên
- PHP Version 5.2.9-1
- Apache/2.2.9 (Win32)
Các thông tin liên lạc được thực hiện thông qua một thẻ LAN thông thường. Bây giờ khách hàng actuall có nhiều thiết bị hơn . Bộ điều hợp VMNet và như vậy.
Tôi đang tự hỏi làm thế nào một cấu hình máy khách có thể 'phiền' một máy chủ web mà nhiều ...
TIA
K
bạn có thể đưa vào một số chi tiết ở đây liên quan đến người nhận và máy chủ đang chạy ứng dụng .. i có nghĩa là họ giữ IP nào. –
xin xem phần bổ sung của tôi – KB22
để trường hợp ví dụ có thể trông như thế này trên đầu khách hàng: eth0 - 10.0.0.1 eth1 - 10.1.1.1 rồi trên máy chủ u có 10.1.1.2 và khi yêu cầu chuyển từ máy khách thay vì 10.1 .1.1 nó cho thấy 10.0.0.1? –