有一种称为主机头攻击脚本的已知攻击类型。它基本上改变了“ X-Forwarded-Host ”标题以及你做的所有通话:
String serverName = reqest.getServerName();
导致使serverName正好是X-Forwarded-Host标头值。因此,基于serverName
变量的所有操作都是不可信的。如果您正在将网址嵌入到您的网站中,例如:
<a href="http://<%=request.getServerName()+":"+request.getServerPort()%>">Some link</a>
您可能会引用其他位置。
是否存在另一种方法来正确检索服务器名称,尽管存在恶意的X-Forwarded-Host标头?
所有这些都是通过仅提供相对网址而不是完整网址来克服的。我现在面临的案例包括将一些完整的URL从https嵌入到http中,因此我无法使用相对URL。
有什么想法吗?
答案 0 :(得分:0)
我认为你可以禁用转发功能。这可以在 AbstractConnector 中完成,有一个名为 setForwarded 的方法。
同时,如果您使用dropwizard,只需编辑您的yml文件并更改http config中的 useForwardedHeaders 字段,这非常简单。 (在0.6.2中)