Avatar ·

PDO prepared statements são suficientes para proteção contra SQL injection?

Olá a todos! Sou um desenvolvedor PHP iniciante e estou tentando entender a segurança ao trabalhar com bancos de dados. Li muitos artigos que dizem que PDO e prepared statements são a bala de prata contra SQL injection. Mas algumas coisas me deixam confuso. Aqui está um exemplo do meu código: ```php $pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass'); $stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username"); $stmt->execute([':username' => $_GET['username']]); $user = $stmt->fetch(); ``` Acho que isso é seguro, pois estou usando placeholders. Mas depois vi este código em um projeto antigo: ```php $pdo->query("SELECT * FROM users WHERE id = " . $_GET['id']); ``` E fiquei curioso: e se eu acidentalmente esquecer de usar prepared statements em algum lugar? Ou se eu usar PDO, mas configurar incorretamente a emulação de prepared statements? Um atacante poderia contornar a proteção do PDO? Também ouvi falar sobre consultas dinâmicas