セキュリティ · 上級
インジェクション:指示をデータから分離する
一行でいうと: ユーザーからの文字列がコマンドに組み立てられるすべての場所が穴だ——解決策はフィルタリングではなくパラメータだ。
唯一の原則
エンジンはコマンドとデータを別々に受け取るべきだ。パラメータ化されたクエリ、引数配列を持つシステムコマンド、安全でないコンテンツをマークするテンプレートエンジン。文字列のフィルタリングは常に負けるレースだ。
どこに現れるか
データベース、OSコマンド、ライブラリクエリ、検索エンジンへの呼び出し、動的に構築されるアドレス。そしてそう——外部コンテンツが指示として解釈される言語モデルへのプロンプトでも。
深さの防御
ダメージを制限するためのデータベースユーザーへの最小権限、何かが通り抜けた場合でも。そしてスキーマに対する入力バリデーション——分離の代替としてではなく、最初から不合理な入力をブロックする追加レイヤーとして。
さらに深く
各フィールドに異常な入力——特殊文字、極端な長さ、異なるエンコーディング——を与える自動テストを実行し、レスポンスが異常な動作でなく秩序あるエラーであることを確認する。これは脆弱性だけでなく通常のバグも捉える。