2013-02-20 85 views
1

我有一个Java Web应用程序,带有一个入口点URL,外部Web应用程序重定向到该URL。我可以在服务器端检查请求是否来自使用cookie等特定域的请求吗?我可以验证HTTP请求的域名吗?

编辑: 我不能改变外部应用程序代码

+0

你可以改变 – PbxMan 2013-02-20 13:06:50

回答

4

我想你想知道HTTP引用(URL中的 “称” 你的页面):

String referrer = request.getHeader("referer"); 

编辑

我忘了,因为gustafc表示,HTTP引用是一个客户端控制的值,并且可能被欺骗到完全不同或甚至被客户端删除的内容,因此您无法确定您的HTTP Referrer是否不是假值

2

是的。您可以在请求对象中获取来自getRemoteHost()getRemoteAddr()方法的请求的来源。

http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html#getRemoteHost()

+0

对我来说不是一个合适的解决方案,因为'getRemoteHost()'返回最后一个代理,而不是重定向发起者 – 2013-02-20 13:24:11

+0

某些代理通过原始客户端IP作为头文件,例如Apache mod_proxy使用'X-Forwarded-For' – johnstok 2013-02-20 14:00:56

3

您可以检查HTTP referer,但它是不可靠的:它很容易假的,有些人选择禁用隐私的原因参照网址。因此,虽然它可能在大多数情况下都有效,但不要将其用于安全性或其他重要问题。

什么是real尝试这样做的原因是什么?

+0

主要原因是安全性,事实上,请求中有一个加密的密钥,对于这一点已经足够了,但我有要求另外检查域名。 – 2013-02-20 13:14:14

+0

你可以尝试做一个DNS请求,并看到如果结果匹配HTTP引用。 – Dimitri 2013-02-20 13:15:57

+0

@DmitryTikhonov您是否试图验证用户是通过点击他人来自其他网站的方式来访问您的网站,还是试图验证用户的请求是否来自某个域(即基本检查用户的IP)?我只是假设前者,这是不可能的(而且我没用)。后者是非常可行的,正如其他海报所描述的那样。 – gustafc 2013-02-20 16:21:09

0

如果你只需要验证请求是从一个特定的IP(或IP范围),你可以在你的防火墙配置规则,以支持(假设代理是在防火墙内。