class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new
if user.admin?
can :manage, :all
else
can :read, Todo
can :create, Todo
can :update, Todo, user_id: user.id
can :destroy, Todo, user_id: user.id
end
end
end
控制器中加載權限:
class Api::V1::TodosController < ApplicationController
load_and_authorize_resource
def index
render json: @todos
end
end
三. 數據驗證與凈化
驗證輸入數據
class Todo < ApplicationRecord
validates :title, presence: true
validates :completed, inclusion: { in: [true, false] }
end
rails generate devise_token_auth:install User auth
rails db:migrate
保護控制器路由:
class Api::V1::BaseController < ApplicationController
before_action :authenticate_user!
end
五. 防止 API 濫用和攻擊
1. 使用 Rack::Attack 節流
Rack::Attack.throttle('requests by ip', limit: 100, period: 1.minute) do |request|
request.ip
end
2. 配置 CORS 策略
gem 'rack-cors'
config.middleware.insert_before 0, Rack::Cors do
allow do
origins 'https://your-allowed-domain.com'
resource '*', headers: :any, methods: [:get, :post, :put, :patch, :delete]
end
end
六. 加密敏感數據
使用 bcrypt 加密密碼:
gem 'bcrypt'
模型中啟用安全密碼:
class User < ApplicationRecord
has_secure_password
end
驗證密碼:
user = User.find_by(email: params[:email])
if user&.authenticate(params[:password])
# 身份驗證成功
else
# 憑據無效
end
七. 總結
通過身份驗證、授權、數據驗證、濫用防護和加密措施,您可以顯著提升 API 安全性。Ruby on Rails 提供豐富工具和庫,幫助開發者構建強大而安全的 API。牢記安全最佳實踐,并定期更新應用程序,應對不斷變化的安全威脅。