【入門編】Content-Security-Policy (CSP) の基本ディレクティブ設計 – アプリケーションセキュリティ & 安全な開発防御ガイド

「ウェブサイトの鍵」を最強にする:CSPでXSSを封じ込める防犯術

こんにちは!セキュリティの世界へようこそ。
Web開発を始めると必ず耳にする「XSS(クロスサイトスクリプティング)」。これ、名前は難しそうですが、仕組みを理解すれば怖くありません。今日は、この泥棒を追い出すための最強の防犯ツール「CSP(Content-Security-Policy)」について、身近な例えを交えながら一緒に学んでいきましょう。

1. XSSって、結局どんな泥棒なの?

まずは敵を知りましょう。XSSとは、「あなたのWebサイトに、知らない間に変なスクリプト(命令文)を紛れ込ませる攻撃」のことです。

これを「家」で例えてみますね。
あなたのWebサイトという「家」には、訪問者が自由に書き込める「掲示板」という玄関先があります。そこに泥棒がやってきて、掲示板に「このボタンを押すと、家主の秘密の金庫を開ける鍵を盗む」という悪魔の書き込みをしたとします。

もし、そのページを訪れた人がそのボタンを押してしまったら……泥棒はあなたのサイトを利用して、訪問者の大事な情報を盗み出してしまうのです。これがXSSの正体です。

2. 「CSP」は、家の入口に置く最強のガードマン

この泥棒を物理的に防ぐにはどうすればいいでしょう?「怪しい書き込みを全部消す」のも大切ですが、それだけでは防ぎきれないこともあります。

そこで登場するのがCSP(Content-Security-Policy)です。これは、ブラウザ(閲覧者の家)に対して、「この家では、許可された道具以外は一切使わせない!」と宣言する「ガードマン」のような役割を果たします。

たとえ泥棒が掲示板に怪しいスクリプトを書いても、CSPが「お前、許可リストに載ってないな? 動かすんじゃない!」と、ブラウザ側で実行を拒否してくれるんです。

3. まずはこれだけ!CSPの基本ディレクティブ

CSPを設定するには、Webサーバーからブラウザへ送るレスポンスヘッダーに、特定のルールを記述します。初心者の方がまず押さえるべきは以下の2つです。

script-src:誰のプログラムなら動かしていい?

「信頼できるソース」以外からのスクリプトを一切禁止します。

object-src:怪しいプラグインを禁止する

Flashなどの古いプラグインを悪用した攻撃を防ぎます。基本は none(一切禁止)にするのが鉄則です。

—

4. 実践!安全なCSP設定例

では、具体的にどんな設定を書けばいいのか見てみましょう。以下の設定をWebサーバーのヘッダーに追加するだけで、セキュリティレベルが格段に上がります。

HTTPヘッダーの設定例
Content-Security-Policy: default-src ‘self’; script-src ‘self’ https://trusted.cdn.com; object-src ‘none’;

この設定の「意味」を翻訳してみますね。

  • default-src 'self': 基本的に、自分のサイト(同じドメイン)にあるものだけを読み込む。
  • script-src 'self' https://trusted.cdn.com: プログラム(JS)は「自分のサイト」または「信頼しているCDN(例:Googleのライブラリなど)」のものだけ動かしていいよ。
  • object-src 'none': プラグインは一切使わせない。これが一番安全!

—

5. 運用で失敗しないための「一歩ずつ」の進め方

いきなり厳格な設定を導入すると、今まで動いていた機能が突然止まってしまうことがあります。まずは以下のステップで進めてみてください。

1. Report-Onlyモードで試す:
Content-Security-Policy-Report-Only というヘッダーを使うと、「もしこのルールを適用したら、何が弾かれるか」をレポートとして収集できます。サイトを壊さずに安全性を確認できる便利な機能です。
2. インラインスクリプトを避ける:
HTMLの中に直接 と書くのは、泥棒にとって好都合です。なるべくJSファイルとして外部化し、CSPの許可リストで管理しましょう。
3. 少しずつ厳しくする:
まずは self(自分自身)だけを許可し、どうしても必要な外部サービスがある場合だけ、そのドメインを一つずつ追加していくのがコツです。

最後に:完璧なセキュリティはない、だからこそ「多層」で守る

CSPは非常に強力ですが、これだけで全てが解決するわけではありません。入力値のチェックやサニタイズ(無害化)といった「基本の防犯対策」を怠らないことが大前提です。

セキュリティは、家を守るのと同じです。
「鍵をかける」「窓を閉める」「ガードマンを置く」。これらを組み合わせることで、初めて泥棒は「この家には手を出さないほうがいいな」と諦めます。

まずは今日から、CSPという「最強のガードマン」をあなたのサイトに雇い入れてみませんか?一歩ずつ、安全なWebの世界を作っていきましょう!

—
執筆:現場を知り尽くしたセキュリティエンジニアより

コメント

タイトルとURLをコピーしました