phpsafe 𝕏 GitHub
公式CA 421DTkQ3TSG3n7F9SkNZj9NxvdFGbypwkctPd2uupump 公式アドレスはこちらのみです。

変数で組み立てたSQL(SQLインジェクション)

深刻度: 致命的 CWE-89 OWASP A03:2021 Injection rule: sql

なぜ危険か

入力をSQLに直接連結すると、攻撃者がクエリ自体を書き換え、データベースのあらゆるデータを読み取り・変更・削除できます。プリペアドステートメントはクエリと値を別々に送るため、入力がSQLになることはありません。

✕ 脆弱なコード
$id = $_GET['id'];
$rows = $db->query("SELECT * FROM users WHERE id = $id");
✓ 安全なコード
$stmt = $db->prepare('SELECT * FROM users WHERE id = ?');
$stmt->execute([$_GET['id']]);
$rows = $stmt->fetchAll();

対策

プリペアドステートメントを使用:$db->prepare('... WHERE id = ?') の後 execute([$id])。

コードを検査する

ファイルを貼り付けると、このルールに該当する行をすべて示します。

コードを検査する →