hidakatsuya.dev hidakatsuya

Rails のセキュリティガイドを読んだ

改めて Railsガイドの セキュリティガイド を読んで、気になった点や知らなかった点をまとめた。

3. セッション

例えば、署名済みcookieのダイジェストをSHA1からSHA256に変更する場合

Rails.application.config.action_dispatch.signed_cookie_digest = "SHA256"

後は古いSHA1ダイジェストのローテーションを追加すれば、既存のcookieが自動的にSHA256ダイジェストにアップグレードされる

Rails.application.config.action_dispatch.cookies_rotations.tap do |cookies|
  cookies.rotate :signed, digest: "SHA1"
end

4. クロスサイトリクエストフォージェリ(CSRF)

7. インジェクション

許可リスト方式と禁止リスト方式

クロスサイトスクリプティング(XSS)

CSSインジェクション

コマンドインジェクション

ヘッダーインジェクション

例えば、以下のように指定のアドレスにリダイレクトする実装があるとする

redirect_to params[:referer]

悪意のあるユーザーが以下のように Location ヘッダーを注入する

http://www.yourapplication.com/controller/action?referer=path/at/your/app%0d%0aLocation:+http://www.malicious.tld

%0d%0a\r\n がURLエンコードされたものなので、以下のように解釈されてリダイレクトしてしまう

HTTP/1.1 302 Moved Temporarily
(...)
Location: http://www.malicious.tld

DNSリバインディングとHostヘッダー攻撃

8. 安全でないクエリ生成

unless params[:token].nil?
  user = User.find_by_token(params[:token])
  user.reset_password!
end
JSON パラメータ
{ "person": null } { :person => nil }
{ "person": [] } { :person => [] }
{ "person": [null] } { :person => [] }
{ "person": [null, null, ...] } { :person => [] }
{ "person": ["foo", null] } { :person => ["foo"] }

9. HTTPセキュリティヘッダー