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

7
使用许多不同表单和mongodb作为数据库的Sinatra应用程序,有哪些最佳实践可用于确保安全性?
2个回答

12

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

如果您想验证系统用户,则建议使用在Rack层操作的身份验证,例如Warden。不仅比自定义身份验证解决方案更强大,而且作为中间件运行,因此大多数情况下是透明的,并且可以在Sinatra之外使用,如果您决定添加其他中间件、自定义Rack应用程序或Rails到您的Rack堆栈中。

mongodb的操作方式是将命令与数据分离,这意味着注入攻击的可能性很小,因此对用户输入进行一些最小的合理性检查就可以使数据库遭受威胁的风险非常低。与任何数据库一样,从用户处直接将任何数据放入数据库而没有正确的边界检查和转义是不好的做法。

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

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

良好的单元测试和广泛的测试覆盖可以帮助减少意外行为,有时还可以用来防止安全问题。试试吧。肯定不会伤害。

另一个良好的实践可以在边缘上提高安全性,那就是不要重复发明轮子。选择经过硬化、经过验证并且功能良好的解决方案,以便您可以从其他人的见解中受益,并在别人在您使用的库中发现并修复安全漏洞时获得回报。

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


1

表单

如果您使用表单,一定要使用真实性令牌以避免跨站点请求伪造。请查看rack_csrf gem 以用于 Sinatra。

Cookies / 会话

如果您启用了会话,由于 Sinatra 实现基于 cookie 的会话,因此应该检查 encrypted_cookie gem 以使用 256 位 AES 算法加密 Sinatra 的会话。

最后但同样重要的是始终使用 HTTPS

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


根据今天,2023年11月16日星期四的检查,"this blog post"链接已经失效。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接