Ruby on rails Rails-防止Firebug/Developer工具黑客攻击
如果我打开Chrome Developer Tools并插入一个destroy链接,当它是一个RESTful应用程序时很容易做到,并且你知道路径,那么我可以在没有授权的情况下轻松地从数据库中删除内容。解决这个问题的最好办法是什么?是否将控制器操作的内容包装在CanCanCan风格的授权检查中 谢谢 认证 例如,gemdesigne提供了在控制器中检查身份验证的功能,或者您可以使用自己的解决方案进行检查。它可以帮助您避免来自未登录用户的请求 批准 或-为允许用户的操作设置规则的良好解决方案。您可以使用此资源根据规则和操作控制对不同资源的访问 坎坎坎的例子Ruby on rails Rails-防止Firebug/Developer工具黑客攻击,ruby-on-rails,Ruby On Rails,如果我打开Chrome Developer Tools并插入一个destroy链接,当它是一个RESTful应用程序时很容易做到,并且你知道路径,那么我可以在没有授权的情况下轻松地从数据库中删除内容。解决这个问题的最好办法是什么?是否将控制器操作的内容包装在CanCanCan风格的授权检查中 谢谢 认证 例如,gemdesigne提供了在控制器中检查身份验证的功能,或者您可以使用自己的解决方案进行检查。它可以帮助您避免来自未登录用户的请求 批准 或-为允许用户的操作设置规则的良好解决方案。您可以
def delete
@post = Post.find_by(id: params[:id])
#authorize user to have an ability delete this post
#this will raise a CanCan::AccessDenied exception if not allowed
authorize! :destroy, @post
... your destroy logic
end
阅读更多关于在控制器中授权的信息,它实际上非常简单。例如,在您的posts控制器中。在执行以下操作之前创建:
class PostsController < ApplicationController
before_action :logged_in_user, only: [:create, :edit, :update, :destroy]
before_action :correct_user, only: [:edit, :update, :destroy]
def correct_user
@post = Post.find_by(id: params[:id])
unless current_user?(@post.user)
redirect_to user_path(current_user)
end
end
def logged_in_user
unless logged_in?
flash[:danger] = "Please log in"
redirect_to login_url
end
end
end
如你所见。当您尝试删除帖子时,before_操作将启动并检查用户是否已登录。然后检查当前用户是否拥有帖子。只有当这两个条件都为真时,才会允许用户删除帖子,否则会重定向用户。以同样的方式处理其他需要授权的操作,如管理面板、销毁用户、更新帖子等
至于授权本身,您可以使用bcrypt自己实现,也可以使用为类似设计而设计的gem:
所有的安装说明都可以在他们的github页面上找到。从服务器上拔出网络电缆。感谢您的回答,idej,但实际上我正在寻找更多关于实际实现的答案。您提到使用授权gem,但我实际应该使用什么代码?如果可以,我是否应该将销毁/更新操作代码放入CanCanCan中管理方法?或者有更好的方法吗?@DannySantos我在回答中添加了有用的链接和示例这就是我想要的,谢谢idej!我进一步挖掘了文档,找到了load_和authorize_resource方法,它将您的解决方案应用于每个操作。@DannySantos是的,如果您需要的话