Mejores prácticas para almacenar información confidencial en una aplicación web

2

Estoy desarrollando una aplicación en php / MySql y buscando el mejor enfoque desde un punto de vista de seguridad. La aplicación utilizará y almacenará información confidencial. Me doy cuenta de que existen riesgos para todos los enfoques, pero necesito el mejor enfoque posible que minimice los riesgos de seguridad de la información confidencial con esta aplicación.

Aquí está la base de la aplicación:

1) La aplicación completa se ejecuta con https y php 7.

2) El usuario se registra para una cuenta en register.php y las contraseñas son las contraseñas hash password y Password_BCRYPT durante el registro.

3) El usuario inicia sesión en la aplicación web a través de login.php

4) Una vez que haya iniciado sesión, las visitas de los usuarios administran la página de credenciales (manage-accounts.php) y en una web desde url, nombre de usuario y contraseña para sitios web de terceros (básicamente como un administrador de contraseñas).

5) El siguiente usuario visita la página manage-customer.php e ingresa información confidencial del cliente que incluye ssn #.

6) Por último, las visitas de los usuarios envían la página submit-customer.php.

  • En esta página, el usuario selecciona uno de los sitios web de terceros ingresados en el paso 4 y un cliente ingresó en el paso 5 y pulsa enviar.
  • Al enviar el script php, se mostrará el marco seleccionado. sitio web de terceros (el sitio web de terceros utiliza https).
  • Se registrará automáticamente el usuario en el sitio web de terceros (Con credenciales del paso 4). Se completará automáticamente la información confidencial del cliente en el formulario web https de terceros (con la información del cliente del paso 5). iii. Se enviará el formulario web de terceros.

Aquí están mis preguntas:

1) Para un sistema como este, qué metodología de encriptación / seguridad es    considera la mejor práctica para maximizar la seguridad de las personas sensibles    ¿Información que se almacena en los pasos 4 y 5?

  • No estoy buscando crear mi propio cifrado. Me gustaría usar un marco probado existente.

2) ¿Cuál es la forma más segura de transmitir la información del paso 4?    y 5 a un sitio web de terceros a través del formulario web de iframed?

3) ¿Es mejor almacenar la información confidencial ingresada en el paso 4?    y 5 en el servidor o en el cliente? Si en el cliente exactamente cómo    ¿Debería hacerse esto?

    
pregunta user1609391 18.06.2017 - 00:30
fuente

1 respuesta

0

El alcance completo de esta pregunta es enorme (varios aspectos del diseño de aplicaciones seguras). No estoy seguro de que una simple pregunta y respuesta sea suficiente.

Dada la seriedad de lo que está intentando, debe incorporar a su equipo a un profesional de AppSec y considerar un enfoque holístico que incluya un modelo de amenazas, un diseño seguro, principios de codificación segura, pruebas de seguridad y verificación.

Intentaré respuestas breves para preguntas puntuales: con la advertencia de que los expertos de AppSec aún están debatiendo algunos de estos, especialmente porque algunas de las respuestas están "evolucionando" (por ejemplo, almacenamiento seguro de credenciales: algunas discusiones sobre cómo favorecer a K12 y Blake2 sobre PBKDF2 / bcyrpt / scrypt).

Esto no fue una pregunta pero:

  

2) El usuario se registra para una cuenta en register.php y las contraseñas son   hasheado password_hash y Password_BCRYPT durante el registro.

Por favor, asegúrese de que está usando una sal al azar de tamaño considerable. Vea esto discusión antigua sobre el tamaño de sal y hachís para un poco de comprensión. OWASP tiene una guía decente y reciente para este aquí . Tenga en cuenta que las discusiones de 2013 fueron alrededor de 64 y 128 bits de sal. OWASP menciona sal de 64 bytes (no bits) . También se recomiendan las funciones con clave, no solo el hashing simple.

Finalmente, mencionaste "básicamente como un administrador de contraseñas". Eso complica un poco las cosas. Querrá dejar al usuario en control, con al menos una seguridad razonable de que parte de las claves del reino están guardadas en su cerebro o en su sistema. El método habitual para esto es que la clave maestra del usuario (contraseña) no se almacena en ningún lugar (ni siquiera en el sistema local), sino que se utiliza para obtener la (s) clave (s) utilizadas para el almacenamiento de la contraseña.

Ahora para tus preguntas:

  

1) Para un sistema como este, qué metodología de encriptación / seguridad es   considera la mejor práctica para maximizar la seguridad de las personas sensibles   ¿Información que se almacena en los pasos 4 y 5?

Lo sentimos, no hay una respuesta breve para esta pregunta.

Este sistema necesitaría un modelo integral de amenazas + privacidad, así como un diseño de seguridad desde cero. Es bueno que hayas empezado bastante bien, pero por favor no subestimes las tareas en cuestión. OWASP tiene guías para la mayoría de las partes, aunque se sabe que las personas con amplia experiencia disuaden algunas áreas (por lo general, a pesar de que "no es perfecto" ... lo cual, considero una objeción pedante).

  

2) ¿Cuál es la forma más segura de transmitir la información del paso 4 y   5 a un sitio web de un tercero a través del formulario web de iframed?

Como usuario preocupado por la seguridad, no confío en iframes. No los recomiendo a los usuarios. Si lo que está haciendo es similar a una funcionalidad de administrador de contraseñas, le sugiero que explore alternativas.

  

3) ¿Es mejor almacenar la información confidencial ingresada en el paso 4?   y 5 en el servidor o en el cliente? Si en el cliente exactamente cómo   ¿Debería hacerse esto?

Consulte el párrafo anterior donde mencioné clave maestra (contraseña).

Si sigues ese consejo, deberías almacenar el alijo de contraseñas de hash por usuario en tu servidor. No existe una ventaja real (técnica) de almacenar las contraseñas correctamente cifradas / encriptadas en el sistema del usuario, donde pueden eliminarse fácilmente por varios motivos.

Espero que esto ayude.

    
respondido por el Sas3 18.06.2017 - 05:48
fuente

Lea otras preguntas en las etiquetas