Seguridad en Aplicaciones PHP: Guía Esencial

La Seguridad No Es Opcional

La seguridad web es fundamental. PHP alimenta más del 77% de los sitios web, lo que lo convierte en un objetivo frecuente de ataques.

1. Prevenir SQL Injection

// ❌ PELIGROSO
$sql = "SELECT * FROM usuarios WHERE email = '" . $_POST["email"] . "'";

// ✅ SEGURO con Prepared Statements
$stmt = $pdo->prepare("SELECT * FROM usuarios WHERE email = :email");
$stmt->execute([":email" => $_POST["email"]]);

2. Prevenir XSS (Cross-Site Scripting)

// ❌ PELIGROSO
echo $_GET["nombre"];

// ✅ SEGURO
echo htmlspecialchars($_GET["nombre"], ENT_QUOTES, "UTF-8");

3. Protección CSRF

// Generar token
$_SESSION["csrf_token"] = bin2hex(random_bytes(32));

// Verificar token
if ($_POST["csrf_token"] !== $_SESSION["csrf_token"]) {
    die("Token CSRF inválido");
}

4. Hashing de Contraseñas

// Hashear (nunca usar md5 o sha1)
$hash = password_hash("mi_password", PASSWORD_DEFAULT);

// Verificar
if (password_verify($input_password, $hash)) {
    echo "Contraseña correcta";
}

5. Validación de Entrada

// Filtrar email
$email = filter_var($_POST["email"], FILTER_VALIDATE_EMAIL);
if (!$email) die("Email inválido");

// Filtrar entero
$edad = filter_var($_POST["edad"], FILTER_VALIDATE_INT, [
    "options" => ["min_range" => 1, "max_range" => 120]
]);

6. Headers de Seguridad

header("X-Content-Type-Options: nosniff");
header("X-Frame-Options: DENY");
header("X-XSS-Protection: 1; mode=block");
header("Content-Security-Policy: default-src 'self'");

Conclusión

La seguridad es un proceso continuo. Aplica estas prácticas desde el inicio de tus proyectos y mantente actualizado sobre nuevas vulnerabilidades.

🤖 Asistente Virtual
¡Hola! 👋

¿En qué te puedo ayudar hoy?