【发布时间】:2011-12-29 23:02:36
【问题描述】:
保护使用多种不同表单和 mongodb 作为数据库的 Sinatra 应用程序的最佳实践是什么?
【问题讨论】:
标签: ruby mongodb security sinatra database
保护使用多种不同表单和 mongodb 作为数据库的 Sinatra 应用程序的最佳实践是什么?
【问题讨论】:
标签: ruby mongodb security sinatra database
如果您有表单,则绝对应该使用真实性令牌以避免跨站点请求伪造。查看 rack_csrf gem 的 Sinatra。
如果您启用了会话,由于 Sinatra 实现了基于 cookie 的会话,您应该检查 encrypted_cookie gem 作为使用 256 位 AES 算法加密 Sinatra 会话的方法。
最后但并非最不重要的是始终使用 HTTPS
阅读this blog post 以获得全面的解释。
【讨论】:
不确定您在寻找什么。以下是一些想法。
如果您想验证系统的用户,我建议使用在机架层运行的身份验证,例如 Warden。这不仅可能比自定义身份验证解决方案更强大,而且它作为中间件运行,因此它大部分是透明的,并且可以在您决定向 Rack 堆栈添加额外的中间件、自定义 Rack 应用程序或 Rails 时在 Sinatra 之外使用。
mongodb 的运行方式(命令与数据分离)意味着不太可能发生注入,因此对用户输入进行一些最小的完整性检查应该会使数据库受损的风险非常低。与任何数据库一样,在没有适当的边界检查和转义的情况下,永远不要将用户的任何数据直接放入数据库中。
确保用户不能输入其他用户可以看到的 HTML/JS/CSS,否则您的网站很可能容易受到 XSS 攻击。
尽可能明确定义允许用户选择的所有可能输入,然后确保您从用户那里收到的输入与您定义的可能值之一完全匹配。如果不是,要么拒绝输入,要么选择一个合理的默认值。
良好的单元测试和广泛的测试覆盖率通常有助于减少意外行为,这些意外行为有时可用于帮助防止安全问题。试试看。当然不会受伤。
另一个对安全性有利的良好做法是不要重新发明轮子。使用社区其他成员所依赖的经过验证的、有效的解决方案,这样您就可以从他人的见解中受益,并在其他人发现并修复您使用的库中的安全漏洞时获得回报。
您可能需要解决许多其他系统、数据库和应用程序级别的问题,以确保您的应用程序安全。如果不深入了解您的完整系统架构,您的问题的范围有点过于宽泛,无法回答。
【讨论】: