java - jetty、servlet 3.0、spring主机头攻击预防

标签 java spring jetty servlet-3.0 dropwizard

有一种已知的攻击类型,称为主机 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/

相关文章:

java - Spring HTTP 调用器的使用

java.lang.ClassNotFoundException : com. infomentum.Detect.class

java - 有什么方法可以减少 Selenium WebDriver 中的元素定位时间吗?

java - Android AssetServer 扩展 NanoHTTPD

java - 高负载时的 HttpURLConnection 给出异常 NoRouteToHostException 无法分配请求的地址

java - 如何在 Spring boot 中手动配置 SSL 握手

ssl - 如何使用 CA 签名证书在 Jetty 中正确配置 SSL?

jetty - 我的 Jetty 服务器会在很长时间后死机,为什么?

servlets - 带有 Jetty 的 SSL 内置到 EC2 上的 Jar 中

java.lang.VerifyError : Expecting a stackmap frame at branch target JDK 1. 7