【发布时间】:2018-01-22 12:55:24
【问题描述】:
我有一个带有单个入口点 URL 的 Java Web 应用程序,并且一个外部 Web 应用程序重定向到该 URL。我可以在服务器端使用 cookie 或其他方式检查请求是否来自特定域?
编辑: 我无法更改外部应用代码
【问题讨论】:
-
您能否更改外部服务器重定向到您的 Java Web 应用程序的方式?我的意思是代码,还是网址?
我有一个带有单个入口点 URL 的 Java Web 应用程序,并且一个外部 Web 应用程序重定向到该 URL。我可以在服务器端使用 cookie 或其他方式检查请求是否来自特定域?
编辑: 我无法更改外部应用代码
【问题讨论】:
我认为您想知道 HTTP Referer(“调用”您的页面的 URL):
String referrer = request.getHeader("referer");
编辑
我忘记了,正如 gustafc 所说,HTTP 引荐来源网址是客户端控制的值,可以被完全不同的东西欺骗甚至被客户端删除,所以你不能确定你的 HTTP Referrer 不是假值
【讨论】:
您可以查看HTTP referer,但它不可靠:它很容易伪造,并且有些人出于隐私原因选择禁用推荐人。因此,虽然它可能在大多数情况下都有效,但不要依赖它来解决安全或其他基本问题。
尝试这样做的真正原因是什么?
【讨论】:
是的。您可以通过请求对象中的getRemoteHost() 或getRemoteAddr() 方法获取请求的来源。
http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html#getRemoteHost()
【讨论】:
getRemoteHost() 返回最后一个代理,而不是重定向发起者
X-Forwarded-For。
如果您只需要验证请求是否来自特定 IP(或 IP 范围),您可以在防火墙上配置一条规则来支持这一点(假设代理在防火墙内。
【讨论】: