我有一个使用spring saml和Modsecurity的基于Java-Servlet的Web应用程序。
对于其中一个GET请求(URL - / saml / login),响应是以text / html(我可以在浏览器网络工具中读取html文件)以及Content-Length标头返回的HTML页面。这是Modsecurity被禁用的时候。
当我在应用程序中启用ModSecurity时,会返回相同的响应,其中包含Transfer-encoding:chunked。这次html响应由于分块而被编码。例如<html
显示为10<60h104t116m109l108
。我不确定浏览器是否应该解码这个,但这打破了我的应用程序的流程。因为响应以编码形式显示在浏览器上。
我已经尝试在ModSecurity中评论规则,以找出导致响应被分块但没有成功的原因。由于另一个开发人员实现了ModSecurity,此时我不确定如何通过更改ModSecurity来解决这个问题。
因此,我想尝试在Java代码或浏览器中解码响应。如果Html文件正常呈现,后续请求将开始工作。
编辑1:
web.xml中的ModsecurityFilter配置:
<filter>
<filter-name>ModSecurityFilter</filter-name>
<filter-class>org.modsecurity.ModSecurityFilter</filter-class>
<init-param>
<param-name>conf</param-name>
<param-value>/opt/ModSecurityFilter/modsecurity.conf</param-value>
</init-param>
<init-param>
<param-name>libxml2</param-name>
<param-value>/usr/lib/x86_64-linux-gnu/libxml2.so.2</param-value>
</init-param>
<init-param>
<param-name>libpcre</param-name>
<param-value>/lib/x86_64-linux-gnu/libpcre.so.3</param-value>
</init-param>
<init-param>
<param-name>libaprutil-1</param-name>
<param-value>/usr/lib/x86_64-linux-gnu/libaprutil-1.so.0</param-value>
</init-param>
<init-param>
<param-name>libapr-1</param-name>
<param-value>/usr/lib/x86_64-linux-gnu/libapr-1.so.0</param-value>
</init-param>
<init-param>
<param-name>libModSecurityJNI</param-name>
<param-value>/opt/ModSecurityFilter/java/.libs/libModSecurityJNI.so</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>ModSecurityFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
答案 0 :(得分:0)
您似乎正在发回ASCII码和文本。之前从未见过,也不知道为什么ModSecurity会这样做。 Transfer-Encoding:chunked是一个标准的HTTP响应,服务器和客户端都应该能够处理这个问题,它不应该改变发回的格式。
看起来您正在使用一些旧的和较旧的ModSecurity for Java,详见此处:https://www.trustwave.com/Resources/SpiderLabs-Blog/ModSecurity-for-Java---BETA-Testers-Needed/
我不知道存在这种情况,并且在4年多的时间内没有得到维护,所以不确定说实话是多么稳定。
您可以尝试在上一页上添加评论,或在ModSecurity用户邮件列表上寻求帮助:https://sourceforge.net/projects/mod-security/lists/mod-security-users
可能值得尝试的另一件事是通过更改modsecurity.conf文件中的这一行来关闭响应正文处理:
SecResponseBodyAccess On
到此:
SecResponseBodyAccess Off
然后重启Tomcat。这应该在没有ModSecurity处理它们的情况下传回响应。
响应主体通常用于信息泄露,因此,例如,详细的调试日志,应用程序内部工作的潜在详细信息不会发送回客户端。然而,虽然这很有用,但大多数像ModSecurity这样的WAF都是为了防止入站攻击。处理响应主体也会产生性能影响,因为请求通常很小,因此更容易处理,而响应可能非常大(完整的HTML页面)。因此,我不认为你通过关闭它会损失太多,甚至可能获得保护。