在此应用程序中有四个角色,
角色可以通过编辑 URL ID 进入未经授权的页面,并对页面的可用选项执行操作,从而误导应用程序发生故障。
任何人对此都有想法。是关闭 session 的问题还是路由许可的问题 问题 ... 提前致谢
最佳答案
它与路由无关,您可以使用过滤器自行限制操作访问,即
class MyController < ApplicationController
before_filter :check_access
def secure_action_a
end
def secure_action_b
end
private
def check_access
case params[:action]
when 'secure_action_a':
redirect_to root_path, error: "Not Allowed" unless current_user.role == 'admin'
when 'secure_action_b':
redirect_to root_path, error: "Not Allowed" unless current_user.role == 'user'
end
end
end
并且在操作上,您应该验证用户是否有权访问资源,所以假设您有一个向用户显示事务的操作,并且如果您编写一个操作,那么他只能看到他的事务代码如下:
def transaction
@transaction = Transaction.find(params[:id])
end
那么你就会遇到一个大问题,因为任何人都可以开始编写像“http://mywebsite.com/transaction/23”这样的请求并查看交易,因为当前用户没有任何过滤器,所以你通常要确保用户拥有该资源
def transaction
@transaction = current_user.transactions.find(params[:id])
end
或者
def transaction
@transaction = Transaction.where(user_id: current_user.id, id: params[:id])
end
稍后您可以高级 gem ,例如 cancan控制对资源的访问
最后,请务必阅读 rails security guide
关于ruby-on-rails - ruby 应用程序中的安全性 : Role defined can be misused via url edit and changes.,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13722061/