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

Posibles amenazas a la seguridad

Son básicamente dos grupos de personas que pueden atacar su sistema.

  • Hackers: con la intención de obtener acceso a datos no autorizados o interrumpir la aplicación.
  • Usuarios: pueden ingresar inocentemente parámetros incorrectos en formularios que pueden tener efectos negativos en un sitio web o aplicación web.

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

SQL Injection – Este tipo de ataque añade código dañino a SQL Declaraciones.

Esto se hace mediante formularios de entrada del usuario o URL que utilizan variables.

El código adjunto comenta la condición en la cláusula WHERE de una declaración 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 – este tipo de ataque inserta código dañino generalmente JavaScript. Esto se hace 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 URL diferente.
  • Otras amenazas pueden incluir: inyección de código PHP, inyección de shell, inyección de correo electrónico, divulgación del código fuente de un script, etc.

Seguridad de aplicaciones PHP: mejores prácticas

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

PHP strip_tags

Las funciones strip_tags eliminan HTML, JavaGuión o etiquetas PHP de una cadena.

Esta función es útil cuando tenemos que proteger nuestra aplicación contra ataques como 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, busque la URLhttp://localhost/phptuts/comments.php

PHP strip_tags

Supongamos que recibe lo siguiente como entrada del usuario alert(‘Your site sucks!’);

<?php

$user_input = "<script>alert('Your site sucks!');</script>";

echo "<h4>My Commenting System</h4>";

echo $user_input;

?>

Navegar a la URL http://localhost/phptuts/comments.php

PHP strip_tags

Ahora protejamos nuestra aplicación de tales ataques usando la función strip_tags.

<?php

$user_input = "<script>alert('Your site sucks!');</script>";

echo strip_tags($user_input);

?>

Navegar a la 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 es para el sistema de comentarios.

Utiliza la función filter_var y la constante FILTER_SANITIZE_STRIPPED para quitar etiquetas.

<?php

$user_input = "<script>alert('Your site sucks!');</script>";

echo filter_var($user_input, FILTER_SANITIZE_STRIPPED);

?>

Salida:

alert('Your site sucks!');

Función mysqli_real_escape_string Esta función se utiliza para proteger una aplicación contra la inyección SQL.

Supongamos que tenemos la siguiente declaración 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 introducir el siguiente código en el cuadro de texto de identificación del usuario. O 1 = 1 — Y 1234 en el cuadro de texto de la contraseña Codifiquemos el módulo de autenticación

<?php

$uid = "' OR 1 = 1 -- ";

$pwd = "1234";

$sql = "SELECT uid,pwd,role FROM users WHERE uid = '$uid' AND password = '$pwd';";

echo $sql;

?>

El resultado final será

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

AQUÍ,

  • “SELECCIONAR * DE usuarios DONDE user_id = ”” prueba una identificación de usuario vacía
  • “' OR 1 = 1 “ es una condición que siempre será cierta
  • “–” comenta la parte que prueba la contraseña.

La consulta anterior devolverá todos los usuarios. Usemos ahora la función mysqli_real_escape_string para proteger nuestro módulo de inicio de sesión.

<?php

$uid = mysqli_real_escape_string("' OR 1 = 1 -- ");

$pwd = mysqli_real_escape_string("1234");

$sql = "SELECT uid,pwd,role FROM users WHERE uid = '$uid' AND password = '$pwd';";

echo $sql;

?>

El código anterior saldrá

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

Nota: La segunda comilla simple se nos ha escapado, se tratará como parte de la identificación del usuario y la contraseña no se comentará.

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.

Ambos se utilizan para cifrar cadenas.

Una vez que se ha cifrado una cadena, resulta tedioso descifrarla.

Md5 y sha1 son muy útiles a la hora de almacenar contraseñas en la base de datos.

El siguiente código 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, busque la URL

PHP Md5 y PHP sha1

Como puede ver en los hashes anteriores, si un atacante obtuviera acceso a su base de datos, aún no sabría las contraseñas para iniciar sesión.

Resumen

  • La seguridad se refiere a las medidas implementadas para proteger una aplicación de ataques accidentales y maliciosos.
  • La función strip_tags se utiliza para eliminar etiquetas como de los datos de entrada
  • La función filter_var valida y php desinfecta los datos de entrada
  • mysqli_real_escape_string se utiliza para sanear las sentencias SQL. Elimina caracteres maliciosos de las sentencias.
  • Tanto MD5 como SHA1 se utilizan para cifrar la contraseña.