Seguridad en PHP: Lo Esencial
La seguridad debe ser una prioridad desde el primer día de desarrollo. Aquí te presento las vulnerabilidades más comunes y cómo prevenirlas.
1. SQL Injection
Nunca concatenes directamente valores de usuario en queries SQL.
// ❌ MAL - Vulnerable a SQL Injection
$query = "SELECT * FROM users WHERE email = "" . $_POST["email"] . """;
// ✅ BIEN - Usar prepared statements
$stmt = $pdo->prepare("SELECT * FROM users WHERE email = ?");
$stmt->execute([$_POST["email"]]);
2. XSS (Cross-Site Scripting)
Escapa siempre la salida HTML.
// ❌ MAL
echo $user_input;
// ✅ BIEN
echo htmlspecialchars($user_input, ENT_QUOTES, "UTF-8");
3. CSRF (Cross-Site Request Forgery)
Usa tokens CSRF en formularios:
// Generar token
$_SESSION["csrf_token"] = bin2hex(random_bytes(32));
// Validar token
if (!hash_equals($_SESSION["csrf_token"], $_POST["csrf_token"])) {
die("CSRF token inválido");
}
Checklist de Seguridad
- ✓ Usar prepared statements
- ✓ Validar y sanitizar inputs
- ✓ Escapar outputs
- ✓ Implementar tokens CSRF
- ✓ Usar HTTPS
- ✓ Hashear passwords con bcrypt/argon2
- ✓ Mantener PHP actualizado
La seguridad es un proceso continuo, no un estado final.