HDIV和ESAPI之间的区别

Kum*_*mar 4 java spring-mvc esapi hdiv

我计划使用Spring MVC开发一个Web应用程序,并试图弄清楚哪个是最好的库来用于超过10个OWASP问题.我来看两个HDIV和ESAPI,任何人都可以帮我理解它们之间的区别.

谢谢您的帮助.

rbe*_*sko 17

首先,我认为两种Web应用程序安全框架的方法和范围是不同的.在某些方面,它们也可以是可以一起使用的互补解决方案.

关于该方法,HDIV尝试通过与Web框架的集成来自动化安全性最佳实践.为了实现这种方法,HDIV已经集成在一些最常用的Java/JVM Web框架中,例如:Spring MVC,Grails,JSF,Struts 1,Struts 2.重要的是要注意,如果您的应用程序使用Web框架标签为了呈现链接和表单,HDIV不需要在源代码中进行任何更改,只需要声明性配置(基于XML或Java配置的配置).

另一方面,ESAPI提供了许多开发人员必须在其源代码中使用的实用程序(API).换句话说,程序员必须在其源代码中手动包含所有这些实用程序.ESAPI不依赖于Web框架,可以在任何Web应用程序中使用,因为它没有与Web框架集成.

关于范围,HDIV不包括ESAPI提供的一些功能,也仅限于支持的Web框架.值得注意的是,Web框架(Struts,Spring MVC,...)或Spring Security等解决方案已经涵盖了其中一些功能:

  • 身份验证和会话管理:由应用程序服务器和Spring Security提供
  • 输出编码:由Web框架标签(在这种情况下为Spring MVC)覆盖以避免XSS(转义函数).不包括其他类型的编码,如编码,以避免SQL注入.
  • 加密功能:由Spring Security(http://docs.spring.io/spring-security/site/docs/3.1.7.RELEASE/reference/crypto.html)或ESAPI 涵盖.我没有比较两个框架,但似乎它们是相似的.
  • 特定于参数的输入验证:由所有Web框架(Struts,Spring MVC等)覆盖

HDIV旨在补充Java EE,Spring Security和Web框架提供的安全功能.

为了更深入地了解HDIV和ESAPI之间的差异,我将尝试比较这些功能,以涵盖OWASP十大网络风险与两个框架.我在github(https://github.com/ESAPI)中包含了ESAPI 2.x和ESAPI 3.x中包含的功能.

A1-注射:

  • HDIV:关于HTTP参数的值,URL和cookie HDIV将此漏洞的风险仅降低到来自表单内文本字段的数据,对来自客户端的其余数据应用完整性验证(确保收到的值是与服务器端生成的相同).对于表单中包含的文本字段,HDIV提供通用验证(白名单和黑名单)以避免注入攻击.
  • ESAPI:每个参数的手动输入验证.此功能很有用,但几乎所有Web框架都已提供此功能.除此之外,SQL编码功能还可以在查询执行之前以编程方式对SQL进行编码.

A2-Broken认证和会话管理:

  • HDIV:不提供此网络风险的功能.我们建议使用Spring Security进行身份验证,并使用应用程序服务器功能(Servlet规范)进行会话管理.
  • ESAPI:提供必须由程序员以编程方式使用的实用程序.

A3-XSS:与A1相同,但在这种情况下避免XSS风险.

  • HDIV:关于HTTP参数的值和URL HDIV将此漏洞的风险仅降低到来自表单内文本字段的数据,对来自客户端的其余数据应用完整性验证(确保接收的值相同)作为在服务器端生成的).对于表单中包含的文本字段,HDIV提供通用验证(白名单和黑名单)以避免注入攻击注入攻击.HDIV不包含任何输出编码功能,并将此职责委托给Web框架标签,在本例中为Spring MVC.
  • ESAPI:包括每个参数的手动输入验证.此功能很有用,但几乎所有Web框架都已提供此功能.还提供输出编码的输出编码功能.编码器必须在源代码中使用此编码器.

A4-Insecure Direct Object References:

  • HDIV:控制在服务器端生成的所有数据(由框架标签处理),确保数据的完整性并消除这种风险.在支持的Web框架内不需要任何源代码更改.值得注意的是,HDIV支持不同的方法来管理重新收集的信息:密码(状态在响应中被加密),内存(状态存储在HttpSession中),哈希(状态的哈希存储在HttpSession中,以及网络响应中的内容).
  • ESAPI:有必要创建一个地图以编程方式包含每个参数并将其存储在会话中.
    (http://www.jtmelton.com/2010/05/10/the-owasp-top-ten-and-esapi-part-5-insecure-direct-object-reference/).此功能包含在ESAPI 2.x中,但我在ESAPI 3.x中找不到.

A5-安全配置错误:

  • HDIV:不包含特定功能,但不允许访问先前未由服务器发送的资源,从而避免利用意外行为或访问私有资源.
  • ESAPI:我没有找到任何功能,但我不是ESAPI的专家.

A6敏感数据暴露:

A7缺失功能级访问控制:

  • HDIV:由于HDIV实施的完整性验证,避免了利用此Web风险并限制仅使用服务器先前生成的URL,维护应用程序提供的原始合同.
  • ESAPI:提供API以编程方式实现它.据我所知,它类似于Spring Security提供的功能,源代码中的程序员必须使用这些功能来保证每个URL的安全性.

A8-跨站请求伪造(CSRF):

  • HDIV:由于HDIV与Web框架表单标签集成,因此添加了一些令牌来避免每个表单的漏洞.
  • ESAPI:提供用于生成令牌的API.程序员必须手动将此标记添加到每个Web表单.

A9-使用已知漏洞的组件:

  • HDIV:不包含具体功能,但由于HDIV在很多情况下对用户应用的交互限制无法利用已知漏洞.
  • ESAPI:我没有在文档中看到任何功能,但我不是ESAPI的专家.

A10-未经验证的重定向和转发:此漏洞主要与先前在服务器端生成的不可编辑数据或数据的操作有关,与A4非常相似.

  • HDIV:控制服务器发送的所有数据,不允许重定向到恶意网站.
  • ESAPI:ESAPI提供的解决方案与必须在源代码中使用的A4(AccessReferenceMap)提供的解决方案相同.

Roberto Velasco Sarasola(HDIV团队)


avg*_*tvs 5

首先,OWASP的ESAPI已不再是OWASP的旗舰产品:图书馆的主要开发工作停滞不前,2.1版本只是为了修复一个主要的CVE.看起来常规贡献进入HDIV库.HDIV还有大量资源,展示如何将其集成到通用Web框架中 - 他们的文档涵盖了Spring,Grails,当然它也是从Struts1和Struts2开始的.

HDIV提供了一个讨论其架构的powerpoint.虽然我真的不喜欢它,它说它消除了 XSS(它没有,也不可能),基本架构看起来非常好.

在搜索文档时,HDIV似乎唯一缺少的是一种规范化 - 入侵检测的方法.从理论上讲,因为它依赖于对不可编辑数据的哈希,所以你会收到警告,有人试图篡改你的参数.但是,使用esapi,它会检测多个编码攻击并相应地通知您 - 它会为您提供更好的信息.(参数名称,用户ID和尝试输入.)

此外,HDIV似乎没有ESAPI提供的几个功能:

  • 防止对数注入
  • 身份验证机制 - >虽然很少使用,但它确实具有比开箱即用的更好的Java安全性实现.它还具有用户的直观模型.
  • 经过良好验证的加密实现 - >如果您想要安全使用Java加密,则已针对ESAPI运行安全评估.
  • SQL注入防御,可以在(由于某种原因)您不能使用参数化查询或存储过程的实例中使用.
  • 特定于上下文的输出编码.虽然由于ESAPI目前收集灰尘的状态,如果你需要编码,我会用它代替..重要的是要注意正确的输出转发比任何输入过滤/验证好10倍.您可以跳过WAF并仍然具有出色的安全性.反向陈述是错误的.
  • 细粒度控制参数特定的输入验证.WAF方法只标记通用字段类型,并对规则类型应用一种规则适用的方法.ESAPI可让您通过使用获得所需的细粒度validation.properties.