【发布时间】:2011-02-08 14:10:26
【问题描述】:
我需要在 Java Servlet 中记录链接到我的网站的 URL。
【问题讨论】:
-
我是否理解正确,如果我在 google 中找到了您的网站并打开了链接,那么您登录了“google.com”?
我需要在 Java Servlet 中记录链接到我的网站的 URL。
【问题讨论】:
在HTTP referer header 中提供。您可以按如下方式在 servlet 中获取它:
String referrer = request.getHeader("referer"); // Yes, with the legendary misspelling.
但是,您需要意识到这是一个客户端控制的值,因此可能会被完全不同的东西所欺骗,甚至被删除。因此,无论它返回什么值,您都不应该将它用于后端的任何关键业务流程,而只能用于表示控制(例如隐藏/显示/更改某些纯布局部分)和/或统计信息。
有兴趣的可以在Wikipedia找到有关拼写错误的背景。
【讨论】:
null。
URL 在请求中传递:request.getRequestURL()。
如果您指的是链接到您的其他网站?您想捕获 HTTP Referrer,您可以通过调用来完成:
request.getHeader("referer");
【讨论】:
其实是:
request.getHeader("Referer"),
甚至更好,而且可以 100% 确定,
request.getHeader(HttpHeaders.REFERER),
其中 HttpHeaders 是 com.google.common.net.HttpHeaders
【讨论】:
getHeader(String name) 的 Java EE API 文档(引用):"The header name is case insensitive."
org.apache.http.HttpHeaders
正如大家所说的那样
request.getHeader("referer");
我想添加更多关于 referer 标头的安全方面的详细信息,与接受的答案相比。在 Open Web Application Security Project(OWASP) 备忘单中,Cross-Site Request Forgery (CSRF) Prevention Cheat Sheet 下提到了 referer 标头的重要性。
更重要的是,对于推荐的同源检查,JavaScript 无法设置许多 HTTP 请求标头,因为它们位于“禁止”标头列表中。只有浏览器自己才能为这些标头设置值,使它们更值得信赖,因为即使是 XSS 漏洞也不能用来修改它们。
此处推荐的 Source Origin 检查依赖于其中三个 受保护的标头:Origin、Referer 和 Host,使其非常漂亮 强大的 CSRF 防御全靠自己。
您可以参考Forbidden header list here。用户代理(即:浏览器)可以完全控制这些标头,而不是用户。
【讨论】: