速報

X.Orgのクライアントライブラリーで17件を修正!Linux端末と画像処理の利用範囲を点検

CATEGORY

CSVの文字列が数式になる落とし穴!安全なダウンロードと再利用の設計

※本ページのリンクにはプロモーションが含まれています。

CSV出力の文字列が数式として扱われるのを防ぐ白背景の概念イラスト

目次

管理画面からダウンロードしたCSVは、自分のサイトが作ったファイルなので安全に見えます。しかし、顧客名、問い合わせ文、投稿タイトルなどの一部は外部の入力です。その値が表計算ソフトで数式として扱われると、Webページでは起きなかった問題が出力先で生じる場合があります。

本記事は2026年10月18日にOWASPの一次資料を確認した実務解説で、特定の事件の速報ではありません。CSVを使う業務と試験手順は本サイトの提案です。表計算ソフトや設定で挙動が異なるため、すべてに通用する一つの変換で安全になるとは説明しません。

スポンサーリンク

CSVはセルの型を確定する形式ではない

CSVの区切りや引用符は、どこからどこまでが一つの値かを表すために使います。一方、その値を文字列、数値、日時、数式のどれとして扱うかは、読み込む側の動作に関係します。正しいCSVを生成することと、数式として評価させないことは別の条件です。

OWASPは、数式として扱われ得る先頭文字だけでなく、区切りや引用符によって別のセルの先頭を作られる場合にも注意を求めています。本サイトの提案は、単純な文字列連結をやめ、CSVの形式処理と各列の値の処理を分けて管理することです。

画面へ出す際のHTMLエスケープは、CSVや表計算ソフトの式評価にそのまま使える対策ではありません。出力先が変わったら、そこで値がどう解釈されるかを改めて確認します。

出典:OWASP CSV Injection。

入力欄だけでなく出力する列を棚卸しする

外部の利用者が入力する欄に加え、連携先のサービスやインポートしたデータも対象です。管理者が後から承認した文章でも、承認が数式の安全性の検査を意味するとは限りません。

本サイトの提案として、出力する列ごとに、値の来歴、意図する型、空欄の扱い、利用するソフトを記録します。氏名や備考は文字列、数量は定義した範囲の数値、日時は業務で選んだ形式、というように用途を区別します。

電話番号の先頭の記号や、金額の負数のように、危険になり得る記号が正当な値に現れる場合もあります。あらゆる列から同じ文字を削除すると、業務データを壊します。列の仕様に基づく処理を選び、元の値を無断で書き換えないようにします。

スポンサーリンク

先頭文字だけの検査で終わらせない

OWASPは、等号などの記号、制御文字、日本語環境を含む一部のロケールでの全角の記号に注意を挙げています。実際の対象ソフト、読み込み方、区切り文字、変換の順序によって結果が変わります。

本サイトの提案は、値の中だけを見る簡単な検査ではなく、最終的に出力する各セルを基準に確認することです。引用符や区切り、改行を扱った結果、意図しない新しいセルを作っていないかも調べます。

文字の正規化や空白の除去を後から行うと、対策したつもりの値が再び別の先頭文字を持つ場合があります。処理の順序を一つの出力経路で管理し、利用先でどう見えるかまで試験します。

閲覧用と機械処理用の出力を分ける

表計算ソフトで人が読むCSVと、別システムが正確な値を取り込むCSVでは、必要な性質が異なります。式評価を避けるために文字を追加すると、機械処理では別の値として扱われる場合があります。

本サイトの提案は、両方の用途がある場合に一つのファイルへ無理に統一しないことです。閲覧用の出力は対象のアプリと表示を優先して検証し、機械処理用は型と仕様を明示した交換形式として管理します。利用者が選ぶ画面でも用途が分かる名称にします。

元データを保持したまま、出力時に必要な扱いを行う設計なら、別の用途へ再利用するときに変換済みの値が混ざりにくくなります。対策済みのCSVを読み戻して、その値をさらに別のCSVへ変換する経路も点検してください。

スポンサーリンク

文字列の型を持つ出力も選択肢になる

閲覧が主な目的なら、セルの型を明示できる形式を検討する方法があります。たとえばXLSXを作る場合、利用するライブラリーが値を文字列のセルとして保存する設定と、数式として保存する設定をどう区別するかを確認します。

形式を変えるだけで安全が確定するわけではありません。文字列を渡すと自動で数式へ変換する機能や、外部リンクなどの機能を含め、実際に使うライブラリーの公式仕様で確認します。利用者の入力をそのまま数式を設定するAPIへ渡さないようにします。

列が固定した帳票なら、どの欄が文字列なのかを明確にできる場合があります。一方、大量データや他システムとの互換性が必要なときは、形式変更の負担もあります。業務の必要性と検証できる範囲で方式を選びます。

単一の接頭処理を万能な対策と考えない

OWASPは、CSVへの引用符や接頭文字の付与について、特にExcelで保存して開き直すと保護が崩れる場合があると説明しています。また、Excel向けの別の処理にも、文字がデータへ残るなどのトレードオフを示しています。

本サイトの提案は、どの方法を選んでも対象のソフトと操作で確認することです。最初に開いた直後だけでなく、保存、再読込、コピー、別のソフトへの受け渡しを、業務で実施する範囲で試します。全ソフトと全用途に対する保証を表示しないようにします。

