2025/10/27
Apache2.4+PHP 8.4を使用して、WebAPIのサーバープログラムを作りました。
呼び出し元のURLと、Apacheが稼働しているサーバが同じドメインにある場合のみ応答し、それ以外の場合は応答を拒否したいです。
WebAPIのサーバープログラムの中でリクエスト元のRefererをチェックする以外の方法で、コーディングせずにこれを実現できますか?
------
方法�@:mod_rewriteで Referer ヘッダを制限する(一般的)
------
設定例(httpd.conf または .htaccess)
------
RewriteEngine On
# 自分のドメインを許可(例:example.com)
RewriteCond %{HTTP_REFERER} !^https?://([^.]+\.)?example\.com/ [NC]
# Refererが空のリクエストも許可したい場合(拒否したい場合は下記の行を書かない)
RewriteCond %{HTTP_REFERER} !^$
RewriteRule ^ - [F]
------
基本の流れ
RewriteRule が適用される前に、直前の RewriteCond がすべて評価される。
すべての条件が「真(true)」だった場合のみ、その RewriteRule が実行される。
1つでも条件が「偽(false)」なら、その RewriteRule はスキップされて、次のルール(もしあれば)に進みます。
※[NC]は大文字小文字を区別しない意味
RewriteCond %{HTTP_REFERER} でRefererを判定
[F] フラグで 403 Forbidden 応答を返す
example.com の部分を自社ドメインに置き換えてください。
------
方法�B:ネットワーク的に制限(LAN・社内限定など)
------
もしWebAPIサーバが社内など限定環境なら、
ApacheのRequireディレクティブでアクセス元IPを制限する方法もあります。
------
Require ip 10.0.0.0/8
------
------
社内システムで、従業員IDを渡すとその従業員のプロフィールを数行の文章で返すWeb APIを作りたいです。
リクエストはGETとPOSTのどちらのメソッドが適していますか。
------
GET https://intra.mycompany.local/api/employee?id=E12345
------
{
"employee_id": "E12345",
"employee_name": "山田太郎",
"profile": [
"2005年に入社し、営業第1課に配属。",
"新規顧客開拓を中心に実績を上げ、2012年に主任に昇進。",
"現在は営業第2課の課長としてチームを統括している。"
]
}
------
header('Content-Type: application/json; charset=utf-8');
$data = [
'employee_id' => 'E12345',
'employee_name' => '山田太郎',
'profile' => [
'2005年に入社し、営業第1課に配属。',
'新規顧客開拓を中心に実績を上げ、2012年に主任に昇進。',
'現在は営業第2課の課長としてチームを統括している。'
]
];
echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
------
jsonを返すWebAPIをfile_get_contentsで読み込めるか?
------
読み込めます。
------