SqlInjection

ユーザー入力がSQLクエリに直接連結される場合に検出されます。

<?php
class UserResource extends ResourceObject
{
    public function __construct(private PDO $pdo) {}

    public function onGet(string $id): static
    {
        // 脆弱: 文字列連結によるSQLインジェクション
        $sql = "SELECT * FROM users WHERE id = '" . $id . "'";
        $this->body = $this->pdo->query($sql)->fetchAll();

        return $this;
    }
}

修正方法

プリペアドステートメントとバインドパラメータを使用してください:

<?php
class UserResource extends ResourceObject
{
    public function __construct(private PDO $pdo) {}

    public function onGet(string $id): static
    {
        // 安全: プリペアドステートメント
        $stmt = $this->pdo->prepare("SELECT * FROM users WHERE id = :id");
        $stmt->execute(['id' => $id]);
        $this->body = $stmt->fetchAll();

        return $this;
    }
}

Aura.SqlQueryやDoctrine DBALなどのクエリビルダも自動的にエスケープを処理します。