【发布时间】:2016-09-04 15:49:02
【问题描述】:
我写了这个简单的方法来在我的一个简单的服务器代理中处理 CORS。
private void handleCors(HttpServletRequest req, HttpServletResponse resp) {
final String origin = req.getHeader("Origin");
if (Strings.isNullOrEmpty(origin)) {
return;
}
if (!origin.startsWith("http://localhost:")) {
return;
}
resp.setHeader("Access-Control-Allow-Origin", origin);
resp.setHeader("Access-Control-Allow-Credentials", "true");
resp.setHeader("Access-Control-Expose-Headers", "Authorization");
resp.setHeader("Access-Control-Allow-Headers", "Authorization, Content-Type");
}
真正的应用程序不需要它,它只在手动测试时使用(ionic serve)。我想,这是安全的,因为除了源是 localhost 之外什么都不做,但比抱歉更安全。
此外,findbugs 抱怨response splitting vulnerability。我应该简单地使用URLEncoder.html#encode 还是还有更多?
一般会在包含空格的情况下删除空格或不添加 CORS 标头吗?
【问题讨论】:
-
在浏览器之外,您可以发送各种标头,包括以
http://localhost:开头并包含拆分响应的尝试。我不知道为什么有人会关心,因为那时你无论如何都可以做任何事情。对于来自合法浏览器的常规请求,这应该是安全的,因为该源头是浏览器生成的。如果它包含恶意内容,我猜攻击者已经控制了浏览器,所有希望都落空了。