有一种已知的攻击类型称为主机头攻击脚本。它基本上是在更改“ 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/

10-10 08:45