Security Guide
CSV数式インジェクションとは?危険性・確認方法・対策
問い合わせ一覧や会員データを書き出したCSVをExcelで開いた瞬間、入力値が数式として解釈されることがあります。これはCSV Injection、Formula Injectionと呼ばれる問題です。
なぜCSVで数式が動くのか
CSV自体は単純なテキスト形式ですが、ExcelやLibreOffice Calcなどの表計算ソフトは、特定の文字から始まるセルを数式として扱います。Webサービスが外部から受け取った値をそのままCSVへ出力すると、攻撃者が入力した文字列が管理者の端末で数式として評価される可能性があります。
OWASPは、CSV数式インジェクションによって利用者の誘導、表示内容の操作、データの外部送信などにつながる可能性を説明しています。
確認が必要な開始文字
OWASPの資料では、次の文字から始まるセルが確認対象として挙げられています。
= + - @ タブ キャリッジリターン 改行
= + - @(全角文字)
ただし、-1200のような正常な負数もあるため、開始文字だけで攻撃と断定することはできません。本ツールでは、単純な符号付き数値を除外し、判定に幅があるものは「要確認」として表示します。
特に注意したい式
外部URLを開く関数、外部データを取得する関数、古いDDE機能などを利用した式は、単純な計算式より影響が大きくなる可能性があります。
=HYPERLINK("https://example.invalid", "確認")
=WEBSERVICE("https://example.invalid")
=IMPORTXML("https://example.invalid", "//title")
CSVを生成する側で必要な対策
1. 外部入力が入る列を把握する
氏名、会社名、問い合わせ本文、チケット件名、備考欄など、利用者や外部システムが変更できる値を洗い出します。管理画面から出力するCSVだから安全とは限りません。
2. セル単位で処理する
完成後のCSV文字列をまとめて置換するのではなく、CSVへ変換する前の各フィールドに対して安全化を行います。区切り文字や引用符を使って新しいセルを作られる場合も考慮します。
3. 実際に使う表計算ソフトで再確認する
引用符で囲む、シングルクォートを付けるといった一般的な処理も、Excelで保存して開き直した際に維持されない場合があります。表計算ソフト、バージョン、地域設定、インポート方法を含めて確認が必要です。
安全化CSVの限界
本ツールでは、検出したセルにシングルクォートまたはタブを追加し、全セルを二重引用符で囲んだCSVを生成できます。しかし、すべての表計算ソフトと後続処理に共通する万能な方式はありません。
- シングルクォートがデータとして残る場合があります。
- タブが後続のシステム取り込みに影響する場合があります。
- Excelで保存・再オープンすると処理結果が変わる場合があります。
- 表計算ソフト側の脆弱性や独自機能まで保証するものではありません。
公開・受け渡し前の確認手順
- 元のCSVを安全な場所へ保管する。
- CSV数式インジェクション検査ツールで要確認セルを調べる。
- 該当セルが正当な数式、通常データ、外部入力のどれかを確認する。
- 生成元のシステムでセル単位の対策を行う。
- 実際に利用する表計算ソフトで開き、保存後に再度開いて確認する。
参考資料
- OWASP:CSV Injection
- OWASP Web Security Testing Guide:Testing for CSV Injection
- CWE-1236:Improper Neutralization of Formula Elements in a CSV File
最終確認日:2026年7月22日