HttpServletRequest - làm thế nào để có được URL giới thiệu?


144

Tôi cần ghi nhật ký các URL đang liên kết đến trang web của mình trong Java Servlet.


Tôi có hiểu đúng về bạn không nếu tôi tìm thấy trang web của bạn trong google và mở liên kết thì bạn đã đăng nhập 'google.com'?
La Mã

Câu trả lời:


310

Nó có sẵn trong tiêu đề HTTPreferer . Bạn có thể lấy nó trong một servlet như sau:

String referrer = request.getHeader("referer"); // Yes, with the legendary misspelling.

Tuy nhiên, bạn cần nhận ra rằng đây là giá trị do khách hàng kiểm soát và do đó có thể bị giả mạo thành một thứ hoàn toàn khác hoặc thậm chí bị xóa. Do đó, bất kỳ giá trị nào nó trả về, bạn không nên sử dụng nó cho bất kỳ quy trình kinh doanh quan trọng nào trong phần phụ trợ, mà chỉ để kiểm soát bản trình bày (ví dụ: ẩn / hiển thị / thay đổi một số phần bố cục thuần túy) và / hoặc thống kê.

Đối với người quan tâm, nền tảng về lỗi chính tả có thể được tìm thấy trong Wikipedia .


2
nó có làm nên sự khác biệt "người giới thiệu" & "người giới thiệu" không?
ante.sabo

7
@ante: không, việc tra cứu tiêu đề không phân biệt chữ hoa chữ thường.
BalusC

2
Lưu ý rằng bất kỳ tiêu đề có thể được null.
rds

@BalusC Nếu tôi cần hai url trước thì sao? Điều đó là có thể ?
Thiên thần Cuenca

26

Trên thực tế, đó là : request.getHeader("Referer"), hoặc thậm chí tốt hơn, và để chắc chắn 100% request.getHeader(HttpHeaders.REFERER), trong đó, httpHeaders làcom.google.common.net.HttpHeaders


11
Từ các tài liệu API Java EE cho phương pháp này getHeader(String name)(báo giá):"The header name is case insensitive."
informatik01

7
upvote anyway để tham khảo httpHeaders. Apache HTTP là một thứ tốt khác:org.apache.http.HttpHeaders
Barett

16

Các URL được thông qua trong yêu cầu : request.getRequestURL().

Nếu bạn có nghĩa là các trang web khác đang liên kết với bạn? Bạn muốn chụp HTTP Referrer, bạn có thể thực hiện bằng cách gọi:

request.getHeader("referer");

6

Như tất cả đã đề cập đến nó là

request.getHeader("referer");

Tôi muốn thêm một số chi tiết về khía cạnh bảo mật của tiêu đề người giới thiệu trái ngược với câu trả lời được chấp nhận. Trong các bảng cheat Dự án bảo mật ứng dụng web mở ( OWASP ), bên dưới Bảng gian lận ngăn chặn yêu cầu giả mạo trang web (CSRF), nó đề cập đến tầm quan trọng của tiêu đề người giới thiệu .

Quan trọng hơn đối với kiểm tra Nguồn gốc tương tự được đề xuất này, một số tiêu đề yêu cầu HTTP không thể được đặt bởi JavaScript vì chúng nằm trong danh sách tiêu đề 'bị cấm'. Chỉ bản thân các trình duyệt mới có thể đặt giá trị cho các tiêu đề này, khiến chúng trở nên đáng tin cậy hơn vì thậm chí không thể sử dụng lỗ hổng XSS để sửa đổi chúng.

Kiểm tra Nguồn gốc được đề xuất ở đây phụ thuộc vào ba trong số các tiêu đề được bảo vệ này: Xuất xứ, Người giới thiệu và Máy chủ lưu trữ, làm cho nó trở thành một hệ thống phòng thủ CSRF khá mạnh.

Bạn có thể tham khảo danh sách tiêu đề Cấm ở đây . Tác nhân người dùng (tức là: trình duyệt) có toàn quyền kiểm soát các tiêu đề này không phải người dùng.

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.