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.