Có an toàn để tin tưởng $ _SERVER ['REMOTE_ADDR'] không?


89

Có an toàn để tin tưởng $_SERVER['REMOTE_ADDR']? Nó có thể được thay thế bằng cách thay đổi tiêu đề của yêu cầu hoặc một cái gì đó tương tự không?

Có an toàn để viết một cái gì đó như thế không?

if ($_SERVER['REMOTE_ADDR'] == '222.222.222.222') { // my ip address
    $grant_all_admin_rights = true;
}

3
Thêm vào các câu trả lời hiện có, nó sẽ luôn là địa chỉ IP thực hiện yêu cầu đến máy chủ của bạn, nhưng điều đó không có nghĩa là địa chỉ IP của máy tính đã bắt đầu yêu cầu. Bất kỳ số lượng máy chủ proxy nào cũng có thể nằm giữa bạn và người dùng cuối và máy chủ gần bạn nhất là địa chỉ IP bạn nhận được.
Dan Grossman

vâng, nó an toàn vì không thể bị thay thế bởi một thủ thuật khác hoặc một số gian lận. nhưng hãy đảm bảo rằng bạn thêm kiểm tra cho biến $ Grant_all_admin_rights.
Yuda Prawira

Bất kỳ biến $ _SERVER nào cũng có thể bị giả mạo - ví dụ: curl_setopt ($ ch, CURLOPT_HTTPHEADER, array ("REMOTE_ADDR: $ ip", "HTTP_X_FORWARDED_FOR: $ ip")); Vì vậy, nó hoàn toàn phụ thuộc vào ngữ cảnh: nếu kẻ tấn công đang mong đợi một phản hồi, nó sẽ quay trở lại $ ip. Nếu họ không quan tâm đến phản hồi, họ chắc chắn có thể giả mạo tiêu đề. Nếu mã của bạn sau khi kiểm tra tiêu đề thay vào đó cho biết: "open_the_door_to_badguys ();" bạn sẽ có một vấn đề.
TMG

3
@TMG Bạn không thể giả mạo $_SERVER['REMOTE_ADDR']biến bằng cách đặt tiêu đề yêu cầu HTTP. PHP tự động đặt tiền tố cho tất cả các tiêu đề yêu cầu HTTP HTTP_khi tạo khóa trong $_SERVERsuperglobal.
MrWhite

Câu trả lời:


110

Vâng, nó an toàn. Đây là IP nguồn của kết nối TCP và không thể thay thế bằng cách thay đổi tiêu đề HTTP.

Một trường hợp bạn có thể muốn lo lắng là nếu bạn đứng sau proxy ngược, trong trường hợp này, REMOTE_ADDR sẽ luôn là IP của máy chủ proxy và IP của người dùng sẽ được cung cấp trong tiêu đề HTTP (chẳng hạn như X-Forwarded-For ). Nhưng đối với trường hợp sử dụng thông thường, đọc REMOTE_ADDR là tốt.


4
Điều gì về giả mạo địa chỉ IP?
Abdull

1
@Abdull Những người có thể làm điều đó thường là những người có quyền truy cập thực tế vào hộp của bạn. vì vậy đừng lo lắng về nó nhiều như vậy.
Behrooz

5
@Abdull IP giả mạo chỉ có thể gửi tin nhắn một chiều, bạn không thể giả mạo IP của mình và nhận lại một tin nhắn.

1
Không phải các bộ định tuyến internet đang kiểm tra IP nguồn và đích để định tuyến các gói tin? Tôi nghi ngờ rằng một gói tin giả mạo sẽ đến đích qua các nút internet.
Viktor Joras

57

$_SERVER['REMOTE_ADDR']là địa chỉ IP mà kết nối TCP đã sử dụng. Mặc dù về mặt kỹ thuật, có thể giả mạo địa chỉ IP hai chiều trên Internet (bằng cách thông báo các tuyến đường xấu qua BGP), các cuộc tấn công như vậy có khả năng bị phát hiện và không có sẵn cho kẻ tấn công điển hình - về cơ bản, kẻ tấn công của bạn phải có quyền kiểm soát đối với ISP hoặc nhà cung cấp dịch vụ. Không có cuộc tấn công giả mạo một chiều khả thi nào chống lại TCP (chưa). Mặc dù vậy, giả mạo IP hai chiều là không đáng kể trên mạng LAN.

Cũng lưu ý rằng nó có thể không phải là IPv4 mà là địa chỉ IPv6. Kiểm tra hiện tại của bạn là tốt về mặt đó, nhưng nếu bạn kiểm tra mà 1.2.3.4chỉ xảy ra ở bất kỳ đâu bên trong $_SERVER['REMOTE_ADDR'], kẻ tấn công có thể chỉ cần kết nối từ 2001:1234:5678::1.2.3.4.

Tóm lại, đối với bất kỳ thứ gì khác ngoài các ứng dụng quan trọng (ngân hàng / quân sự / thiệt hại tiềm ẩn> 50.000 €), bạn có thể sử dụng địa chỉ IP từ xa nếu bạn có thể loại trừ những kẻ tấn công trong mạng cục bộ của mình.


4
Bạn có vẻ rất thông tin về Giao thức Internet.
Brian Peterson

@phihag, Việc $_SERVER['REMOTE_ADDR']kết nối TCP có phải là địa chỉ IP hay không phụ thuộc hoàn toàn vào SAPI của bạn.
Pacerier

Việc kẻ tấn công trên mạng WEP / WPA WLAN không thể tấn công máy khách thực và giả mạo địa chỉ ip đó - cả WEP và WPA đều có những điểm yếu khiến cho việc tạo you have been kicked off the wlangói giả mạo dễ dàng bằng các công cụ phù hợp. google WPA downgrade test, chẳng hạn
hanshenrik

Địa chỉ IP là cấp IP không phải cấp TCP.
Viktor Joras

3

Như đã nói ở trên, nó không an toàn tuyệt đối. Nhưng nó không có nghĩa là bạn không nên sử dụng nó. Hãy xem xét kết hợp điều này với một số phương pháp xác thực khác, chẳng hạn như kiểm tra các giá trị COOKIE.


6
Sau khi giả mạo địa chỉ IP, thay đổi theo yêu cầu http và gửi các tập tin cookie giả là một miếng bánh ..... (hoặc một miếng cookie)
Uri Goren

1
Xin giải thích những gì bạn có ý nghĩa bởi "không an toàn tuyệt đối"
Jake
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.