Función de seguridad PHP: strip_tags, filter_var, Md5 y sha1

⚔ Resumen inteligente

PHP Security protege las aplicaciones web de atacantes y entradas descuidadas mediante la validación, el saneamiento y el almacenamiento seguro de datos. Este tutorial cubre las principales amenazas y luego muestra strip_tags, filter_var, escapingy el hash de contraseñas moderno con password_hash para protegerse contra XSS, inyección SQL y credenciales robadas.

  • šŸ›”ļø Conozca las amenazas: Los principales riesgos son la inyección SQL, el cross-site scripting y la inyección de código, que generalmente se realizan a travĆ©s de formularios o URL parĆ”metros.
  • 🧹 Etiquetas de tiras: strip_tags elimina HTML, JavaScripts y etiquetas PHP desde la entrada, lo que reduce el riesgo de secuencias de comandos entre sitios almacenadas.
  • āœ… Validar entrada: filter_var valida y desinfecta los datos, confirmando que un valor es del tipo esperado antes de que su código confĆ­e en Ć©l.
  • šŸ”’ Escapar o atar: La función mysqli_real_escape_string escapa la entrada de la consulta, pero las sentencias preparadas parametrizadas son la defensa mĆ”s sólida contra la inyección SQL.
  • šŸ”‘ Cifrado de contraseƱas correcto: Nunca almacene contraseƱas con MD5 o SHA1; utilice password_hash y password_verify, que aplican un algoritmo de hash bcrypt lento y con sal.
  • ???? Defensa en profundidad: Combinar validación, escaparping, HTTPS y cuentas de base de datos con privilegios mĆ­nimos en lugar de depender de un Ćŗnico control.
  • šŸ¤– Asistencia de IA: Las herramientas de IA pueden auditar el código PHP en busca de fallos de seguridad y ayudar a corregir de forma segura una vulnerabilidad de inyección SQL o XSS.

Seguridad PHP

Posibles amenazas a la seguridad

BƔsicamente, existen dos grupos de personas que pueden atacar tu sistema:

  • Hackers: con la intención de obtener acceso a datos no autorizados o interrumpir la aplicación.
  • Los usuarios pueden introducir parĆ”metros erróneos en los formularios sin darse cuenta, lo que puede tener efectos negativos en un sitio web o una aplicación web.

Los siguientes son los tipos de ataques a los que debemos prestar atención.

SQL Injection – este tipo de ataque agrega código daƱino a SQL Declaraciones.

Esto se hace utilizando formularios de entrada de usuario o URLs que utilizan variables.

El código adjunto comenta la condición en la clÔusula WHERE de una sentencia SQL. El código adjunto también puede:

  • inserta una condición que siempre serĆ” verdadera
  • eliminar datos de una tabla
  • actualizar datos en una tabla

Este tipo de ataque suele utilizarse para obtener acceso no autorizado a una aplicación.

Secuencias de comandos entre sitios (XSS) – este tipo de ataque inserta código daƱino, generalmente JavaGuion. Esto se realiza mediante formularios de entrada de usuario, como formularios de contacto y de comentarios. Esto se hace para:

  • Recuperar información confidencial como datos de cookies
  • Redirigir al usuario a una pĆ”gina diferente. URL.

Otras amenazas pueden incluir la inyección de código PHP, la inyección de shell, la inyección de correo electrónico y la divulgación del código fuente de los scripts.

Seguridad de aplicaciones PHP: mejores prƔcticas

Veamos ahora algunas de las mejores prƔcticas de seguridad de PHP que debemos considerar al desarrollar.ping nuestras aplicaciones.

PHP strip_tags

La función strip_tags elimina HTML, JavaScripto etiquetas PHP de una cadena.

Esta función resulta útil cuando necesitamos proteger nuestra aplicación contra ataques como el cross-site scripting.

Consideremos una aplicación que acepta comentarios de los usuarios.

<?php
 
$user_input = "Your site rocks";
 
echo "<h4>My Commenting System</h4>";
 
echo $user_input;
 
?>

Suponiendo que haya guardado comments.php en la carpeta phptuts, navegue hasta la URL http://localhost/phptuts/comments.php

PHP strip_tags

Supongamos que recibe la siguiente entrada de usuario: alert(ā€˜Your site sucks!’);

<?php
 
$user_input = "<script>alert(0);</script>";
 
echo "<h4>My Commenting System</h4>";
 
echo $user_input;
 
?>

Navega hasta el URL http://localhost/phptuts/comments.php

PHP strip_tags

Protejamos ahora nuestra aplicación de este tipo de ataques utilizando la función strip_tags.

<?php
 
$user_input = "<script>alert(0);</script>";
 
echo strip_tags($user_input);
 
?>

Navega hasta el URL http://localhost/phptuts/comments.php

PHP strip_tags

Función PHP filter_var

La función filter_var se utiliza para validar y desinfectar datos.

La validación comprueba si los datos son del tipo correcto. Una verificación de validación numérica de una cadena devuelve un resultado falso.

La desinfección consiste en eliminar caracteres ilegales de una cadena.

Consulte este enlace para obtener la referencia completa: var_filtro

El código que aparece a continuación es para el sistema de comentarios. Utiliza la función filter_var y la constante FILTER_SANITIZE_STRIPPED para eliminar las etiquetas.

<?php
 
$user_input = "<script>alert(0);</script>";
 
echo filter_var($user_input, FILTER_SANITIZE_STRIPPED);
 
?>

Salida:

alert('Your site sucks!');

