La seguridad PHP es el tema más preocupado en la seguridad de las aplicaciones web. En este artículo, aprenderá algunas técnicas que puede usar en sus aplicaciones para solucionar problemas de seguridad y mejorar la seguridad general de las aplicaciones web PHP.




1. Validación de entrada

Todos los problemas comienzan aquí Si no está validando y desinfectando los datos enviados por el usuario a través de formularios o URL. Si sigue estrictamente este paso, podrá superar una gran cantidad de problemas con sus aplicaciones relacionados con la seguridad.

En primer lugar, compruebe si la entrada enviada con el método correcto? Es decir, si la entrada del usuario debe pasar a la URL y si está utilizando la solicitud superglobal, entonces ese es el problema. Porque los piratas informáticos pueden falsificar la solicitud con otros tipos de métodos. Solicitar superglobal funciona con todo tipo de entradas que se publican y reciben.

La respuesta simple es no usar la solicitud superglobal, solo use get o post en función del tipo de solicitud.

Si el método de entrada es get y si espera solo el número de la URL como entrada del usuario. Use las funciones de PHP para validar los datos de entrada enviados por el usuario, en esta situación particular, puede usar la función is_int PHP. Para verificar si la entrada es un número entero.

Para la validación, puede usar la función PHP filter_var con esta función, puede validar la entrada y también desinfectar la entrada. Debes usar el filtro correcto según tus necesidades. Para ver los filtros disponibles, visite el sitio web de php.net.

2. XSS Cross-Site Scripting

Cross Site Scripting en resumen llamado XSS, el atacante inyecta código JavaScript en nuestra aplicación, después de eso nuestra aplicación actúa de manera extraña como redirigir al sitio del atacante o enviar información del usuario al sitio de los atacantes.

Aquí veremos cómo podemos superar los ataques XSS haciendo simples cambios en nuestras aplicaciones con estos dos métodos. Eso es filtrado de entrada y salida de escape.

 2.1 Entrada de filtrado

Al aceptar datos de los usuarios del sitio web, debemos filtrar. Por ejemplo, en el sistema de comentarios, debemos aceptar solo las entradas de texto, no las HTML. Si no estamos filtrando la entrada, el usuario puede enviar cualquier tipo de información, incluso código malicioso.Para filtrar el código no deseado podemos utilizar estas funciones de PHP, aquí te presento tres funciones de PHP y sus ventajas.La función strip_tags PHP elimina las etiquetas HTML de la entrada enviada por el usuario.filter_var: Y la forma más segura de filtrar la entrada es filter_var con filter_sanitize_string elimina las etiquetas HTML, incluso la sintaxis HTML ingresada por el usuario es incorrecta.expresiones regulares: si tiene un requisito específico, puede crear una expresión regular para filtrar la entrada del usuario.

2.2 Salida de escape
 Escaping Output es una técnica utilizada para prevenir XSS. Supongamos, supongamos que con el sistema de comentarios anterior tiene algunos comentarios en la base de datos sin filtrado de entrada. Eso significa que estos comentarios pueden tener algunas etiquetas HTML e incluso algunos comentarios pueden tener código malicioso. Sin eliminar estos datos de la base de datos, podemos solucionar este problema escapando de la salida con estas funciones de PHP.La función PHP de htmlspecialchars codifica caracteres especiales en entidades HTML e incluso si desea convertir comillas en entidades HTML, úselas con ent_quotes.htmlentities La función PHP convierte todas las entidades de caracteres HTML en entidades html.Puede convertir las comillas también con ent_quotesLa forma más segura es usar filter_var con el filtro filter_sanitize_full_special_chars para convertir todas las entidades HTML.

3. Inyección SQLLa inyección SQL es la amenaza más importante para cualquier aplicación que utiliza una base de datos. Puede seguir estas técnicas para superar la Inyección de SQL.Proporcione información mínima al usuario, no muestre consultas SQL ni depure información al usuario. Como puede revelar los nombres de las tablas y la estructura de la tabla a los atacantes, facilita a los atacantes la inyección SQL.Valide la entrada, siga el paso 1. Al seguir esto, puede minimizar los pocos problemas.Escape de la salida al insertar datos en la base de datos. Anteriormente hemos visto cómo se escapaba la salida mientras se mostraban comentarios en el navegador. De la misma manera, podemos escapar de la salida al insertar los registros en la base de datos con la función PHP mysqli_real_escape_sting.Utilice declaraciones preparadas con PHP PDO, es el método más seguro para superar la inyección SQL. Puede obtener más información sobre Declaraciones preparadas de PDO de PHP CRUD Application con PDO.Cuenta de usuario de base de datos menos privilegiada: cree un usuario de base de datos en su servidor con menos privilegios. Por ejemplo, si solo muestra información en su aplicación desde la base de datos, cree un usuario de base de datos con solo privilegios de lectura. Comprenda su aplicación y cree una cuenta basada en los privilegios.

4. Hashing de contraseñaAl almacenar Contraseñas de usuarios, no lo guarde en una contraseña de texto sin formato. Debido a que está exponiendo la información importante de su usuario al atacante, la mayoría de los usuarios usarán la misma contraseña en otros sitios web. Entonces, tus usuarios están en gran peligro.Utilice el algoritmo de hashing de contraseña segura, un algoritmo de hashing de contraseña más seguro es password_hash. Use password_hash mientras genera hash de contraseñas. Para generar el hash con la función de PHP password_hash, use este código a continuación.


password_hash($password, PASSWORD_DEFAULT);
5. Falsificación de solicitud de CSRF entre sitios

 
La falsificación de solicitudes entre sitios es otra área en la que debe implementar tokens de CSRF para mejorar la seguridad de los envíos de formularios.

Los tokens CSRF se utilizan para proteger formularios en PHP, generaremos un token aleatorio y este se almacenará en la sesión y este token se pasará a través del formulario. Después del envío del formulario, se comparará el token CSRF del formulario y el token almacenado en la sesión. Si ambos valores coinciden, solo la presentación del formulario tendrá éxito. De lo contrario, el envío del formulario será fallido. El atacante no podrá tener éxito con sus intentos.


6. Manejo de errores
 

Mientras esté en modo de producción, no muestre todos los errores a los usuarios, siga el principio de información mínima.
Conclusión

Siempre busque los problemas de seguridad en sus aplicaciones web. Encontrará algunas cosas en sus aplicaciones, siga estos pasos como una lista de verificación para la seguridad de sus aplicaciones.

Comenta abajo y házmelo saber las técnicas que estás siguiendo en las aplicaciones de PHP para mayor seguridad.