我是一个相当新手的Rails开发人员,但因为Rails中的大多数东西都很容易,我总是担心在编写代码时我会添加一个新的安全漏洞。例如,就在一个小时前,我在几周前发现的代码中发现了一个,在UsersController的编辑方法中,我忘了检查您编辑的用户是否等于您登录的用户(即{{ 1}}而不是@user = User.find params[:id]
)。我这样写是因为我通常将它用于所有编辑方法(例如@user = current_user
)。这会显示另一个用户的电子邮件地址。
我应该注意Rails应用程序中常见的安全漏洞是什么?由于约定而容易被忽视的事情(如上例所示)?
答案 0 :(得分:2)
您所说明的常识性问题可能是最重要的安全问题。 Rails在创建一个更安全的框架方面已经走了很长的路,例如,SQL注入困扰了许多PHP应用程序(大多数情况下)被清理后的表单输入覆盖(现在是默认的)。关于Rails安全性的官方说法很好:http://guides.rubyonrails.org/security.html
答案 1 :(得分:0)
创建新控制器后,我要做的第一件事就是设置一个功能测试,确保用户只能做他们应该做的事情。在您的示例中,测试应断言用户只能编辑自己的帐户详细信息,而管理员也应该能够编辑其他帐户。
使用这种方法,您还可以验证在重构过程中不会破坏任何内容,从而防止您在项目后期意外重新打开安全漏洞。
您可能会发现以下内容:
http://guides.rubyonrails.org/testing.html#functional-tests-for-your-controllers