CORSとCSPの違いを完全解説!ウェブ安全の秘密と仕組みを中学生にもわかる言葉で

  • このエントリーをはてなブックマークに追加
CORSとCSPの違いを完全解説!ウェブ安全の秘密と仕組みを中学生にもわかる言葉で
この記事を書いた人

中嶋悟

名前:中嶋 悟(なかじま さとる) ニックネーム:サトルン 年齢:28歳 性別:男性 職業:会社員(IT系メーカー・マーケティング部門) 通勤場所:東京都千代田区・本社オフィス 通勤時間:片道約45分(電車+徒歩) 居住地:東京都杉並区・阿佐ヶ谷の1LDKマンション 出身地:神奈川県横浜市 身長:175cm 血液型:A型 誕生日:1997年5月12日 趣味:比較記事を書くこと、カメラ散歩、ガジェット収集、カフェ巡り、映画鑑賞(特に洋画)、料理(最近はスパイスカレー作りにハマり中) 性格:分析好き・好奇心旺盛・マイペース・几帳面だけど時々おおざっぱ・物事をとことん調べたくなるタイプ 1日(平日)のタイムスケジュール 6:30 起床。まずはコーヒーを淹れながらニュースとSNSチェック 7:00 朝食(自作のオートミールorトースト)、ブログの下書きや記事ネタ整理 8:00 出勤準備 8:30 電車で通勤(この間にポッドキャストやオーディオブックでインプット) 9:15 出社。午前は資料作成やメール返信 12:00 ランチはオフィス近くの定食屋かカフェ 13:00 午後は会議やマーケティング企画立案、データ分析 18:00 退社 19:00 帰宅途中にスーパー寄って買い物 19:30 夕食&YouTubeやNetflixでリラックスタイム 21:00 ブログ執筆や写真編集、次の記事の構成作成 23:00 読書(比較記事のネタ探しも兼ねる) 23:45 就寝準備 24:00 就寝


CORSとCSPの違いとは何かを徹底解説する

まずは前提を押さえましょう。ウェブページが別のドメインにある資源を取りに行くとき、ブラウザはみんな同じ origin の安全ルールを守ろうとします。ここで登場するのが CORS です。

CORS は Cross Origin Resource Sharing の略で、サーバが許可するかどうかをヘッダで伝える仕組み。つまり「このページはこのドメインの資源を使っていいですよ」という許可サインを返す役割を担います。許可がないとブラウザはリクエストをブロックします。プリフライトリクエストと呼ばれる事前確認のやりとりが走ることもあり、安全性を高めるための仕組みです。

一方CSP は Content Security Policy の略で、ページが読み込むコンテンツそのものの安全性を守るための仕組みです。悪意あるスクリプトの実行や外部リソースの読み込みを制限することで XSS などの攻撃を防ぎます。ヘッダや meta でポリシーを設定します。

つまり、CORS は「誰が誰の資源を使えるか」という通信の許可を決め、CSP は「ページ内で何を実行して良いか」を決める security の設計図です。目的が異なるため設定場所や効果の現れ方も変わります。使い分けが大切です。

この二つを混同しないことがウェブ開発の第一歩 です。

CORSの仕組みと使い方をやさしく解説

CORS の基本は「サーバが許可を出すかどうか」です。ブラウザは cross-origin のリクエスト時に先に OPTIONS というプリフライトと呼ばれる確認を送ることがあります。サーバは Access-Control-Allow-Origin というヘッダで許可する origin を返します。複数の origin を許可したい場合は具体的な値を列挙したり、必要に応じてワイルドカード * を使いますが credentials を使う場合はワイルドカードは使えません。

具体例として、あなたのページが http://example.com で、API が http://api.example.org にあるとします。API 側のレスポンスに Access-Control-Allow-Origin: http://example.com が含まれていれば、ブラウザはリクエストを許可します。許可されていなければブロックされ、エラーがコンソールに出ます。

さらに重要なのが認証情報の扱いです。credentials を true にするとクッキーや認証ヘッダが含まれるため、Access-Control-Allow-Origin には具体的なドメインを指定し、ワイルドカードは使わない、というのが基本ルールです。これらの挙動を理解すると、第三者のウェブサイトから資源を安全に共有することができます。

CORS を正しく設定するにはサーバ側の設定が鍵です。クライアント側だけの設定で安全と思い込んでしまうと脆弱になります。現実の運用では、どの域からのリクエストを許可するのか、どの HTTP メソッドを許可するのか、どのヘッダを許容するのかを細かく決めることが大切です。

なお、CORS はあくまで「アプリケーションの通信の安全性」に関わる仕組みです。ページ内のコードの安全性を直接守るものではない点も覚えておきましょう。

able>項目概要役割クロスオリジンのリソース共有の許可を制御主な設定場所サーバのレスポンスヘッダ影響範囲ブラウザのリクエストの成否とアクセス可能性ble>

CSPとは何かをわかりやすく解説

CSP はページ上の実行コンテンツの出所と動作を決定します。例えば script-src のポリシーで「自己のドメインのみ許可」や「nonce を持つスクリプトのみ許可」といった制限を設け、インラインスクリプトの実行を禁止したり、外部リソースの出所を限定するだけで、XSS のような攻撃を未然に防ぐことができます。実装の方法としてはヘッダ Content-Security-Policy を設定する方法と、HTML の head に meta tag を置く方法があります。実務ではサーバのヘッダで一括管理するケースが多く、フォールバックとして meta tag を使う場面もあります。

重要なポイントは「信頼できるソースのみを許可する」という基本を徹底することです。inline のスクリプトを使わず、外部リソースの出所を限定するだけで、多くの攻撃を未然に防ぐことができます。

ただし過剰な制約は開発の自由度を下げるため、運用時には分析と調整が必要です。ポリシーを厳しくしすぎると正しく動かないこともあるので、徐々に適用していくのが良い方法です。

ピックアップ解説

ねえ、CORSの話、ただの専門用語に感じるかもしれないけど、実は普段のウェブ体験と深くつながっているんだ。ある日友だちのサイトが別のサイトの資源を借りようとするとき、相手サイトが貸してくれるかどうかを返事で決める。そんなやり取りを想像してみると、CORSは人と人の約束ごとみたいにも見える。実際にはカードを使うかのように、許可の表情がヘッダに現れる。つまり私たちがブラウザで何かを読み込むとき、遠く離れた別のドメインにお願いして良いかどうかを判断するのが CORS だ。これを理解すると API を公開するときの安全設計がぐんと楽になる。


ITの人気記事

ズームとズームワークプレイスの違いとは?初心者でもわかる徹底解説!
809viws
青写真と青焼きの違いとは?簡単解説でわかりやすく理解しよう!
756viws
「画素(ピクセル)とは何?解説と画像の違いをやさしく理解しよう」
641viws
CADデータとDXFデータの違いを徹底解説!初心者でもわかる使い分けのポイント
411viws
HTTPとHTTPSの違いをわかりやすく解説!安全なネット利用のために知っておきたいポイント
390viws
スター結線とデルタ結線の違いを徹底解説!初心者でも分かる電気の基本
369viws
モバイルデータ通信番号と電話番号の違いを徹底解説!初心者でもわかるスマホの基礎知識
343viws
IPアドレスとデフォルトゲートウェイの違いをわかりやすく解説!ネットワークの基本を理解しよう
324viws
API仕様書とIF仕様書の違いを徹底解説!初心者でもわかるポイントとは?
313viws
USB充電器とアダプターの違いとは?初心者にもわかりやすく解説!
270viws
RGBとsRGBの違いって何?初心者でもわかる色の基本知識
261viws
RGBとVGAの違いを徹底解説!初心者にもわかりやすい映像信号の基礎知識
255viws
SSDとUSBメモリの違いを徹底解説!初心者でもわかる保存デバイスの選び方
253viws
グロメットとコンジットの違いとは?わかりやすく解説!
251viws
UPSと非常用電源の違いとは?初心者でもわかる電源設備の基礎知識
247viws
DFDとER図の違いをわかりやすく解説!初心者でも理解できる基本ポイント
239viws
通信線と電力線の違いとは?意外と知らない基本ポイントを徹底解説!
229viws
インターフォンとインターホンの違いって何?わかりやすく解説!
229viws
【保存版】webサイト名とページタイトルの違いとは?初心者でも簡単にわかる解説
226viws
IPv4アドレスとIPアドレスの違いとは?初心者にもわかりやすく解説!
214viws

新着記事

ITの関連記事