PHPでAPIを作る際、何もしないとCORSにより外部ドメインからAPIに通信することができなくなってしまう。

API側で以下のコードを先頭に追記すれば、一応この問題は解消することができるのだが、これでは全てのドメインからAPIにリクエストを投げることができるので、セキュリティ上好ましくない。

<?php
header("Access-Control-Allow-Origin: *");

そこで今回は、指定の複数ドメインからのみAPIへの通信を許可する設定方法を紹介する。

サンプルコード

まずは以下のコードを見てもらおう。

このサンプルでは、変数allowedOriginに3つのドメインを配列で指定している。

<?php
$reqHeaders = apache_request_headers();

$allowedOrigin = array(
  'https://hogehoge.com',
  'https://fugafuga.com',
  'https://piyopiyo.com',
);

if(in_array($reqHeaders['Origin'], $allowedOrigin)) header("Access-Control-Allow-Origin: {$reqHeaders['Origin']}");is

2行目でアクセス元情報を取得し、配列内にドメインが見つかればリクエストを許可する処理をおこなっている。

これで任意のドメイン(複数可)にしぼって制限をかけることができる。