【问题标题】:playframework owasp top 10playframework owasp 前 10 名
【发布时间】:2023-06-06 23:02:02
【问题描述】:

我正在考虑将Play 用于大型项目,那么,有没有人为 OWASP Top 10 提供实战测试的 Play 框架?你知道 Play 框架有什么安全问题吗?

【问题讨论】:

    标签: java security scala playframework owasp


    【解决方案1】:

    关于 OWASP 前 10 名和 Play(一些信息 here):

    • A1:注入

      默认使用 JPA 并转义字符串

    • A2:跨站脚本 (XSS)

      从 1.0.1 版本开始,Play 的模板引擎自动转义字符串

    • A3:身份验证和会话管理损坏

      Play 是无状态的,不涉及会话。 Cookies 受密码保护。通过散列将数据安全地存储在数据库(密码)上取决于用户,而不是框架

    • A4:不安全的直接对象引用

      这同样取决于开发人员验证对允许资源的访问,而不是框架

    • A5:跨站请求伪造 (CSRF)

      POST 请求允许使用真实性令牌来防止这种情况。当然这取决于开发者正确使用 GET/POST

    • A6:安全配置错误

      默认的错误报告过程在生产环境中似乎是安全的(没有堆栈跟踪泄漏)。唯一需要关注的是路由中的“catch all”条目,但这应该在生产模式下注释掉

    • A7:不安全的加密存储

      开发者负责对数据库中的敏感信息进行加密

    • A8:限制 URL 访问失败

      开发者必须实施安全限制(通过@Before,就像在教程中一样)以禁止访问被禁止的页面。

    • A9:传输层保护不足

      Play 支持 SSL

    • A10:未经验证的重定向和转发

      播放重定向是通过 302,而不是硬编码字符串,应该可以防止这种情况发生。

    TL;DR:在框架可以完成所有工作的部分,Play 可以完成。在开发人员需要完成所有工作的部分中,开发人员需要完成所有工作。每个需要 50% 的部分,Play 提供其 50%。

    让我们这样说吧:没有理由认为 Play 的安全性低于任何其他 Java 框架。在许多情况下,您可以认为它更安全。 Play 是一个易于开发、无状态的 REST 框架,因此您很少有机会搞砸它。

    【讨论】:

    • 关于 A1:JPA 仅用于 Java。 Anorm 是否也在使用PreparedStatement 来防止 SQL 注入?
    • 我在无状态框架方面没有任何经验,因此问题是:Play!处理通常用会话完成的事情?
    • 好的,我想答案是:zef.me/883/the-share-nothing-architecture
    • @Rekin 是的,那和 memcached 以及您在 cookie 中存储最少的用户信息以识别他们是否已登录以及他们是谁。
    • @Jonas PreparedStatement 也可以。几乎所有没有将输入连接到 SQL 字符串的东西 :) 我只是假设 JPA 是默认值。
    【解决方案2】:

    关于A3,你需要小心。 Play 有两种类型的会话变量。一个是session()经过数字签名,另一个是flash()没有签名。此外,两者都存储在 cookie 客户端中,如果您决定在其中存储敏感数据,可能会引发隐私问题。

    同样对于 A7(加密),请注意 Play 提供了一个方便的 Crypto 库,但它的加密使用 ECB 模式,这又会打开一个 whole new group of potential issues

    【讨论】: