Busqueda Segura PROTEGIDO
Busqueda: <img src=x onerror=alert('XSS')>
BLOQUEADO
Intento de injection detectado pero NEUTRALIZADO
El payload se busco literalmente en la base de datos. No hay clientes llamados "
El payload se busco literalmente en la base de datos. No hay clientes llamados "
<img src=x onerror=alert('XSS')>".
Como se proceso tu input
Tu input:
<img src=x onerror=alert('XSS')>
Query preparada (placeholder):
SELECT * FROM clients WHERE name LIKE ?
Valor del placeholder (escapado por PDO):
%<img src=x onerror=alert('XSS')>%
PDO escapa automaticamente el valor. Los caracteres especiales como '
se tratan como texto literal, no como SQL.
No se encontraron clientes con "<img src=x onerror=alert('XSS')>"
(El payload de injection se busco literalmente - por eso no hay resultados)
(El payload de injection se busco literalmente - por eso no hay resultados)
Diferencias clave con la version vulnerable
buscar.php (VULNERABLE)
// Concatenacion directa = PELIGRO
$q = "SELECT * FROM clients
WHERE name LIKE '%" . $_GET['q'] . "%'";
$conn->query($q);
// Sin escapar = XSS
echo $row['name'];
buscar_secure.php (SEGURO)
// Prepared statement = SEGURO
$stmt = $pdo->prepare("SELECT * FROM clients
WHERE name LIKE ?");
$stmt->execute(['%' . $q . '%']);
// Escapado = Sin XSS
echo htmlspecialchars($row['name']);
Regla de oro:
Nunca concatenes input del usuario directamente en SQL.
Siempre usa prepared statements (PDO o mysqli con bind_param).