2009-11-04 33 views
5

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

+1

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. –

+0

xin xem phần bổ sung của tôi – KB22

+0

để 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? –

Trả lời

4

Thật không may, bạn phải đưa tất cả thông tin IP với một hạt muối.

Địa chỉ IP được thu thập trong khi yêu cầu bằng cách lấy thông tin gói và yêu cầu. Đáng buồn thay, thông tin này có thể dễ dàng bị giả mạo hoặc thậm chí không chính xác (dựa trên một số lượng lớn xác suất mạng) và không nên được sử dụng cho bất kỳ mục đích nào khác ngoài mục đích.

+0

Thx cho điều này, nhưng có bất kỳ thực hành tốt nhất bạn có thể đề nghị? – KB22

+1

Mã trong câu hỏi của bạn là những gì tôi đã xem là "tùy chọn tốt nhất". Nó sẽ nắm bắt IP chính xác trong hầu hết các trường hợp. Chỉ cần hiểu rằng tôi sẽ không nhất thiết phải tin tưởng vào kết quả. –

+1

I C và được chấp nhận, nhưng bạn có thể bắt đầu giới thiệu một số đọc về cách REMOTE_ADDR vv thực sự được đặt bởi apache không? Tôi rất muốn hiểu điều gì khiến tôi gặp rắc rối. TIA – KB22

Các vấn đề liên quan