1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

rails、君に決めた!!~7[wip]

1
Posted at

一連の記事の目次
rails、君に決めた!!~目次

セキュリティ

brakemanというgemがセキュリティチェックに有用

Digest認証

HTTP認証方式にはBasic認証とDigest認証がある。
どちらの認証方式も通信内容が暗号化されていないため、必ずSSL/TLSと併用しないとダメ

  • Basic認証
    認証時のユーザー名とパスワードがほぼ平文で通信される

  • Digest認証
    Basic認証とほぼ同じだが、通信する時にユーザーIDとパスワードがハッシュ化されるため、Basic認証よりは安全

  • Digest認証の実装

require 'digest/md5'

class ApplicationController < ActionController::Base
  # Digest認証の認証領域(realm)
  REALM = 'SecretZone'.freeze
  # ユーザー名 => (ユーザー名:Realm:パスワード)のMD5ハッシュ値
  USERS = { 'user1' => Digest::MD5.hexdigest(['user1', REALM, 'passw0rd'].join(':'))}.freeze

  before_action :authenticate

  private

  # Digest認証
  def authenticate
    authenticate_or_request_with_http_digest(REALM) do |username|
      USERS[username]
    end 
  end 
end 

ここで衝撃の一言

一般に公開するアプリケーション認証の仕組みとしては、ユーザーエクスペリエンスとセキュリティ上の観点からHTTP認証は避けるべき。代わりに、フォームとセッションを使ったフォーム認証方式がよく利用される。

まじか。。。じゃあ最初からフォーム認証やってよ
HTTP認証の問題点をもうちょっと具体的に知りたい!ってことで調べた

- ログアウト機能がないこと
- ログインせずに同じページのコンテンツを閲覧するという使い方(ゲストアクセス)ができないこと
- サーバ側からログイン状態を無効にする手段が存在しないこと
- ホストをまたがったシングルサインオンが実現できないこと

っていうのが理由っぽい。

SSL/TLSを強制する

HTTPSの仕組み

SSL:Secure Socket Layer TLS:Transport Layer Security

通信を暗号化する仕組み。
httpと組み合わせてhttpsにする。
現在ではSSLではなくTLSが主流。

  • 盗聴防止(暗号化通信)
    通信内容を傍受されても解読されないように暗号化してデータを送る

  • 改ざん防止
    通信の途中で内容を書き換えられないようにする。メッセージダイジェストがなんちゃらってあるけどよくわからないな。ダイジェストも改ざんされたらハッシュ値の比較できないような気がするけどなー。要勉強。

  • なりすまし防止
    webサーバーにSSLサーバー証明書を配置して起き、接続時に検証することでサイトのなりすましを防ぐ

RailsでHTTPアクセスの遮断

config/environments/production.rbに

Rails.application.configure do
  config.force_ssl = true
end

CSRF対策

Cross Site Request Forgery
リクエスト強要

Railsではセキュリティトークンをフォームに埋め込んでおくことで、リクエスト時に検証を行える仕組みが採用されている

class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception
end

ただ、RailsでAPIサーバーを構築する時はアクセスを制限しなくていいので、protect_from_forgery with: :null_sessionとする必要がある

Secure Headersを使う

Twitterが公開しているgem
セキュリティ関係のResponse Headerをまとめて設定できる

セキュリティ関係のHTTP Response Headerなんてあるの??
色々あった!
HTTPレスポンスヘッダによるセキュリティ対策

httpsのページ内にhttpリンクが混在している時の検知や、XSS脆弱性の緩和が可能になる

XSS:Cross Site Scripting

導入

Gemfile

gem 'secure_headers'

を追記してbundle install

config/initializers/secure_headers.rbを作成し、

SecureHeaders::Configuration.default

もっと細かく設定もできるので、詳しくは公式ドキュメントを参照。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?