PHP/セキュリティ
表示
< PHP
セキュリティ
[編集]入力値の検証とサニタイズ
[編集]PHPではユーザーからの入力を必ず検証し、必要に応じてサニタイズする必要があります。
以下は、filter_input
を使用して入力値を検証する例です。
<?php // GETパラメータ "email" を検証 $email = filter_input(INPUT_GET, 'email', FILTER_VALIDATE_EMAIL); if ($email === false) { echo "無効なメールアドレスです。"; } else { echo "有効なメールアドレス: " . htmlspecialchars($email, ENT_QUOTES, 'UTF-8'); } ?>
CSRF対策
[編集]CSRF対策としてトークンを利用する方法を示します。
<?php session_start(); // トークン生成 if (empty($_SESSION['csrf_token'])) { $_SESSION['csrf_token'] = bin2hex(random_bytes(32)); } // フォーム表示 echo '<form method="POST">'; echo '<input type="hidden" name="csrf_token" value="' . $_SESSION['csrf_token'] . '">'; echo '<input type="submit" value="送信">'; echo '</form>'; // トークン検証 if ($_SERVER['REQUEST_METHOD'] === 'POST') { if (hash_equals($_SESSION['csrf_token'], $_POST['csrf_token'])) { echo "トークン検証成功"; } else { echo "トークン検証失敗"; } } ?>
SQLインジェクション対策
[編集]PDOを利用した安全なクエリ実行例です。
<?php $pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'password'); // プリペアドステートメントで安全にデータを挿入 $stmt = $pdo->prepare('SELECT * FROM users WHERE email = :email'); $stmt->execute(['email' => $_GET['email']]); $user = $stmt->fetch(); ?>