2012-02-17 48 views
5

Tôi muốn định cấu hình máy trong mạng của mình để chấp nhận tất cả cuộc gọi từ một máy cụ thể mà không cần xác thực. Đối với điều này tôi đang lập kế hoạch để sử dụng địa chỉ IP của máy khách như là yếu tố tin tưởng cần thiết để cho phép xác thực không được kiểm soát.Có thể xác định chính xác địa chỉ IP của ứng dụng khách trong java servlet

Mối quan tâm của tôi là có thể xác định chính xác địa chỉ IP của ứng dụng khách trong một servlet java? Có thể là IP mà tôi nhận được trong servlet có thể được thay đổi bởi một số cơ chế hacking để làm cho máy chủ của tôi tin rằng đó là IP đáng tin cậy?

Ví dụ: nếu máy chủ của tôi được định cấu hình để tin tưởng 192.168.0.1, thì có thể một số ứng dụng khách khác không phải là 192.168.0.1 giả vờ là 192.168.0.1 và đánh lừa cơ chế xác thực của tôi không?

Trả lời

14

Bạn có thể sử dụng phương thức getRemoteAddr() từ lớp HttpServletRequest để nhận địa chỉ IP. Hãy cẩn thận, mặc dù. Nếu khách hàng của bạn ở phía sau máy chủ proxy (hoặc thậm chí là tường lửa NATting), bạn sẽ nhận được địa chỉ IP proxy thay thế.

Vì vậy, bạn cũng có thể tìm tiêu đề X-Forwarded-For HTTP (tiêu chuẩn để xác định địa chỉ IP nguồn của ứng dụng phía sau proxy HTTP). Xem thêm trên Wikipedia. Hãy cẩn thận, mặc dù. Nếu máy khách của bạn KHÔNG ở phía sau proxy, bạn có thể nhận được một tiêu đề XFF rỗng. Vì vậy, nếu bạn theo con đường này, bạn nên sử dụng một hỗn hợp các phương thức servlet và đánh giá tiêu đề XFF. Tuy nhiên, không có gì đảm bảo rằng proxy sẽ chuyển tiếp cho bạn tiêu đề.

Nhưng lưu ý rằng địa chỉ IP nguồn có thể dễ dàng thay đổi hoặc giả mạo bởi bất kỳ ứng dụng khách độc hại nào. Tôi thực sự khuyên bạn nên sử dụng một số loại xác thực ứng dụng khách (ví dụ: chứng chỉ). Không có cách nào cho một ứng dụng web để chính xác xác định địa chỉ IP của khách hàng.

+0

và +1 để đề cập đến tiêu đề XFF và khả năng cho nó là rỗng – stevevls

+0

xác thực ứng dụng khách hoạt động như thế nào? khách hàng có thể gửi một chứng chỉ tương tự như những gì máy chủ gửi trong giao tiếp https để xác định chính nó, bạn có thể vui lòng cung cấp một số chi tiết về điều này không. – Ashish

+1

