2013-05-17 65 views
2

本书Tomcat:权威指南(第二版),O'Reilly,Jason Brittain提供了一个Tomcat过滤器(和一个阀门)来过滤掉来自HTTP请求的不良用户输入以帮助避免恶意攻击。我已经使用了多年的筛选器,并且我发现它是运行在Tomcat上的Web应用程序的一个很好的安全工具。它曾经与旧版Tomcat一起工作,但随着更新版本的Tomcat的使用,它不再有效。更糟糕的是,如果没有默默地失败。你必须通过实验来了解它不起作用。BadInputFilter不再有效

看起来过滤器正在编辑请求参数的副本,但实际的请求参数在请求到达Web服务器时不会改变。我试过了阀门,但它也无法以相同的方式工作。您可以使用过滤器或阀来阻止参数中具有错误数据的HTTP请求,但不能再使用它来编辑参数。

有没有人有解决这个问题的办法?也就是说,是否存在一个BadInputFilter版本或替代版本,它将实际修改请求参数,然后将修改后的参数发送到Web服务器。

回答

2

我无法找到这个问题的一个很好的答案,所以我开发了自己的答案并将其发布在关于JavaWorld的详细文章中。请参阅BadInputFilter revisited以解答此问题。

+0

是否可以在答案中总结该文章的相关部分,以防止潜在的链接腐烂并防止用户点击以获取核心消息? –

+0

摘要: HttpServletRequest有一个名为getParameterMap()的方法,该方法返回一个将参数名称映射到值的不可变Map。为了“逃避”用户输入,您需要能够修改这些参数名称和/或值。您不能直接修改Map,但可以将整个HttpServletRequest包装在HttpServletRequestWrapper中,然后可以将它传递到目标资源以代替原始请求。 “包装”请求复制并转义原始参数名称和值,这些是目标资源有权访问的参数。 –