OWASP 十大攻击与 Spring Security
Posted
技术标签:
【中文标题】OWASP 十大攻击与 Spring Security【英文标题】:OWASP top ten attacks and Spring Security 【发布时间】:2014-08-07 02:00:21 【问题描述】:我正在评估我的 Web 应用程序的安全性。当我在我的 Web 应用程序中使用 Spring 时,我想利用 Spring Security 框架。我搜索了有关网络安全的更多信息,发现了 OWASP 社区,它是前 10 名攻击列表。所以我的问题是;配置 Spring Security 来保护我的应用程序就足够了吗? Spring Security Framework 可以处理 OWASP 前 10 名(2013 年)中的哪些安全威胁?
【问题讨论】:
Spring Security 仅处理保护 URL 并为您提供登录框架,如果底层身份验证机制仍然薄弱,您仍然会有潜在的安全漏洞。 Spring Security 确实提供了一种在 URL 上强制 SSL 的机制,但是您仍然需要 SSL 证书。所以简而言之,Spring Security 不足以满足 OWASP 前 10 名。 【参考方案1】:你可以试试HDIV,它支持多种框架。
【讨论】:
【参考方案2】:构建安全的应用程序是一项具有挑战性的任务,没有“灵丹妙药”产品可以让应用程序自动为您提供安全保护。因此 Spring Security 的简单使用当然并不意味着您的应用程序是安全的! Spring Security 是一个很棒的工具,它可以帮助构建安全应用程序的许多方面,但就像任何工具一样,您需要知道如何正确使用它。
Spring Security 至少可以帮助您解决以下 OWASP TOP10 问题:
A2-Broken 身份验证和会话管理 - 通过提供高效、安全的身份验证和会话管理机制 A4-不安全的直接对象引用 - 通过在应用程序内提供授权机制 A6 敏感数据暴露 - Spring Security 的加密模块提供了必要的加密功能 A7-缺少功能级别访问控制 - 通过在 UI 和服务器端提供授权方式 A8-Cross-Site Request Forgery (CSRF) - 通过支持生成和验证令牌以减轻 CSRF 攻击【讨论】:
【参考方案3】:我建议使用分层安全架构。我的意思是,可以手动创建一个安全的应用程序,但实现起来非常困难。一些安全功能,例如 因为身份验证和基本访问控制(url 级别或 GUI 组件级别)相对容易实现,但实例级别的安全性(特别是使用遗留数据库)、Sql Injection 和 XSS 等要求更难实现。
我建议使用 Spring Security 并实现尽可能多的自定义验证。除此之外,我建议使用HDIV 以添加一个额外的安全层,可以 有助于避免利用自定义验证未涵盖的风险。具体来说,HDIV 提供的功能有:
A1- 注入:关于 HTTP 参数的值和 URL,HDIV 将此漏洞的风险降低到仅来自表单中文本字段的数据,应用完整性验证(确保收到对于来自客户端的其余数据,值与在服务器端生成的值相同)。对于表单中包含的文本字段,HDIV 提供通用验证(白名单和黑名单)以避免注入攻击。
A2-Broken 身份验证和会话管理:HDIV 不提供以下功能 这个网络风险。
A3-XSS:与 A1 相同,但在这种情况下避免 XSS 风险。
A4 不安全的直接对象引用:HDIV 控制所有数据 在服务器端生成,确保数据的完整性和 避免这个漏洞。
A5-Security 错误配置:HDIV 不包括特定功能,但不允许访问以前不是由服务器发送的资源,避免利用意外行为或访问私有资源。
A6 敏感数据暴露:HDIV 为 隐藏 HTTP 参数的值。
A7-缺少功能级别访问控制:感谢实施的完整性验证 通过 HDIV,避免利用此漏洞并限制用户执行法律行动并维护由提供的原始合同(GUI 或 API) 申请。
A8-Cross-Site Request Forgery (CSRF):HDIV 向 避免这个漏洞
A9 - 使用具有已知漏洞的组件:HDIV 不包括 特定的功能,但由于交互 在许多情况下应用于用户的限制是不可能的 利用漏洞。
A10-未验证的重定向和转发:此漏洞是 主要与不可编辑数据或数据的操作有关 之前在服务器端生成。 HDIV 控制所有数据 由服务器发送,不允许重定向到恶意 网站。
除了这些保护 OWASP 十大网络风险的功能之外,HDIV 还会生成与恶意活动或针对您网站的攻击相关的日志,包括有关攻击的所有信息以及经过身份验证的网站中的用户名。
问候,
罗伯托·贝拉斯科(HDIV 团队)
【讨论】:
以上是关于OWASP 十大攻击与 Spring Security的主要内容,如果未能解决你的问题,请参考以下文章
session.getAttribute() 的键为空,在 spring 框架 3.2.4 应用程序上使用 OWASP_CSRFTOKEN