2010-11-02 22 views
12

Trong nguồn ActionController, yêu cầu địa phương được quy định như sau:Rails ActionController: Sự khác nhau giữa request.remote_ip và request.remote_addr

def local_request? #:doc: 
    request.remote_addr == LOCALHOST && request.remote_ip == LOCALHOST 
end 

Trong ứng dụng của tôi, tôi muốn sử dụng logic khác nhau nếu yêu cầu được đến từ một phạm vi IP cụ thể. Sự khác biệt giữa request.remote_addrrequest.remote_ip là gì và tôi nên sử dụng loại nào?

Trả lời

13

Tôi là tác giả của việc triển khai hiện tại remote_ip và các nội dung khác bao gồm kiểm tra các cuộc tấn công giả mạo IP và xử lý chính xác nhiều tiêu đề X-Forwarded-For. Mặc dù vậy, có một sự báo trước lớn: chỉ một số máy chủ web của Ruby hỗ trợ nhiều tiêu đề, vì vậy giá trị vẫn có thể sai.

Tôi đã viết kết quả từ thử nghiệm các máy chủ ứng dụng Ruby phổ biến nhất on my blog, mà bạn có thể muốn kiểm tra xem các tiêu đề lặp lại có quan trọng đối với ứng dụng của bạn hay không.

9

Nó có vẻ là trường hợp mà remote_addr trả về giá trị của biến REMOTE_ADDR môi trường như nó vốn có, trong khi remote_ip sẽ điều chỉnh này dựa trên sự hiện diện của HTTP_X_FORWARDED_FORHTTP_CLIENT_IP biến là tốt, chẳng hạn như bạn có thể có khi khách hàng của bạn là được chuyển tiếp thông qua proxy.

Kiểm tra kỹ lưỡng số local_request? chỉ đơn giản là cách xác định người dùng đến từ máy cục bộ và không được chuyển tiếp từ nơi khác qua proxy cục bộ.

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