ruby-on-rails - ruby 应用程序中的安全性 : Role defined can be misused via url edit and changes.

标签 ruby-on-rails ruby-on-rails-3

在此应用程序中有四个角色,

角色可以通过编辑 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/

相关文章:

ruby-on-rails-3 - 在Rails 3中使用多态资源进行路由

ruby-on-rails - Ruby on Rails : How can I revert a migration with rake db:migrate?

php - 视频缩略图生成imagemagick?

ruby - Rails 命令在 ANSICON 安装后不起作用

ruby-on-rails - Rails 可以充当在 mysite 上托管域的反向代理吗?

ruby-on-rails - 选择从最后一次插入数据库的日期开始的过去 12 个月的行

ruby-on-rails - 编写 CanCan 权限规范

ruby-on-rails - Rails : Missing host to link to! 请提供 :host 参数或设置 default_url_options[:host]

ruby-on-rails - 如何通过简单的 HTTP 身份验证来保护环境?

ruby-on-rails - 如何在 Ruby on Rails 3 中一次恢复所有迁移?