DX・Web開発・生成AIに関する知見をお届けします。

セキュリティミスコンフィグの仕組みと起きるパターン、安全な既定への統一と環境をまたいだ設定管理を軸にした対策を整理します。Sidekiq の Web UI を認証なしでマウントする危険例と Devise の authenticate で囲む方法、本番で consider_all_requests_local が true になっている場合の露出を具体的なコードで示します。

Webキャッシュポイズニングの仕組みと起きるパターン、キャッシュキーの設計と未署名ヘッダの排除を軸にした対策を整理します。request.host(X-Forwarded-Host 由来)からURLを組み立てる危険例と、config.asset_host での固定、本番で空のままになりがちな config.hosts の設定を具体的なコードで示します。

クリックジャッキングの仕組みと起きるパターン、CSP の frame-ancestors と X-Frame-Options を軸にした対策を整理します。Rails が既定で付ける SAMEORIGIN を埋め込み対応のために削除してしまう危険例と、許可先を列挙する正しい設定、重要操作に確認を挟む設計を具体的なコードで示します。

CORS設定ミスの仕組みと起きるパターン、許可オリジンのホワイトリスト管理を軸にした対策を整理します。rack-cors でアンカーのない正規表現が部分一致になり example.com.attacker.net まで通る危険例と、完全一致で列挙する正しい設定、ワイルドカードと credentials の併用禁止を具体的なコードで示します。

オープンリダイレクトの仕組みと起きるパターン、遷移先を許可リストや内部パスに限定する対策を整理します。Rails 7 の raise_on_open_redirects と、それを allow_other_host: true で無効化してしまう誤った直し方、// で始まるスキーム省略URLの判定、React 側で window.location.href を使う危険例を具体的なコードで示します。

ファイルアップロードの検証不備の仕組みと起きるパターン、実体(マジックバイト)での型判定と実行されない保存先を軸にした対策を整理します。original_filename と content_type を信用する危険例と、Marcel での判定・Active Storage 経由の保存・サーバが生成するファイル名を具体的なコードで示します。

レースコンディション(競合状態)の仕組みと起きるパターン、原子的更新と行ロックを軸にした対策を整理します。残高の確認と更新が分かれた check-then-act の危険例、UPDATE 一文にまとめる方法、with_lock による直列化、uniqueness バリデーションではなくDBのユニーク制約が必要な理由を具体的なコードで示します。

プロトタイプ汚染の仕組みと起きるパターン、__proto__ など危険なキーの遮断を軸にした対策を整理します。自前の再帰マージが Object.prototype を書き換えてしまう危険例と、禁止キーの拒否や Object.create(null) の利用、対策済みライブラリへの移行を TypeScript のコードで示します。

ReDoS(正規表現によるDoS)の仕組みと起きるパターン、破滅的なバックトラッキングを避ける書き換えと入力長の制限を軸にした対策を整理します。入れ子の繰り返しパターンの危険例、Rails の length バリデーションが防御にならない理由、Ruby 3.2 の Regexp.timeout の位置づけを具体的なコードで示します。

過剰なデータ露出の仕組みと起きるパターン、シリアライザ層で返す属性を列挙する対策を整理します。render json: @user が password_digest まで返す危険例、filter_attributes や Devise では守れない範囲、関連モデルの include による芋づる露出、本人と他人でシリアライズを分ける実装を具体的なコードで示します。

マスアサインメントの仕組みと起きるパターン、Strong Parameters による許可リスト化を軸にした対策を整理します。permit! で全属性を許可する形と、JSON.parse が返す素の Hash が Strong Parameters の保護対象外になる見落としがちな経路、role のような内部属性を許可リストから外す設計を具体的なコードで示します。

権限昇格(水平方向・垂直方向)の仕組みと起きるパターン、サーバ側での権限判定とデフォルト拒否を軸にした対策を整理します。画面でメニューを隠すだけの危険な実装と、管理系コントローラを共通の基底クラスへ集約する方法、Pundit の verify_authorized による掛け忘れ検出までを具体的なコードで示します。

クレデンシャルスタッフィング(リスト型攻撃)の仕組みと起きるパターン、多要素認証とレート制限を軸にした対策を整理します。ブルートフォースとの違い、rack-attack で IP 単位とアカウント単位の両方にしきい値を設ける実装、Devise の lockable や流出パスワード拒否の組み合わせ方を具体的なコードで示します。

セッション固定化の仕組みと起きるパターン、ログイン成功時のセッションID再発行を軸にした対策を整理します。Rails で認証後に session[:user_id] を代入するだけの危険な実装と、reset_session を呼んでから値を入れる正しい順序、Devise を使う場合の扱いまでを具体的なコードで示します。

セッションハイジャックの仕組みと起きるパターン、Cookie の HttpOnly / Secure / SameSite 属性と TLS の全面適用を軸にした対策を整理します。Rails のセッションストア設定で属性を明示していない危険例と、secure・httponly・same_site を指定した安全な設定、force_ssl による HTTPS 強制と reset_session によるセッション破棄までを具体的なコードで示します。

JWT(JSON Web Token)の署名検証の不備で認証が丸ごと回避される仕組みと起きるパターン、署名アルゴリズムの固定と失効設計を軸にした対策を整理します。Ruby の jwt gem で署名を検証しない decode の危険例と、algorithm を明示した安全な検証、localStorage 保管をやめて HttpOnly Cookie かメモリ保持へ寄せる判断基準を具体的なコードで示します。

バイブコーディングとは、生成コードの中身を確認せず動作の手応えだけで開発を進めるスタイルです。語の由来、プロトタイプでの強み、本番開発に持ち込むときの注意点を解説します。

MCP(Model Context Protocol)とは、AIアプリと外部ツールをつなぐオープンな共通規格です。ホスト、クライアント、サーバの仕組みと、社内システム接続での使いどころ、セキュリティ上の注意点を解説します。