「警告が出るから利用者が止められる」という設計も十分ではありません。普段から自社の管理画面のファイルを開く人が、毎回危険性を判断できる前提にせず、出力側で減らせるリスクを減らします。

試験は無害な式と架空データで行う

試験用には、架空の氏名、区切りや引用符、改行、想定する先頭文字を含む文字列などを用意します。式の扱いを見る場合も、ネットワーク、外部ファイル、コマンド実行を使わない無害な値を選び、隔離した環境で確認します。

合格条件は、値が文字列として表示されること、列と行がずれないこと、必要な値が失われないことです。生成したCSVのバイト列だけを見て、実際のソフトでの解釈を確認済みとしないでください。

対象ソフトの版、ロケール、読み込み操作、保存後の結果を記録します。この記事では特定の環境を実機で検証したと主張せず、実際の運用先で行う検証手順を示しています。ソフトを更新したときも代表の試験を繰り返せるようにします。

ダウンロード画面へ用途の違いを伝える

仮想の管理画面に、表計算で確認する出力と、業務システムへ取り込む出力の二つがあるとします。本サイトの提案は、違いをファイル名と説明へ反映することです。見た目が同じCSVでも、表示用の変換を加えたものは、元の値を正確に戻せるとは限りません。

利用者が機械処理用を表計算ソフトで直接開いてしまう可能性も考え、仕様と操作を共有します。ただし、注意書きを付けたことだけを対策完了にはしません。可能なら用途に合う形式を提供し、危険な解釈が起きる機会自体を減らします。

書き出しの担当が変わる場合も、実際の利用方法を引き継ぎます。開発者が想定する取り込み操作と、現場が行うダブルクリックでの表示が違うなら、その差を試験に含める必要があります。

スポンサーリンク

列名と自由記述を同じ経路で扱わない

CSVに含まれるのはセルの値だけではありません。利用者が作ったフォームの質問名やカスタム項目名を列名へ使う機能では、見出しも外部入力です。データ行だけを変換し、先頭の見出し行を無検証で作らないようにします。

本サイトの提案として、固定の列と利用者が増やせる列を区別し、順序、件数、重複の扱いを定義します。列名に改行や区切りが含まれる場合も、CSVの構文が崩れず、意図しない式にならないかを確認します。

出力時に付ける集計や説明の行も対象です。利用者の名前を説明文へ連結するなど、通常のセルとは違う経路で生成される値を台帳へ含めます。どの行も同じ安全な出力処理を通ることが、機能追加による漏れを減らします。

検証記録を出力仕様の一部にする

リリース時には、対応を確認したアプリの版と操作、文字列が保たれる範囲、機械処理への影響を記録します。自分たちの環境で確認した結果を、取引先の全環境への保証に広げないようにします。利用環境が変わったときは、その条件を追加して検証します。

データを加工する対策では、正規の負数、電話番号、先頭のゼロ、長い識別子も壊れないかを照合します。安全性とデータの正確性を別々に評価すると、危険な値を止めた代わりに業務の値を静かに変えてしまう問題を発見しやすくなります。

スポンサーリンク

ファイルを安全に扱う権限も別に守る

数式の対策をしても、出力してよいデータの範囲が誤っていれば情報漏えいは防げません。CSVの作成権限、対象の組織、出力する列、保存場所、ダウンロード期限は別に確認します。

作成したファイルやログへ個人情報を無期限に残さないようにします。外部の検証サイトへ実データをアップロードして安全性を確認する方法は避け、架空データで再現できる試験を用意します。

CSVの安全性は、引用符の付け方だけの問題ではありません。誰のどの値を、誰が何の目的でどのソフトへ渡すかを定義し、その一連の操作で意図しない解釈が起きないかを検証することが基本になります。

参考資料

以下の一次資料を2026年10月18日に確認しました。本文の仮想例と運用手順の提案は、資料の引用とは区別しています。

この記事を書いた人

Ryohei

Webエンジニア / アプリ開発者 / 技術ブログ運営者

福岡のWeb制作会社に勤務するWebエンジニアです。10年以上にわたりWeb制作・開発に携わり、これまでに100以上のWordPressサイトの構築・保守を担当してきました。Webサイト制作に加え、アプリ開発やAIを活用した開発にも取り組み、近年はWebセキュリティにも注力しています。

2015年から技術メディア「Into the Program」を運営し、実務や開発で得た知識をもとに、プログラミングの実装方法やWebサイトの運用・セキュリティ情報を発信しています。

主な分野
WordPress / PHP / JavaScript / アプリ開発 / Webサイトの運用・セキュリティ対策
資格・試験合格
情報セキュリティマネジメント試験
基本情報技術者試験
AWS認定ソリューションアーキテクト アソシエイト
メディア運営
2015年〜

記事の作成・更新について

セキュリティ記事は、ベンダーの公式アドバイザリやCVE・JVNなどの一次情報を参照し、出典と情報確認日を記載します。実環境での検証を行った場合は、その環境と確認範囲を明示します。重要な追加情報や誤りを把握した場合は、内容を確認して追記・訂正します。

スポンサーリンク

関連する記事

おすすめの書籍