Nota: FILTER_SANITIZE_STRIPPED (un alias de FILTER_SANITIZE_STRING) estÔ obsoleto desde PHP 8.1. Para código nuevo, utilice strip_tags() o, para una visualización segura, htmlspecialchars().

Cadena de escape real de PHP mysqli

La función mysqli_real_escape_string se utiliza para ayudar a proteger una aplicación contra la inyección SQL.

Supongamos que tenemos la siguiente sentencia SQL para validar el ID de usuario y la contraseƱa.

<?php
SELECT uid,pwd,role FROM users WHERE uid = 'admin' AND password = 'pass';
?>

Un usuario malintencionado puede ingresar ' O 1 = 1 — en el cuadro de texto del ID de usuario y 1234 en el cuadro de texto de la contraseƱa. Vamos a programar el módulo de autenticación.

<?php
 
$uid = "0$uid1$pwd';";
 
echo $sql;
 
?>

El resultado final serĆ”:

SELECT uid,pwd,role FROM users WHERE uid = '' OR 1 = 1 -- ' AND password = '1234';

AQUƍ,

  • ā€œWHERE uid = ā€ā€ comprueba si el ID de usuario estĆ” vacĆ­o.
  • ā€œ' O 1 = 1ā€ es una condición que siempre serĆ” verdadera.
  • ā€œā€“ā€ comenta la parte que comprueba la contraseƱa.

La consulta anterior devolverÔ todos los usuarios. Ahora, usemos la función mysqli_real_escape_string para proteger nuestro módulo de inicio de sesión. Tenga en cuenta que, en el código real, esta función toma la conexión a la base de datos como primer argumento.

<?php
 
$uid = mysqli_real_escape_string($conn, "0$uid1$pwd';";
 
echo $sql;
 
?>

El código anterior generarÔ la siguiente salida:

SELECT uid,pwd,role FROM users WHERE uid = '\' OR 1 = 1 -- ' AND password = '1234';

Nota: la segunda comilla simple se ha escapado, por lo que se tratarƔ como parte del ID de usuario y la contraseƱa no se comentarƔ.

Mejores prÔcticas: ceboping Si bien ayuda, las sentencias preparadas parametrizadas en mysqli o PDO son la defensa recomendada contra la inyección SQL, ya que los datos nunca se mezclan con el texto de la consulta.

PHP Md5 y PHP sha1

MD5 es el acrónimo de Message Digest 5, y SHA1 es el acrónimo de Secure Hash Algorithm 1. Ambas son funciones hash unidireccionales.

El código que aparece a continuación muestra la implementación de md5 y sha1.

<?php
echo "MD5 Hash: " . md5("password");
echo "SHA1 Hash: " . sha1("password");
?>

Suponiendo que haya guardado el archivo hashes.php en la carpeta phptuts, navegue hasta el URL.

PHP Md5 y PHP sha1

Importante: MD5 y SHA1 son hashes rÔpidos y sin sal y son Ya no se considera seguro para almacenar contraseñas., porque pueden ser descifradas rÔpidamente con hardware moderno y tablas arcoíris. Úselas solo para sumas de verificación que no sean de seguridad y utilice el método que se describe a continuación para las contraseñas.

Cómo cifrar contraseñas de forma segura en PHP

Para el almacenamiento de contraseñas, PHP proporciona las funciones password_hash y password_verify. Estas aplican un algoritmo lento y con sal (bcrypt por defecto), por lo que cada hash es único y difícil de descifrar, incluso si roban la base de datos.

<?php
// Hash a password before storing it in the database
$hash = password_hash("mypassword", PASSWORD_DEFAULT);
 
// Verify the password when the user logs in
if (password_verify("mypassword", $hash)) {
    echo "Password is valid";
} else {
    echo "Invalid password";
}
?>
  • contraseƱa_hash() genera un hash con sal para almacenar en la base de datos; PASSWORD_DEFAULT mantiene el algoritmo recomendado actual.
  • verificar_contraseƱa() Comprueba un intento de inicio de sesión comparĆ”ndolo con el hash almacenado sin descifrarlo nunca.

Dado que la sal y el algoritmo se almacenan dentro del hash, nunca tienes que gestionarlos tú mismo, lo que convierte a este método en la forma correcta y a prueba de futuro de gestionar contraseñas en PHP.

Preguntas Frecuentes

Utilice sentencias preparadas con parƔmetros vinculados en mysqli o PDO. Estas envƭan la consulta y los datos por separado, por lo que la entrada del usuario nunca puede cambiar la estructura de la consulta. Esto es mƔs seguro que el escaneo manual.ping entrada.

strip_tags elimina por completo las etiquetas HTML y PHP, mientras que htmlspecialchars las convierte en entidades seguras para que se muestren como texto. Para la salida escaping Frente a XSS, htmlspecialchars suele ser la opción mÔs segura.

Genera un token CSRF único por sesión, insértalo como un campo oculto en cada formulario y verifícalo al enviarlo. Rechaza cualquier solicitud cuyo token falte o no coincida con el valor almacenado.

Sí. La IA puede detectar inyecciones SQL, XSS, cifrado de contraseñas inseguro y manejo de archivos inseguro, explicar cada riesgo y sugerir una solución. Considérelo como una primera aproximación útil, no como un sustituto de una revisión de seguridad.

Sí. Pegue el código vulnerable y la IA puede reescribirlo con sentencias preparadas, salida escapingy validación de entrada. Pruebe el código corregido y confirme la corrección comparÔndolo con la entrada de ataque original.

Resumir este post con: