プレースホルダ

対象の脆弱性:SQL インジェクション

ハッカーは Web アプリケーションに対して、不正なパラメータを送信し、攻撃を行います。
攻撃にはデータベースとの通信部に対して、攻撃を行うものがあります。 それらの攻撃に特に有効なのがプレースホルダです。


プレースホルダとは

プレースホルダを利用すると、SQL 文を安全に組みてることができます。 SQL の構造をパラメータの値を分けて扱うことで、SQL インジェクション攻撃を防ぎます。※

ユーザの入力が SQL 文に含まれるときは、プレースホルダを利用しましょう。

実装例

危険な例

ユーザの入力を文字列を用意した文字列と連結させ、SQL 文を生成させています。これは危険なことです。

/**
 * userのID(これは記載外でユーザが入力するものとする)から
 * userのnameを取り出すSQLを生成するコード
 * user_id: ユーザのID
 **/

// 文字列の連結によってSQL文を生成している。
$sql = "SELECT name FROM users WHERE id = '" . $user_id . "'";
$count = $pdo->exec($sql);

プレースホルダを利用した例

SQL の構造を定義下後にパラメータを与えることで、SQL 文を安全に組みたてています。

/**
 * userのID(これは記載外でユーザが入力するものとする)から
 * userのnameを取り出すSQLを生成するコード
 * user_id: ユーザのID
 **/
$stmt = $pdo->prepare('SELECT name FROM users WHERE id = ?');

$stmt->bindValue($user_id ,$price,PDO::PARAM_INT);
$stmt->execute();