これは何?
【初心者向け】RailsでAPI開発 Part.3
の続きです。
今回はセキュリティ編になります。
概要
▼ 仕組み
- 異なるドメイン間のリクエストを許可する(HTTPアクセス制御)
- CORS(Cross-Origin Resource Sharing)
- 別の言い方をすると許可されていないウェブサイトからのアクセスをブロックします。
- 過剰なリクエスト攻撃(DOS攻撃)を制御する
▼ 使用するもの
- rack-cors
- rack-attack
手順
① rack-corsの設定
Gemfile
gem 'rack-cors'
terminal
bundle install
config/initializers/cors.rb
Rails.application.config.middleware.insert_before 0, Rack::Cors do
allow do
# TODO: 本番デプロイの前には本番用ドメインを指定する
origins '*'
resource '*',
headers: :any,
methods: [:get, :post, :put, :patch, :delete, :options, :head]
end
end
クロスドメインのアクセス許可をするには上のように設定するだけで実現可能です。
ただ、この場合全て許可しているため、セキュリティを高めるにはドメインを指定してください。
② rack-attackの設定
Gemfile
gem 'rack-attack'
terminal
bundle install
config/application.rb
..
config.middleware.use Rack::Attack
..
config/initializers/rack_attack.rb
class Rack::Attack
# DOS攻撃の制御
throttle('req/ip', limit: 300, period: 5.minutes) do |req|
req.ip
end
# エラーハンドリング
self.throttled_response = lambda do |env|
[ 503, {}, ["Server Error\n"] ]
end
end
今回は、rack-attack公式のサンプルコードを参考にしてDOS攻撃の制御を書きましたが、
Rack-Attackでは、この他にもIP制御なども可能です。
まとめ
サーバーを脅かす悪意のある攻撃は多数あります。
こちらにその一覧が詳しく載っています。
今回はその中でもほんの一部の対策を施しただけですが、
Rails標準でもかなりのセキュリティ対策をしてくれています。
一応は上記の対策と、SQLインジェクションくらいを気にすれば大丈夫なのではないかなと思ってます。
次回は最後ですが、RSpecを用いてこれまで設定したAPIのテストケースを書いていきたいと思います。