PHP によるログ記録 API の仕組みと実装解説
本記事では,PHP で記述されたログ記録 API の処理内容を技術的観点から解説する。本 API は,クライアントから送信される JSON データを受信し,データベースへ安全に記録する役割を担う。
主な処理は,CORS 設定,POST データの検証,プリペアドステートメントによる SQL 実行,JSON 応答の返却で構成される。
CORS 設定
外部オリジンから API を呼び出す場合,ブラウザは CORS (Cross-Origin Resource Sharing) 制限を適用する。
本 API では,以下のヘッダを付与することで,特定オリジンからのアクセスのみを許可している。
Access-Control-Allow-Origin:許可するオリジンを限定する。Access-Control-Allow-Methods:POST,GET,OPTIONS を許可する。Access-Control-Allow-Headers:Content-Type を許可する。Access-Control-Allow-Credentials:認証情報の送信を許可する。
ブラウザは本リクエスト前に OPTIONS(プリフライト)を送信するため,OPTIONS リクエストの場合は即終了している。
(参考)CROS 制限の概要
CORS(Cross-Origin Resource Sharing)とは,Web ブラウザが実装しているオリジン間アクセス制御の仕組みである。
オリジンとは,プロトコル(http/https),ドメイン,ポート番号の組み合わせであり,これらが異なる場合は「別オリジン」とみなされる。
ブラウザはセキュリティ上の理由から,別オリジンへのリクエストに対してアクセス制限(Same-Origin Policy)を適用する。
この制限を緩和し,安全に外部オリジンへアクセスするための仕組みが CORS である。
POST データの受信と検証
JSON データの取得
php://input から生の POST ボディを読み取り,json_decode により連想配列へ変換する。
これにより,クライアント側の fetch API や XMLHttpRequest から送信された JSON を確実に取得できる。
データ形式チェック
受信したデータが配列でない場合,HTTP 400 を返して処理を終了する。
このチェックにより,不正なデータ形式や攻撃的な入力を早期に排除できる。
データ抽出とデフォルト値
受信した JSON から必要な項目を抽出し,欠損時にはデフォルト値を設定する。
これにより,クライアント実装の差異やデータ欠損に対する堅牢性が向上する。
$timestamp:サーバ側で生成する記録時刻。$action:ユーザ操作の種類。$url:操作が行われたページ。$questionID:問題番号など。$userAnswer:ユーザ回答。$correctAnswer:正答。$appName:アプリ名。$appVersion:アプリバージョン。
SQL クエリの準備と実行
本 API は $conn->prepare() を用いてプリペアドステートメントを生成している。
これは,SQL インジェクション対策として極めて重要である。
bind_param("ssssiiss", ...) の型指定は以下の意味である。
- s:string
- i:integer
型の並びはテーブル kouji2 のカラム順に対応している。
クエリ実行と応答生成
$stmt->execute() の結果に応じて,成功時は {"status":"success"} を返し,失敗時は HTTP 500 とともにエラーメッセージを返す。これにより,クライアント側は API の成否を確実に判定できる。
ステートメントと接続の終了処理
処理終了後,ステートメントとデータベース接続を確実に閉じることで,リソースリークを防止している。
最後に Content-Type: application/json を付与して JSON 応答を返却する。
本 API の評価と改善案
- CORS 設定が適切であり,特定オリジンのみ許可している点は安全性が高い。
- プリペアドステートメントを使用しており,SQL インジェクション対策が施されている。
- データ欠損に対してデフォルト値を設定しており,堅牢性が高い。
- HTTP ステータスコードを適切に返しており,API としての品質が良い。
改善の余地
- 例外処理(try-catch)を導入することで,エラー時の情報をより詳細に取得できる。
- 入力値の追加バリデーション(数値チェック,文字列長チェックなど)を行うと安全性が向上する。
- 必要に応じて CSRF (Cross-Site Request Forgery) 対策を導入する。

“PHP によるログ記録 API の仕組みと実装解説” に対して1件のコメントがあります。