現在の言語: 日本語

戻る

キー判定
ajax

ajaxを使用してhtml側からサーバーにリクエストします。
サーバーではphpを使用して判定した結果をhtml側に送信します。
このサンプルではキー判定を使用した画像表示の例となります。

[サンプル]

copy
[.htaccess]
RewriteEngine On

# 自分のサイトからの参照のみ許可
# ex.)
# RewriteCond %{HTTP_REFERER} ^https://test\.co\.jp [NC]
RewriteCond %{HTTP_REFERER} ^http://localhost [NC]
RewriteRule ^.*\.(jpe?g|png|gif|bmp)$ - [L]

# それ以外(空リファラ含む)は拒否
RewriteRule ^.*\.(jpe?g|png|gif|bmp)$ - [F,L]

[getkey.php]
header("Access-Control-Allow-Origin: http://localhost");//ex.)https://test.co.jp
header("Access-Control-Allow-Credentials: true");

// 固定キーを返すだけ
header("Content-Type: application/json; charset=utf-8");
echo json_encode(["key" => "password"]);

[image.php]
// --- CORS 設定 ---
header("Access-Control-Allow-Origin: http://localhost");//ex.)https://test.co.jp
header("Access-Control-Allow-Credentials: true");

// --- アクセス元チェック ---
$origin  = $_SERVER['HTTP_ORIGIN']  ?? '';
$referer = $_SERVER['HTTP_REFERER'] ?? '';

// --- ここから先は既存のキー判定や画像返却処理 ---
$valid_key = "password"; // 固定キーやトークン判定
$key  = $_GET['key'] ?? '';
$file = basename($_GET['file'] ?? '');

if ($key !== $valid_key) {
	header("HTTP/1.1 403 Forbidden");
	exit("Forbidden");
}

$path = __DIR__ . "/" . $file;
if (!file_exists($path)) {
	header("HTTP/1.1 404 Not Found");
	exit("Not Found");
}

$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime  = finfo_file($finfo, $path);
finfo_close($finfo);

header("Content-Type: $mime");
readfile($path);
exit;
copy
[.htaccess]
RewriteEngine On

# Allow access only from your own site
# ex.)
# RewriteCond %{HTTP_REFERER} ^https://test\.co\.jp [NC]
RewriteCond %{HTTP_REFERER} ^http://localhost [NC]
RewriteRule ^.*\.(jpe?g|png|gif|bmp)$ - [L]

# Deny all others (including empty referrers)
RewriteRule ^.*\.(jpe?g|png|gif|bmp)$ - [F,L]

[getkey.php]
header(“Access-Control-Allow-Origin: http://localhost”);//ex.)https://test.co.jp
header(“Access-Control-Allow-Credentials: true”);

// Just return the fixed key
header(“Content-Type: application/json; charset=utf-8”);
echo json_encode([“key” => “password”]);

[image.php]
// --- CORS Configuration ---
header(“Access-Control-Allow-Origin: http://localhost”);//ex.)https://test.co.jp
header(“Access-Control-Allow-Credentials: true”);

// --- Origin Check ---
$origin  = $_SERVER[‘HTTP_ORIGIN’]  ?? ‘’;
$referer = $_SERVER[‘HTTP_REFERER’] ?? ‘’;

// --- Existing key validation and image return logic starts here ---
$valid_key = “password”; // Fixed key or token check
$key  = $_GET[‘key’] ?? ‘’;
$file = basename($_GET[‘file’] ?? ‘’);

if ($key !== $valid_key) {
    header(“HTTP/1.1 403 Forbidden”);
    exit(“Forbidden”);
}

$path = __DIR__ . “/” . $file;
if (!file_exists($path)) {
    header(“HTTP/1.1 404 Not Found”);
	exit(“Not Found”);
}

$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime  = finfo_file($finfo, $path);
finfo_close($finfo);

header(“Content-Type: $mime”);
readfile($path);
exit;

test4.html
localhost直下に存在するとします。
(1) .htaccess
(2) getkey.php
(3)image.php
(4)post.png
localhost/imgフォルダ直下に存在するとします。

test4.htmlを開いたらajax処理でgetkey.phpにアクセスします。
getkey.phpからキーを受け取ります。
キーを使ってimage.phpに渡します。
照合すると画像を読み込むことができます。
この処理は仕組みをそのままコピーされるとアクセスされてしまいますが、
簡易的な他のサイトからの画像禁止を目的とした許可されたサイトからのみ画像を許可する方法です。

echo json_encode(["key" => "password"]);
.htaccessがあるフォルダの画像を表示するため
getkey.phpからキーを受け取ります。
getkey.phpではheaderを使用してアクセス可能なサイト(このケースでは自サイトからのアクセスのみ)としています。
したがって、自サイトからのページからgetkey.phpにアクセスをした場合
キーの情報が変えるため、その情報を受け取りimage.phpにアクセス許可を申請しています。

if ($key !== $valid_key) {
ここでgetkey.phpから受け取ったキー情報が正しいかを判定しています。
間違った情報の場合はページに「Forbidden」を表示して処理を終了させます。

if (!file_exists($path)) {
画像が存在しない場合は「Not Found」を表示して処理を終了させます。

$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime = finfo_file($finfo, $path);
finfo_close($finfo);
finfo_open:
新しいFileInfoリソースを作成します。
finfo_file:
指定されたファイルについての情報を返します。

header("Content-Type: $mime");
readfile($path);
php側で画像ファイルそのものとして表示します。
header("Content-Type: $mime");
$mine変数で指定された種類の(img/post.png)ということを伝えます。
ブラウザが受け取ったデータを画像として解釈する準備をできることになります。
readfile($path);
サーバー上にあるlocalhost.img/post.pngのファイルを読み込み、
バイナリデータをHTTPレスポンスの本体として出力します。
これによりhtml側ではphp側から送られてきた画像データを受け取り
ブラウザに表示することができます。




戻る

著作権情報
ホームページおよプリ等に掲載されている情報等については、いかなる保障もいたしません。
ホームページおよびアプリ等を通じて入手したいかなる情報も複製、販売、出版または使用させたり、
または公開したりすることはできません。
当方は、ホームページおよびアプリ等を利用したいかなる理由によっての障害等が発生しても、
その結果ホームページおよびアプリ等を利用された本人または他の第三者が被った損害について
一切の責任を負わないものとします。