有一种已知的攻击类型,称为主机 header 攻击脚本。它基本上是更改“X-Forwarded-Host” header 以及您通过执行以下操作进行的所有调用:
String serverName = reqest.getServerName();
导致 serverName 恰好是 X-Forwarded-Host header 值。因此,所有基于 serverName
变量的操作都是不可信的。如果您将网址嵌入到您的网站中,例如:
<a href="http://<%=request.getServerName()+":"+request.getServerPort()%>">Some link</a>
您可能指的是另一个位置。
是否有另一种方法可以在存在恶意 X-Forwarded-Host header 的情况下正确检索服务器名称?
所有这些问题都可以通过仅提供相对网址而不是完整网址来克服。我现在面临的情况包括嵌入一些从 https 到 http 的完整 url,因此我不能使用相对 url。
有什么想法吗?
最佳答案
我认为您可以禁用转发功能。这可以在AbstractConnector中完成,有一个名为setForwarded的方法。
同时,如果您使用 dropwizard,这非常简单,只需编辑 yml 文件并更改 http 配置中的 useForwardedHeaders 字段即可。 (0.6.2 中)
关于java - jetty、servlet 3.0、spring主机头攻击预防,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24039173/