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