PHP アプリケーションを保護するには、SQL インジェクション、クロスサイト スクリプティング (XSS)、クロスサイト リクエスト フォージェリ (CSRF)、セッション ハイジャック、ファイル インクルードなどの一般的な脆弱性からアプリケーションを保護する必要があります。攻撃します。ここでは、PHP アプリケーションを保護する方法を理解するのに役立つ、部分ごとの説明を含む実践的な例を示します。
SQL インジェクションは、攻撃者が悪意のある SQL ステートメントをクエリに挿入できる場合に発生します。これを回避するには、パラメータ化されたクエリでプリペアド ステートメントを使用します。
例:
<?php // Insecure version $user_id = $_GET['id']; $query = "SELECT * FROM users WHERE id = '$user_id'"; $result = mysqli_query($connection, $query); // Secure version $user_id = $_GET['id']; $stmt = $connection->prepare("SELECT * FROM users WHERE id = ?"); $stmt->bind_param("i", $user_id); // "i" for integer $stmt->execute(); $result = $stmt->get_result(); ?>
説明:
XSS は、攻撃者が他のユーザーが閲覧している Web ページに悪意のあるスクリプトを挿入するときに発生します。これを回避するには、常に出力をサニタイズしてエンコードします。
例:
<?php // Insecure version echo "<p>Welcome, " . $_GET['username'] . "</p>"; // Secure version echo "<p>Welcome, " . htmlspecialchars($_GET['username'], ENT_QUOTES, 'UTF-8') . "</p>"; ?>
説明:
CSRF は、攻撃者がユーザーを騙して知らないうちにサイト上でアクションを実行させるときに発生します。 トークンを使用して、CSRF から保護します。
例:
<?php // Generate CSRF token session_start(); if (empty($_SESSION['csrf_token'])) { $_SESSION['csrf_token'] = bin2hex(random_bytes(32)); } // Add token to form echo '<form method="POST" action="submit.php">'; echo '<input type="hidden" name="csrf_token" value="' . $_SESSION['csrf_token'] . '">'; echo '<input type="text" name="data">'; echo '<input type="submit" value="Submit">'; echo '</form>'; ?>
submit.php:
<?php session_start(); if ($_POST['csrf_token'] !== $_SESSION['csrf_token']) { die("CSRF token validation failed."); } // Process form data $data = $_POST['data']; ?>
説明:
セッションのハイジャックを避けるためにセッションを保護します。これには、厳密なセッション構成の設定とセッション ID の再生成が含まれます。
例:
<?php session_start(); // Regenerate session ID to avoid fixation attacks session_regenerate_id(true); // Configure secure session parameters ini_set('session.cookie_httponly', 1); // Prevent JavaScript access to session cookies ini_set('session.cookie_secure', 1); // Ensure cookies are sent over HTTPS ini_set('session.use_strict_mode', 1); // Prevent accepting uninitialized session IDs // Set session timeout $_SESSION['LAST_ACTIVITY'] = time(); // update last activity time if (time() - $_SESSION['LAST_ACTIVITY'] > 1800) { // 30 minutes timeout session_unset(); session_destroy(); session_start(); } ?>
説明:
無制限にファイルをアップロードすると、悪意のあるファイルがアップロードされて実行される可能性があります。常にファイルの種類を検証し、安全に保存してください。
例:
<?php // Insecure version $user_id = $_GET['id']; $query = "SELECT * FROM users WHERE id = '$user_id'"; $result = mysqli_query($connection, $query); // Secure version $user_id = $_GET['id']; $stmt = $connection->prepare("SELECT * FROM users WHERE id = ?"); $stmt->bind_param("i", $user_id); // "i" for integer $stmt->execute(); $result = $stmt->get_result(); ?>
説明:
CSP ヘッダーは、リソースのロード元を制限することで、XSS およびデータ インジェクション攻撃の防止に役立ちます。
例 (.htaccess ファイルまたはサーバー構成に追加):
<?php // Insecure version echo "<p>Welcome, " . $_GET['username'] . "</p>"; // Secure version echo "<p>Welcome, " . htmlspecialchars($_GET['username'], ENT_QUOTES, 'UTF-8') . "</p>"; ?>
説明:
入力検証とサニタイズを使用して、さまざまな種類のインジェクションを防止します。
例:
<?php // Generate CSRF token session_start(); if (empty($_SESSION['csrf_token'])) { $_SESSION['csrf_token'] = bin2hex(random_bytes(32)); } // Add token to form echo '<form method="POST" action="submit.php">'; echo '<input type="hidden" name="csrf_token" value="' . $_SESSION['csrf_token'] . '">'; echo '<input type="text" name="data">'; echo '<input type="submit" value="Submit">'; echo '</form>'; ?>
説明:
これらのメソッドを実装すると、PHP アプリケーションが一般的な脆弱性からより適切に保護されます。最新のベスト プラクティスを常に把握し、コードにセキュリティ対策を一貫して適用することが重要です。
@ LinkedIn に連絡して、私のポートフォリオをチェックしてください。
私の GitHub プロジェクトにスターを付けてください ⭐️
以上がPHP アプリケーションを一般的な脆弱性から保護するための重要なセキュリティ対策の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。