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

ファイルアップロードの検証不備の仕組みと起きるパターン、実体(マジックバイト)での型判定と実行されない保存先を軸にした対策を整理します。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アプリと外部ツールをつなぐオープンな共通規格です。ホスト、クライアント、サーバの仕組みと、社内システム接続での使いどころ、セキュリティ上の注意点を解説します。

AI駆動開発(AIDD)とは、生成AIを開発工程の主役に置き、人間が方針決定と検証を担う開発スタイルです。コード補完との違い、開発工程がどう変わるか、導入の順序と注意点を解説します。

AIコーディングエージェントとは、タスク単位で実装からテストまでを自律的に進めるAI開発ツールです。補完型との違い、ターミナル型、IDE型、クラウド型の主要ツール分類と選び方を解説します。

AIエージェントとは、目標を与えるとAIが計画とツール実行を繰り返して作業を完了させるシステムです。チャットボットとの違い、LLMとツールとループという仕組み、業務での注意点を解説します。

XML外部実体参照(XXE)の仕組みと起きるパターン、XMLパーサの外部実体解決とDTD処理の無効化を軸にした対策を整理します。Nokogiri の noent オプションが名前に反して実体を展開してしまう危険例と、安全な既定設定を外さない運用、SVGやOfficeファイル経由の見落としやすい経路まで具体的に示します。

サーバサイドテンプレートインジェクション(SSTI)の仕組みと起きるパターン、テンプレートを固定してユーザー入力を変数として渡す対策を整理します。Railsでユーザー由来の文字列を ERB.new で評価してしまう危険例と、固定テンプレート+locals での安全な実装、ロジックレステンプレートの使いどころまで具体的なコードで示します。