Bạn có thể tạo chứng chỉ ứng dụng khách tự ký và cài đặt nó trên kho khóa máy của máy khách (bạn có đang sử dụng Java trong máy khách của mình không?). Sau đó, máy chủ của bạn chỉ nên chấp nhận các yêu cầu được ký bởi chứng chỉ ứng dụng khách từ một CA đã cho (chính bạn, trong trường hợp này). Có rất nhiều tài liệu liên quan đến chứng chỉ Java + client trên web. Ngoài ra, có một cái nhìn tại excelent [Wikipedia entry] (http://en.wikipedia.org/wiki/Transport_Layer_Security) trên TLS cho những điều cơ bản. – Viccari

0

IP có thể dễ dàng bị giả mạo như người gửi email, tôi thực sự khuyên bạn không nên chỉ dựa vào chúng.

+0

Không dễ dàng như người gửi thư, khi bạn trả lời địa chỉ IP được chỉ định. Vì vậy, vấn đề thực sự là nguồn ip tzrusting trong trường hợp hành động, nhưng bạn có thể dựa vào chúng khi cung cấp thông tin – Hurda

+1

Vâng, tôi upvoted stevelvs trả lời bởi vì ông làm cho sự khác biệt giữa viết và readonly. Btw. người gửi thư hoàn toàn giống nhau vì bạn không thể nhận được câu trả lời trong cả hai trường hợp. – wintersolutions

7

Dịch vụ của bạn có thể dễ bị tổn thương đối với IP Spoofing. Thật dễ dàng để giả mạo các gói xuất hiện từ một địa chỉ IP khác. Tuy nhiên, điều về giả mạo là kẻ tấn công sẽ không thể nhận bất kỳ gói phản hồi nào. Do đó, nếu gọi dịch vụ của bạn không gây ra thay đổi trạng thái nội bộ (nghĩa là chỉ đọc), thì bạn sẽ không sao. Tuy nhiên, nếu các cuộc gọi đến dịch vụ của bạn sẽ phát hành ghi, thì bạn không nên chỉ đơn giản dựa vào địa chỉ IP vì gói giả mạo sẽ đủ để thay đổi trạng thái nội bộ của hệ thống của bạn.

+0

+1 để mang lại hiệu ứng đọc và viết. – Viccari

+0

bạn có thể vui lòng cung cấp một số cách để tôi có thể đạt được chức năng mong muốn, tức là tin tưởng một máy trong mạng của tôi. – Ashish

+0

một phần của những gì bạn có thể muốn làm là quyết định mức độ chấp nhận được rủi ro cân bằng với bao nhiêu chu kỳ bạn phải khóa nó xuống. nếu bạn là một ngân hàng, thì bạn cần phải chắc chắn rằng nó là đá vững chắc, nhưng các ứng dụng khác có nhiều khoan dung hơn. một lựa chọn là đảm bảo rằng bạn không bị ràng buộc trên một IP công cộng và tin tưởng vào hệ thống quản trị hệ thống của bạn để giữ cho 'mạng bị khóa' cục bộ. nếu bạn thực sự cần phải bảo mật nó, các đề xuất của viccaris về việc sử dụng chứng chỉ ứng dụng khách là tốt nhất nếu bạn cần phải khóa nó. bất cứ điều gì bạn làm, nếu bạn vượt quá xác minh IP, hãy đảm bảo rằng bạn có thể thu hồi quyền truy cập dễ dàng. – stevevls

2

Bạn có thể ở địa phương có thể bị lỗi ARP Spoofing. Trường hợp máy độc hại thuyết phục bộ định tuyến kết hợp địa chỉ IP với địa chỉ MAC của nó.

Mức độ và cơ chế của sự tin tưởng thực sự phụ thuộc vào độ nhạy của máy chủ/dịch vụ mà bạn đang cố gắng để bảo vệ và môi trường bạn đang hoạt động tại.

Dường với tôi rằng đây là một sự sắp xếp địa phương cho các cá nhân Dải địa chỉ IP 192.168. Nếu máy chủ này không phải là công chúng phải đối mặt, không quan trọng và bạn đang hoạt động trong một môi trường mạng LAN tương đối an toàn đó là cũng tắt từ công chúng và LANS tư nhân khác thì bạn sẽ được OK. Nếu không, bạn nên xem xét các tùy chọn bảo mật khác ở mức cao hơn.

+0

điểm tốt đẹp. tôi vẫn chưa dành nhiều thời gian lo lắng cho người dùng độc hại trên mạng cục bộ, mặc dù nó chắc chắn đã xảy ra và một ý tưởng tốt để bảo vệ chống lại. :) – stevevls

+0

Phạm vi ip 192.168 sẽ không được thực hiện bởi bất kỳ bộ định tuyến công cộng nào. Vì vậy, bất kỳ mối đe dọa sẽ phải đến nội bộ –

1

Quan ngại của tôi là có thể xác định chính xác địa chỉ IP của ứng dụng khách trong một servlet java?

Không thể thực hiện được. Có một số tình huống mà bạn sẽ không thấy địa chỉ IP của ứng dụng khách thực sự do hành động của người dùng hoặc các lý do khác nằm ngoài tầm kiểm soát của người dùng.

Trong các trường hợp sau, việc xác định dựa trên IP kết thúc gây ra đau đầu cho khách hàng trung thực của bạn; tức là khách hàng mà bạn thực sự muốn giữ.

Nếu bạn thực sự cần giới hạn quyền truy cập vào bộ máy tính cụ thể, bạn nên cân nhắc sử dụng một cái gì đó như SSL/TLS với chứng chỉ ứng dụng làm tuyến phòng thủ đầu tiên của bạn. TLS với chứng chỉ ứng dụng khách được mô tả here.

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