Saltar a contenido

Seguridad en el desarrollo de aplicaciones PHP

La seguridad en aplicaciones web va mucho más allá de asegurar que las contraseñas sean fuertes. En este apartado, abordamos cómo mejorar la seguridad tanto del lado del cliente como del servidor, mediante la validación y limpieza de datos, además de técnicas para el manejo seguro de contraseñas.

Mejor prevenir que curar (en cliente y en servidor)

Validación: asegurarse de que los datos sean válidos

Es fundamental validar los datos ingresados por el usuario para evitar que sean incorrectos o malintencionados. La validación de datos ayuda a prevenir una serie de ataques, como la inyección de SQL o la inyección de scripts.

  • Usar expresiones regulares para validar: Las expresiones regulares, estudiadas en el módulo profesional de Programación, son muy útiles para asegurarse de que los datos cumplan con un formato específico, como un correo electrónico, un nombre o un número de teléfono. Función PHP relevante:

    • preg_match: verifica si una cadena cumple con el patrón definido en la expresión regular.

      Ejemplo de validación de nombre con solo letras y espacios:
      if (preg_match("/^[a-zA-Z ]*$/", $name)) {
          // El nombre es válido
      }
      

Limpieza: eliminar posibles problemas con los datos

Limpiar los datos es esencial para eliminar cualquier contenido malicioso que pueda comprometer la seguridad de la aplicación, como los intentos de inyección de código (XSS).

  • Eliminar marcas HTML: La limpieza del contenido evita que los datos introducidos por el usuario contengan código HTML o JavaScript malicioso. Funciones PHP relevantes:

    • htmlentities: convierte los caracteres especiales en entidades HTML.

      $clean_input = htmlentities($input);
      
      * htmlspecialchars: convierte los caracteres especiales en su forma de entidades HTML, lo que ayuda a prevenir ataques XSS.

      $clean_input = htmlspecialchars($input, ENT_QUOTES, 'UTF-8');
      
  • Uso de funciones de filtrado para cualquier variable: Aplicar filtros a las variables antes de procesarlas es otra técnica de seguridad importante. Estas funciones permiten asegurarse de que los datos son del tipo esperado y cumplen con los requisitos establecidos. Función PHP relevante:

    • filter_var: filtra y valida una variable. Dependiendo del filtro elegido, puede sanitizar o validar datos.

      Sanitizar

      En informática, sanitizar significa limpiar o filtrar datos de entrada para asegurarse de que no contengan elementos maliciosos o inesperados. Este proceso es esencial para evitar vulnerabilidades como inyecciones SQL, cross-site scripting (XSS) u otros ataques que pueden comprometer la seguridad de una aplicación.

      Por ejemplo, si un usuario introduce código malicioso en un formulario web, al sanitizar ese dato se eliminan o neutralizan los caracteres peligrosos antes de procesarlos o almacenarlos. De esta forma, se protegen tanto los sistemas como los datos de otros usuarios.

      Ejemplo de sanitización de un correo electrónico:
      $clean_email = filter_var($email, FILTER_SANITIZE_EMAIL);
      
      Ejemplo de validación de un número de edad en un rango específico
      $options = array(
          'options' => array(
              'min_range' => 1,
              'max_range' => 18
          )
      );
      $age = filter_var($age, FILTER_VALIDATE_INT, $options);
      

Actividad

  • 📝 AC 417. (RA4 RA5/ CE4c CE4d CE4e CE5a CE5b CE5d / IC1 / 3p) - Modifica la actividad AC 414 para que el acceso sea seguro. Asegúrate de validar y sanitizar correctamente los datos ingresados por el usuario para evitar vulnerabilidades como inyección de código. Escapa las entidades que puedan representar un riesgo y valida si el usuario tiene un correo electrónico asociado. Implementa buenas prácticas de autenticación, aunque el sistema utilice usuario@mail.com/usuario como credenciales válidas.