Desinfectar la entrada en PHP

Shraddha Paghdar 30 enero 2023
PHP
  1. Desinfección de entrada HTML usando htmlentities() en PHP
  2. Desinfección de entrada HTML usando filter_var() en PHP
  3. Sanitización de consultas SQL en PHP
Desinfectar la entrada en PHP

Los datos del usuario deben almacenarse en la base de datos, pero antes de almacenarlos en la base de datos, debemos asegurarnos de que no se transfieran datos con formato incorrecto; de lo contrario, arruinará la base de datos. Esto protegerá la integridad de los datos. Los usuarios a menudo se confunden entre la desinfección y la validación. La única diferencia entre ellos es que la validación asegura que los datos estén en el formato correcto o no, mientras que luego se asegura de que no haya ningún carácter ilegal en los datos. En la publicación de hoy, aprenderemos cómo desinfectar los datos de entrada en PHP antes de pasarlos a la base de datos (RDBMS / NoSQL).

La entrada más común que necesita ser desinfectada es HTML, entrada a través de consultas SQL e información de perfil de usuario.

Desinfección de entrada HTML usando htmlentities() en PHP

Es una función incorporada proporcionada por PHP que convierte todos los caracteres en entidades HTML. También puede utilizar htmlspecialchars(), la única diferencia entre estas dos funciones es que htmlspecialchars() convierte los caracteres especiales en entidades HTML mientras que htmlentities() convierte todos los caracteres.

Sintaxis de htmlentities() en PHP

htmlentities(string $string, $flags, $characterSet, boolean $doubleEncode);

Parámetros

  • $string: Es un parámetro obligatorio, que toma datos de entrada sobre los que se debe realizar la conversión.
  • $flags: es un parámetro opcional que especifica cómo manejar la codificación no válida, las comillas y el tipo de documento utilizado. Algunas de las banderas son ENT_COMPAT, ENT_IGNORE, ENT_HTML5, ENT_NOQUOTES, etc.
  • $characterSet: Es un parámetro opcional que especifica qué juego de caracteres usar. Algunos de los conjuntos de caracteres son UTF-8, ISO-8859-1, etc.
  • doubleEncode: es un parámetro opcional que especifica si codificar las entidades HTML existentes o no. El valor predeterminado será true, que convertirá todo.

Valor devuelto

La salida de la función anterior contiene una cadena convertida. Devolverá una cadena vacía si el parámetro de cadena contiene una codificación no válida a menos que se establezcan indicadores como ENT_IGNORE o ENT_SUBSTITUTE.

Código de ejemplo:

<?php
    $str = '<a href="https://www.google.com">Go to google.com</a>';
    echo htmlentities($str);
?>

Producción :

&lt;a href=&quot;https://www.google.com&quot;&gt;Go to google.com&lt;/a&gt;

Desinfección de entrada HTML usando filter_var() en PHP

Es una función incorporada proporcionada por PHP en la que la validación y la desinfección se realizan en los datos de entrada.

Sintaxis de filter_var() en PHP

filter_var($inputValue, $filterType);

Parámetros

  • $inputValue: Es un parámetro obligatorio, que toma datos de entrada sobre los que se aplicará la verificación del filtro.
  • $filterType: es un parámetro obligatorio, que especifica qué verificación de filtro se realizará en los datos de entrada. Los valores admitidos son:
    • FILTER_VALIDATE_INT: Si los datos de entrada son un entero válido o no.
    • FILTER_SANITIZE_STRING: si los datos de entrada son una cadena válida o no y elimine todas las etiquetas HTML de una cadena de entrada.
    • FILTER_VALIDATE_IP: Si los datos de entrada son una dirección IP válida o no.
    • FILTER_SANITIZE_EMAIL: si los datos de entrada son una dirección de correo electrónico válida o no. Filter var eliminará primero los caracteres ilegales y luego se realizará la validación.

Valor devuelto

Devuelve el valor filtrado si se aprueba correctamente.

Código de ejemplo:

<?php
    $inputString = "<p>Hello World! Welcome to PHP tutorial</p>";
    $newstr = filter_var($inputString, FILTER_SANITIZE_STRING);
    echo $newstr. "\n";
?>

Producción :

Hello World! Welcome to PHP tutorial

Sanitización de consultas SQL en PHP

Para evitar la inyección de SQL, los desarrolladores siempre deben usar PDO/MySQLi. PDO es una capa de abstracción de la base de datos. PDO desinfecta e incrusta datos externos en una consulta SQL de forma segura y evita el tipo de problemas. Antes de enviar datos a la base de datos, procese los datos usando filter_var().

Código de ejemplo:

<?php
    $servername = "hostname";
    $username = "username";
    $password = "password";
    $dbname = "databaseName";
    $lastname = "doe";

    $connection = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    $connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $statement = $connection->prepare("SELECT id, email, firstname, lastname FROM Users WHERE lastname=:lastname");
    $statement->execute(['lastname' => $lastname]);

    $resultOuput = $statement->setFetchMode(PDO::FETCH_ASSOC);
?>
Shraddha Paghdar avatar Shraddha Paghdar avatar

Shraddha is a JavaScript nerd that utilises it for everything from experimenting to assisting individuals and businesses with day-to-day operations and business growth. She is a writer, chef, and computer programmer. As a senior MEAN/MERN stack developer and project manager with more than 4 years of experience in this sector, she now handles multiple projects. She has been producing technical writing for at least a year and a half. She enjoys coming up with fresh, innovative ideas.

LinkedIn