保护Sinatra应用程序的最佳实践是什么?

时间:2011-11-15 22:42:34

标签: ruby mongodb security sinatra database

使用许多不同形式和mongodb作为数据库来保护Sinatra应用程序的最佳做法是什么?

2 个答案:

答案 0 :(得分:12)

不确定您在寻找什么。这里有一些想法。

如果您想验证系统用户,我建议使用在Rack层运行的身份验证,例如Warden。这不仅比自定义身份验证解决方案更强大,它作为中间件运行,因此它大部分是透明的,如果您决定在Rack堆栈中添加额外的中间件,自定义Rack应用程序或Rails,则可以在Sinatra之外使用。 / p>

mongodb运行的方式,命令与数据分离,意味着注入不太可能,因此对用户输入的一些最小的健全性检查应该使数据库妥协的风险相当低。与任何数据库一样,如果没有适当的边界检查和转义,从不直接将任何数据从用户放入数据库中的良好做法。

确保用户无法输入其他用户可以看到的HTML / JS / CSS,否则您的网站可能容易受到XSS攻击。

如果可能,请清楚定义允许用户选择的所有可能输入,然后确保您从用户收到的输入完全匹配您定义的可能值之一。如果不是拒绝输入或选择一个合理的默认值。

良好的单元测试和广泛的测试覆盖率通常可以帮助减少有时可用于帮助防止安全问题的意外行为。试试吧。当然不会受伤。

另一个可以在外围有益于安全的良好做法是不重新发明轮子。与社区其他成员依赖的强化,经过验证的功能解决方案一起使用,这样您就可以从其他人的见解中受益,并在其他人发现并修复您使用的库中的安全漏洞时获得奖励。

您可能需要解决许多其他系统,数据库和应用程序级别问题,以确保您的应用程序是安全的。如果没有对整个系统架构的深入了解,您的问题范围有点过于宽泛,无法回答。

答案 1 :(得分:1)

表单

如果您有表单,则应该使用真实性令牌以避免跨站点请求伪造。查看rack_csrf gem for Sinatra。

Cookies / Sessions

如果您已启用会话,因为Sinatra实现基于cookie的会话,您应该检查encrypted_cookie gem作为使用256位AES算法加密Sinatra会话的方法。

最后但并非最不重要的是始终使用HTTPS

阅读this blog post以获得全面的解释。