Cada año, se producen más y más ataques de piratas informáticos en el mundo: desde robos de tarjetas de crédito hasta pirateo de sitios de tiendas en línea. ¿Estás seguro de que tus scripts están realmente protegidos? En previsión del inicio del curso "Backend PHP Developer", nuestro colega preparó una interesante publicación sobre seguridad en PHP ...
Introduccion
El escándalo de Facebook y Cambridge Analytica, la filtración de correspondencia del Partido Demócrata de EE. UU. En 2016, la violación de datos de Google en 2018 y el ataque de Yahoo Voice en 2012 son solo algunos ejemplos de filtraciones importantes registradas en los últimos años.
La información a escala global ahora está disponible para nosotros como nunca antes. Si no se cuida adecuadamente, la información sobre nosotros (incluida la información de carácter confidencial) también puede ser de dominio público.
No importa qué tipo de proyecto esté desarrollando: un juego infantil de código abierto o completar un pedido de una gran empresa. Su responsabilidad como desarrollador web es proporcionar seguridad para todas sus plataformas. La seguridad es un aspecto muy difícil.
El lenguaje PHP proporciona varias herramientas y funciones que puede utilizar para garantizar la seguridad de la aplicación.
3 reglas de seguridad de contraseña

Las contraseñas de usuario deben permanecer desconocidas para usted.
Todavía recuerdo mis primeros pasos como desarrollador de PHP. La primera aplicación que creé fue un juego donde, junto con mis amigos, jugué el papel de un constructor de rascacielos. Cada uno de nosotros podría iniciar sesión en nuestra cuenta, comprar constructores y enviar a nuestro equipo a un nuevo sitio de construcción cada semana. Creé cuentas básicas: agregué un nombre de usuario y contraseña para cada usuario y se los envié por correo electrónico. Y solo después de un par de meses me di cuenta de lo estúpido que era.
La regla general es esta: no solo no debe conocer las contraseñas de sus usuarios, sino que no debe poder reconocerlas. Este es un aspecto muy grave que incluso puede implicar responsabilidad legal.Por prueba y error, aún llega a la conclusión de que las contraseñas no necesitan almacenarse en texto plano o de manera que puedan descifrarse fácilmente.
No ingrese restricciones de contraseña
Juguemos un juego. Intenta adivinar la contraseña:
**********Difícil, ¿verdad? Probemos esto:
P * r *** e ***Ahora sabe que hay una letra mayúscula y algunas letras mayúsculas. Y si es así:
P * r *** e911Ahora será mucho más fácil para usted adivinar la contraseña, porque sabe que incluye una letra mayúscula, letras mayúsculas y un número.
Lo mismo sucede cuando impone restricciones a los usuarios y máscaras para sus contraseñas. Si su aplicación tiene el requisito de seguir un patrón específico, le da pistas a los intrusos que pueden usar en su contra.
Requerir una cierta longitud mínima de contraseña es normal, ya que la longitud de la contraseña afecta el tiempo que lleva recuperarla. Sin embargo, en cambio, será mucho más útil descubrir cómo funcionan los algoritmos y el hash.
Por cierto, la respuesta correcta al acertijo anterior es
"Porsche911" :)
Nunca envíe contraseñas por correo electrónico en su forma más pura.
Uno de mis primeros errores como desarrollador web fue que no aprendí a administrar las contraseñas por adelantado.
Imagine que es un cliente y contrata a un desarrollador para crear un buen sitio de comercio electrónico para su negocio. Este desarrollador le ha enviado un correo electrónico que contiene la contraseña de su sitio. Ahora sabes tres cosas sobre tu empleado:
- El conoce tu contraseña.
- Almacena su contraseña en su forma más pura, sin usar ningún cifrado.
- No siente la menor preocupación al enviar contraseñas por Internet.
En respuesta, no hay más remedio que despedir a dicho empleado.
Esto es lo que debe hacer un desarrollador web:- Cree una página en su aplicación web donde el usuario pueda ingresar su correo electrónico en caso de que haya olvidado la contraseña y, por lo tanto, solicite una nueva contraseña.
- Su aplicación generará derechos de acceso únicos y los vinculará al usuario que realizó la solicitud (personalmente uso un identificador individual universal).
- La aplicación enviará al usuario un correo electrónico con un enlace que conduce al derecho de acceso.
Tan pronto como el usuario siga el enlace, la aplicación confirmará el acceso correcto y le permitirá cambiar la contraseña.
¿Ves cómo la seguridad de la aplicación ha crecido con estos simples pasos? Si lo desea, podemos aumentar aún más el nivel de seguridad al agregar un límite de tiempo entre la solicitud y establecer una nueva contraseña.
Cómo hash contraseñas de usuario

Las contraseñas en una aplicación web deben ser hash, no encriptadas. El cifrado es un algoritmo de dos vías. La secuencia está encriptada, que luego puede desencriptar y reutilizar. Esta técnica se usa a menudo en inteligencia para obtener información de los aliados.
El hash sugiere que la secuencia no se puede devolver al texto sin formato. Este es el objetivo final de todo el proceso.
Para lograr diferentes objetivos, se han desarrollado muchos algoritmos: algunos se caracterizan por su alta velocidad, otros son altamente confiables. Esta tecnología está en constante evolución, y en los últimos años ha sufrido muchos cambios. Ahora consideraremos las tres variedades más populares en orden cronológico.
SHA-1
Esta fue históricamente la primera función hash. El acrónimo SHA-1 significa "Algoritmo de hash seguro", desarrollado por la Agencia de Seguridad Nacional de EE. UU.
SHA-1 era bien conocido y ampliamente utilizado en PHP para crear una cadena hexadecimal de 20 bytes con una longitud de 40 caracteres.
La industria SSL ha estado utilizando SHA-1 para firmas digitales durante varios años. Luego, después de identificar algunas debilidades, Google decidió que era hora de cambiar a SHA-2.
La primera versión del algoritmo quedó en desuso en 2005. Posteriormente, se desarrollaron y adoptaron nuevas versiones para su uso: SHA-2, SHA-2 y SHA-256.
Cripta
Bcrypt, no como resultado del desarrollo natural de SHA, logró atraer una gran audiencia debido a su nivel de seguridad.
Este algoritmo extremadamente lento fue creado para crear las secuencias hash más seguras. En el proceso de hashing de datos, pasa por varios ciclos, que en tecnología informática se describen mediante el indicador de costos laborales. Cuanto mayor sea la tasa de mano de obra, más costoso será para un hacker obtener una contraseña.
Hay buenas noticias: en el futuro, podremos utilizar máquinas más potentes capaces de pasar más ciclos más rápido.
Argón2
Este es un nuevo algoritmo de hash de moda desarrollado por Alex Biryukov, Daniel Dinu y Dmitry Hovratovich de la Universidad de Luxemburgo. En 2015, ganó el concurso Password Hashing.
Argon2 se presenta en 3 versiones:- Argon2d accede a una matriz de memoria, lo que reduce la sobrecarga de memoria y tiempo. Sin embargo, corre el riesgo de ser atacado a través de canales de terceros.
- Argon2i es lo opuesto a Argon 2d. Está optimizado para ataques a canales de terceros y accede a la memoria de forma independiente de la contraseña.
- Argon2id es una versión intermedia entre dos versiones anteriores.
Esta función tiene 6 parámetros:
secuencia de contraseña, sal, costo de memoria, costo de tiempo, factor de paralelismo (número máximo permitido de hilos paralelos), longitud de hash.En la segunda parte del artículo, le diré cómo usar este hashing en PHP usando las funciones integradas, y ahora quiero invitar a todos al servidor
web gratuito en línea "ServerLess PHP", en el que nos familiarizaremos con el concepto Serverless, hablaremos sobre su implementación en AWS, aplicabilidad, precios Analizaremos los principios de ensamblaje y lanzamiento, así como construiremos un simple TG-bot basado en AWS Lambda.