我正在考虑将Play用于大型项目,那么,有没有人为 OWASP Top 10 提供实战测试的 Play 框架?您知道 Play 框架中有哪些安全问题吗?
2 回答
在 OWASP Top 10 和 Play 上(一些信息在这里):
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 框架,因此您很少有机会搞砸它。
关于A3,你需要小心。Play 有两种类型的会话变量。一种session()
是数字签名的,另一种是未签名的。此外,它们都存储在 cookie客户端中,如果您决定在那里存储敏感数据,这可能会引发隐私问题。flash()
同样对于 A7(加密),请注意 Play 提供了一个方便的Crypto
库,但它的加密使用 ECB 模式,这再次引发了一系列全新的潜在问题。