【发布时间】:2015-09-15 16:46:38
【问题描述】:
我希望这个问题是不言自明的。我正在使用 CAS 服务器设置 Spring Security 环境。因为完全相同的应用程序部署在同一台服务器上,但服务器可以通过不同的主机名(.de 域、.com 域,可能不止这些)访问,我们希望在测试系统和本地系统上部署相同的应用程序同样,我构建了一个动态服务,其中服务 URL 是从请求 URL 派生的。
public static String makeDynamicUrlFromRequest(ServiceProperties serviceProperties, HttpServletRequest request) {
String serviceUrl = "https://backup-url.de/login";
URI uri = null;
try {
uri = new URI(request.getRequestURL().toString());
} catch (URISyntaxException e) {
logger.error("Someone tried accessing a disallowed service!", e);
}
if(uri != null){
serviceUrl = uri.getScheme() + "://" + uri.getHost() + "/login";
}
return serviceUrl;
}
这可以欺骗吗?如果是,额外的正则表达式检查是否为我提供了必要的安全措施?
【问题讨论】:
-
欺骗是什么意思?你想防御什么样的攻击?
-
我还不完全确定。如果有人能够修改 requestURL,CAS-Server 将重定向回他们自己的服务器。我不确定他们能用这个做什么,但我在 spring-security 的 JIRA 中发现了一个问题,解释说他们出于安全原因将 ServiceProperties.getService() 作为最终方法。
-
如果他们修改了请求 url,你将如何获得请求?
-
可能是他们请求了正确的 URL 并以某种方式修改了我收到的值,这就是为什么我问它是否可欺骗。我想这回答了我的问题——事实上,它不是。我认为它可能像一个可修改的标题或其他东西。我不确定,因此提出了问题。
标签: java jakarta-ee servlets httprequest spring-security-cas