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.

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
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
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
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.
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.




