LoginSignup
1
0

More than 5 years have passed since last update.

【初心者向け】RailsでAPI開発 Part.4

Posted at

これは何?

【初心者向け】RailsでAPI開発 Part.3
の続きです。

今回はセキュリティ編になります。

概要

▼ 仕組み

  1. 異なるドメイン間のリクエストを許可する(HTTPアクセス制御)
    1. CORS(Cross-Origin Resource Sharing)
    2. 別の言い方をすると許可されていないウェブサイトからのアクセスをブロックします。
  2. 過剰なリクエスト攻撃(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のテストケースを書いていきたいと思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0