¿Existe un marco de seguridad PHP que proteja los números de teléfono y las contraseñas?

StackOverflow https://stackoverflow.com/questions/120977

Pregunta

Entiendo el mantra de "no hacer lo suyo" cuando se trata de marcos de seguridad de sitios.

De todos modos, para la mayoría de los casos.

Voy a colaborar en un sitio que integra mensajes de texto en el sistema.

Me gustaría utilizar un marco de seguridad existente y bien probado para proteger los datos de los usuarios, pero también lo necesito para proteger el número de teléfono de un usuario.

No me gustaría ser el responsable de que una lista de números de teléfono celular de usuarios sean robados y enviados como spam.

¿Qué sugerencias puede ofrecer la comunidad?

¿Fue útil?

Solución

Tenga en cuenta que las técnicas aplicadas a las contraseñas no se aplican aquí.Puede almacenar una contraseña con sal y hash (aunque se puede cuestionar el valor de hacerlo), pero eso no funciona para números de teléfono.

Si alguien ataca su servidor, puede hacer cualquier cosa que el servidor pueda hacer.Esto debe incluir la recuperación del número de teléfono, pero no incluye la recuperación de la contraseña si está bien codificada.Entonces el número de teléfono es sólo un caso particular de protección de datos confidenciales.

Si los números de teléfono son realmente los únicos datos confidenciales en la aplicación, entonces podría considerar bloquear la parte de la aplicación que envía los mensajes de texto y cifrar asimétricamente los números de teléfono.En un proceso diferente (o en una máquina diferente), ejecute una aplicación que tenga la clave para descifrar números de teléfono.La interfaz de esta aplicación tendría tal vez una función que acepta un no cifrado y el mensaje a enviar.Mantenga esta aplicación simple y pruébela y audite hasta el último detalle.Ocultelo del mundo exterior o utilice la autenticación para demostrar que la solicitud realmente proviene de su aplicación principal, o ambas.

Ni la base de datos ni la parte principal de la aplicación son capaces de descifrar números de teléfono (por lo que, por ejemplo, no puede buscarlos), pero pueden cifrarlos para agregarlos a la base de datos.

La técnica general se llama "Separación de privilegios", lo anterior es sólo un ejemplo.

Tenga en cuenta que, por lo general, los números de teléfono deberán rellenarse con datos aleatorios antes del cifrado (como agregar sal a una contraseña hash).De lo contrario, es posible responder a la pregunta "¿el número de teléfono cifrado es X?", sin conocer la clave privada.Puede que eso no sea un problema desde el punto de vista de los spammers que roban su lista de distribución, pero sí lo es desde el punto de vista de afirmar que sus números de teléfono están almacenados de forma segura, ya que significa que un ataque de fuerza bruta se vuelve factible:sólo hay unos pocos miles de millones de números de teléfono, y es posible que sea posible reducirlos masivamente para un usuario determinado.

Lo siento, esto no responde directamente a tu pregunta:No sé si existe un marco PHP que ayude a implementar la separación de privilegios.

[Editar para agregar:de hecho, se me ocurre que bajo el título "mantener la aplicación privilegiada simple", es posible que no desee utilizar ningún marco.En cierto modo depende de si cree que es más o menos probable que deje errores en la pequeña cantidad de código que realmente necesita, que los autores del marco que dejaron errores en la cantidad mucho mayor (pero más utilizada) de código que tienen. He escrito.Pero eso es una enorme simplificación excesiva.]

Otros consejos

Dado que necesita poder recuperar los números de teléfono, lo único que realmente puede hacer para protegerlos (más allá de las cosas normales que haría para proteger su base de datos) es cifrarlos.Esto significa que necesitas:

  • Asegúrese de que la clave no se filtre cuando, sin darse cuenta, filtre un volcado de base de datos.
  • Asegúrese de que su sistema no descifre de manera útil los números de teléfono cuando alguien logra inyectar SQL en su sistema.

Por supuesto, se sigue aplicando la recomendación de no utilizar el suyo propio; utilice AES o algún otro cifrado respetado con una longitud de clave razonable.

Me complace anunciar el lanzamiento del sistema de seguridad para PHP.

Este proyecto significa llevar a PHP el tipo de seguridad que proporciona Spring Security en Java, anteriormente Acegi Security System para Spring.Está diseñado para resultar atractivo para los usuarios de Spring Security porque la filosofía es la misma.Es una forma discreta de agregar seguridad a un sitio PHP.La configuración se realiza utilizando el sustrato IoC/DI, ya que Spring Security utiliza Spring IoC/DI.

Se incluye una configuración de ejemplo con el marco y se puede utilizar así:

$context = new substrate_Context(
    './path/to/hole-security/hole-security-config.php'
);

$context->execute();

$hole_Security = $context->get('hole_FilterChainProxy' );
$hole_Security->doFilter();

Solo asegúrese de que el código de arranque del marco se ejecute antes que el código de arranque del MVC de su elección.

Sitio web:http://code.google.com/p/hole-security/

Documentación:Por el momento, puede utilizar la documentación de referencia de Spring Security donde corresponda.Puede hacerse una idea general utilizando la documentación de referencia de Acegi Security porque la seguridad de agujeros utiliza la misma forma de configuración, pero tenga en cuenta que se basa en Spring Security.

Licencia:Se publica bajo la licencia Apache versión 2.0.

Características:Hole-security ofrece un sistema de seguridad conectable donde puede adoptar los requisitos de seguridad de su entorno.Actualmente existe un sistema de seguridad muy simple porque está en la primera versión, pero con la base que trae, puedes sugerir o solicitar que se agreguen nuevas funciones al proyecto.

Características actuales:

  1. En la autenticación de dao de memoria como prueba de concepto, puede cambiar a su dao o implementación preferida que obtenga los datos del usuario de la base de datos o de cualquier lugar donde los almacene.En futuras versiones se creará una implementación basada en PDO.

  2. Filtros configurados para ser aplicados a patrones de URL.Se puede conectar el comparador de rutas de URL; actualmente se envía con un comparador de rutas de estilos ant.

  3. El Administrador de autorización se puede utilizar en su aplicación para decidir dónde hacer o no algo, obteniendo siempre la referencia del contexto del sustrato.

  4. Contexto de seguridad compartido accesible desde cualquier código de su aplicación si se aplica Hole_HttpSessionContextIntegrationFilter.Puede utilizar este contexto para guardar información relacionada con la sesión sin utilizar el objeto de sesión directamente.

  5. Puede utilizar una página de inicio de sesión personalizada y personalizarla según la configuración de Hole_AuthenticationProcessingFilter, o personalizar Hole_AuthenticationProcessingFilter según su página de inicio de sesión personalizada.

  6. El codificador de contraseña predeterminado es texto sin formato, sin codificación.Las versiones futuras tendrán implementaciones para codificación MD5, basada en Sha, Base64 y otras relacionadas.Puede crear su propio codificador de contraseñas y configurarlo.

  7. Todos los objetos se cargan según sea necesario; si algo como un filtro no se usa para una solicitud, no se cargará.Esto aumenta el rendimiento de la aplicación Hay otras características relacionadas que tienen la seguridad de los agujeros.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top