Ruby on rails 特定于Rails的常见安全漏洞?

Ruby on rails 特定于Rails的常见安全漏洞?,ruby-on-rails,security,Ruby On Rails,Security,我是一个相当新手的Rails开发人员,但由于Rails中的大多数东西都非常简单,我总是担心在编写代码时会添加新的安全漏洞。例如,就在一小时前,我在几周前编写的代码中发现了一个,在UsersController的编辑方法中,我忘记检查您正在编辑的用户是否与您登录的用户相同(即,@user=user.find params[:id],而不是@user=current\u user)。我这样写是因为我通常将其用于所有编辑方法(例如,@post=post.find params[:id])。这将显示其他

我是一个相当新手的Rails开发人员,但由于Rails中的大多数东西都非常简单,我总是担心在编写代码时会添加新的安全漏洞。例如,就在一小时前,我在几周前编写的代码中发现了一个,在UsersController的编辑方法中,我忘记检查您正在编辑的用户是否与您登录的用户相同(即,
@user=user.find params[:id]
,而不是
@user=current\u user
)。我这样写是因为我通常将其用于所有编辑方法(例如,
@post=post.find params[:id]
)。这将显示其他用户的电子邮件地址


我应该注意Rails应用程序中常见的安全漏洞是什么?由于约定而容易被忽略的事情(如上面的示例)?

如您所示的常识问题可能是最重要的安全问题。Rails在创建一个更安全的框架方面已经取得了长足的进步,例如,困扰许多PHP应用程序的SQL注入(在大多数情况下)被现在默认的经过净化的表单输入所覆盖。Rails安全的官方词汇是一个很好的读物:

创建新控制器后,我要做的第一件事是设置一个功能测试,确保用户只能做他们应该做的事情。在您的示例中,测试应该断言用户只允许编辑自己的帐户详细信息,而管理员也应该能够编辑其他帐户

使用这种方法,您还可以验证在重构过程中没有破坏任何东西,从而防止以后在项目中意外地重新打开安全漏洞

您可能会发现以下内容很有用:


当普通PHP框架做同样的事情时,毫无意义地攻击另一种语言。PHP是一种语言,Rails是一个框架。@Dan Grossman我同意,我可以使用ADODB和PDO并停止所有sql注入。我可以使用模板系统停止所有XS。或者只是在任何平台上安装WAF,使发现和利用这些问题变得非常困难。(@seeingidog+1对于ruby安全文档,这是一本很好的读物。)