以下に、コンタクトフォームでのSQLインジェクション攻撃を防ぐためのいくつかの対策方法とコード例を示します。
-
パラメータ化されたクエリの使用: SQLクエリのパラメータ化は、入力データを直接クエリに埋め込むのではなく、パラメータとして渡す方法です。これにより、不正なコードが実行される可能性を低減できます。
例:
$sql = "SELECT * FROM users WHERE username = ?"; $stmt = $pdo->prepare($sql); $stmt->execute([$username]);
-
入力データの検証とエスケープ: 入力データを検証し、予期しない文字や特殊文字をエスケープすることで、SQLインジェクション攻撃を防ぐことができます。
例:
$username = mysqli_real_escape_string($conn, $_POST['username']); $password = mysqli_real_escape_string($conn, $_POST['password']);
-
ホワイトリストの使用: 入力データのホワイトリストを作成し、許可された文字やパターンのみを受け入れるようにします。これにより、不正な入力を排除することができます。
例:
$allowed_chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; if (preg_match('/^[a-zA-Z]+$/', $username)) { // ホワイトリストに合致する場合の処理 } else { // 不正な入力の場合の処理 }
これらの対策を組み合わせることで、コンタクトフォームのSQLインジェクション攻撃リスクを最小限に抑えることができます。しかし、セキュリティ対策は常に最新の推奨事項に基づいて更新することが重要です。