Ejecutando el script PHP WeService haciendo clic en un enlace dentro de un correo electrónico

-1

Estoy recibiendo correo electrónico de mi aplicación PHP / MySQL con ciertos enlaces. Estaba pensando en incluir un UUID como parte del enlace, que apuntaría a un servicio web que SOLO lee esos UUID. Esos UUID se almacenarán en la base de datos y el servidor del servicio web entenderá qué hacer para cada UUID (ejecutar una declaración SQL vinculada a ese UUID). Una vez que se recibe el UUID y se ejecuta el script, el UUID se marcará como inactivo para evitar que alguien ejecute la misma consulta

Esto puede significar que el cliente del servicio web no solicita credenciales de usuario para autenticarse (para el usuario que haga el clic real en el enlace). ¿Es esto demasiado inseguro? ¿Es propenso a la inyección de SQL o fácil piratería? ¿Debo usar esquemas de cifrado adicionales? Tenga en cuenta que mi aplicación no tiene SSL habilitado

Si es posible, ¿qué componentes / marcos recomendaría? Quiero decir, ¿sería SOAP, WSDL, REST, etc.? ¿Existen alternativas a los servicios web para esto?

    
pregunta Agustin Garcia 09.01.2014 - 13:00
fuente

2 respuestas

1

Marcar el UUID como inactivo después del acceso inicial solo sería efectivo mientras usted sea el primer usuario que accede al enlace. Si alguien más se las arregla para secuestrar su mensaje de correo electrónico y acceder al enlace antes de que usted no le ayude, no habrá ninguna cantidad de cifrado adicional en su servicio web.

Puede cifrar el correo electrónico que se le envió (en formato S / MIME, PGP o GPG, por ejemplo). Esto aumentaría la probabilidad de que usted sea el primero en acceder a los enlaces, pero si alguien está escuchando su conexión (o la conexión a su servidor) todavía podrá ver el resultado de su acceso al enlace.

Siempre que su servicio web solo use el UUID provisto desde el exterior y busque el SQL real para ejecutarse desde la base de datos, no veo el servicio web como un problema de seguridad, pero dependerá de que sea lo suficientemente aleatorio. Nonces / UUIDs para que un atacante no pueda predecirlos fácilmente.

Además, es posible que desee considerar tener un tiempo máximo para mantener cerca los nonces / UUID generados, tanto para asegurarse de que su base de datos no sea infinitamente grande como para asegurarse de que los enlaces que nunca hizo clic se desactivarán.

    
respondido por el wj. 14.01.2014 - 07:18
fuente
0

Este escenario impone múltiples problemas posibles. Si es propenso a la inyección SQL o no se puede responder a la piratería aquí, ya que esto es totalmente dependiente del entorno y del código.

Las escuchas ilegales pueden ocurrir en el lado del servidor durante la generación de los enlaces, a través del canal de correo o en su propia máquina.

Cuando restringes los enlaces que envías y planeas hacer clic en ellos de todos modos, incluso si un hacker obtuviera el enlace y lo usara antes de usarlo (antes de que el UUID haya expirado), entonces todo lo que el hacker puede hacer es ejecutar La consulta que ha almacenado en una base de datos. Por lo tanto, puede que no haya un vector de ataque aquí (excepto las suposiciones UUID como @wj. Ha señalado)

Si los enlaces lo llevan a alguna área de administración, lo atornillarán, ya que no proporcionará autenticación y tratará de lograr la seguridad mediante la oscuridad (manteniendo los enlaces en secreto).

Una forma de reducir el riesgo (de una manera probablemente mala) es proteger el canal de transmisión cifrando el correo con un cifrado asimétrico, como PGP, etc., descrito por @wj. Escuchó esto y perdió de nuevo porque no protegió el recurso (el servidor), sino solo el mensaje que lleva al servidor.

Lo que considero una mejor manera es poner la autenticación en todo el servidor en términos de credenciales de inicio de sesión o algún otro tipo de autenticación.

¿El recurso necesita ser protegido? ¿Por qué no está ya protegido?

¿Qué marco de trabajo debe usar depende de su entorno, es PHP? Perl? ¿ÁSPID? Yo sugeriría usar los marcos de trabajo de MVC existentes para determinados idiomas que incluyen el concepto de autenticación (Symfony, Zend, ASP MVC, etc.). Sin embargo, tenga en cuenta que todos esos marcos no son triviales y requieren cierta comprensión, ya que el simple uso de un marco puede exponer más información sobre su servidor y, por lo tanto, aumentar los vectores de ataque.

Por supuesto, también puede haber herramientas totalmente simples y adecuadas para su necesidad, como el uso del mecanismo htaccess de apache para proporcionar una protección simple pero efectiva de los recursos web. Esto podría proteger el enlace al que se llama sin las credenciales adecuadas, pero no necesariamente protege su servidor, ya que podría tener una contraseña de root débil, una contraseña de administrador de base de datos débil, etc.

Las formas de comprometerse son tan enormes. Incluso si protege bien su recurso, tener un CMS, un correo electrónico web o cualquier otro sistema instalado en la misma máquina puede proporcionar un vector de ataque incluso si ha asegurado bien su enlace (puede terminar con una puerta frontal segura pero deja todas las ventanas abiertas, hablando en analogías :))

    
respondido por el Samuel 14.01.2014 - 12:47
fuente

Lea otras preguntas en las etiquetas