【问题标题】:Security issue with JBoss on the front-end - OWASP security by obscurity前端 JBoss 的安全问题 - OWASP 安全性由默默无闻
【发布时间】:2011-05-17 22:19:33
【问题描述】:
我计划在公共 Web 上的 Amazon 上的 JBoss 6 上部署一个 EAR 应用程序。我将需要多个实例,但我不需要集群,ELB 可以在我的情况下完成它的工作。在应用程序的开发过程中已经考虑了 OWASP 安全指南。但是,我对 OWASP 的一个原则有疑问:默默无闻的安全性。
如何隐藏我正在使用 JBoss 的事实?我有自定义错误页面,ELB 只允许访问我的应用程序的上下文路径,但是,如果 JBoss 显示任何特定于 JBoss 的标头,我会担心。在每个实例中使用 mod_jk 或 mod_proxy_ajp 将 Apache 放在 JBoss 前面是否更安全,只是为了转发请求(如果不需要,我想避免这种情况)?
问候
【问题讨论】:
标签:
java
security
amazon-ec2
jboss
owasp
【解决方案1】:
默默无闻的安全原则并不意味着您应该尝试隐藏事物。其实,意思正好相反。请不要依赖隐藏敏感信息,因为它并不能真正减慢攻击者的速度,而且会造成虚假的安全感。
典型 JBoss 安装的巨大攻击面意味着攻击者很可能会弄清楚您正在运行什么。多年来,有许多“产品”声称使用隐藏标头等技术隐藏您正在使用的技术的身份。然而,攻击者通常需要做的就是删除 URL 上的一些参数以获得完整的堆栈跟踪,该堆栈跟踪提供了足够的详细信息来确定产品、库、版本等......
您可能会使用这种技术甩掉一些较弱的自动扫描仪,但不会甩掉真正针对您的任何人。原则很好,但它们对解释非常开放,而且经常相互矛盾。最好专注于根据 OWASP 应用程序安全验证标准 (ASVS) 验证您的应用程序。
【解决方案3】:
如何隐藏我正在使用 JBoss 的事实?
假设 JBoss 发送类似 Server: JBoss v1.2.3.4 的响应标头,您可以编写一个 Filter 映射到所有请求,并使用您选择的任意文本覆盖此值,例如:
public class StripHeaderFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
// process the rest of the chain first
filter.doFilter(request, response);
if (response instanceof HttpServletResponse) {
((HttpServletResponse) response).setHeader("Server", "It's a secret");
}
}