¿Insertar de forma segura un widget que envía formularios a nuestros servidores en sitios web de terceros?

0

Me gustaría crear un widget de javascript que los desarrolladores externos inserten en su página agregando:

<script type="text/javascript" src="https://test.com/widget.js" async></script>

El script inyecta el widget de formulario de colección de correo electrónico en una etiqueta div en el sitio web del desarrollador. Cuando un usuario envía el formulario, realiza una solicitud POST a un punto final alojado en nuestro servidor. Usamos recaptcha para validar todas las solicitudes.

Hay algunas implicaciones de seguridad:

  • El actor malo puede enviar correo basura al punto final con direcciones de correo electrónico incorrectas.
  • Dado que el widget está integrado en la página del desarrollador, pueden usar el widget para propósitos infames y tener nuestro nombre en él.

¿Cómo puedo abordar los problemas de seguridad que vienen con un widget incrustable? Todas las solicitudes pasan por HTTPS. Recaptcha se utiliza para ayudar contra el spam / abuso. ¿Tal vez pueda usar un encabezado de referencia / clave del sitio para validar que la solicitud proviene de un sitio web confiable?

Otra opción es usar un iframe alojado en mi sitio web para mostrar el widget.

    
pregunta jake 28.03.2018 - 18:42
fuente

1 respuesta

0

El hecho de que esté incorporando esto como un widget no es tan relevante para la mayoría de los aspectos de seguridad. La mayoría de los ataques se dirigirían directamente al punto final, sin pasar por alto el formulario, el widget y el navegador. Por ejemplo, necesitarías el captcha sin importar si creas un widget o no, porque el spam se envía con scripts automatizados y no se realiza a través de los navegadores.

Sin embargo, puede limitar los orígenes que pueden enviar solicitudes a sus puntos finales desde un navegador. Esto se haría usando CORS , solo permitiendo algunos orígenes en el encabezado de Access-Control-Allow-Origin .

El truco para hacer que esto funcione es que la solicitud no debe ser "simple", es decir, debe desencadenar una verificación previa. Una forma ordinaria POST es simple, por lo que no lo hará. Tendría que cambiar el verbo, o requerir que un encabezado específico esté presente en la solicitud o algo así. Vea el enlace anterior para lo que se considera "simple" y lo que no lo es.

Sin embargo, tenga en cuenta que es el navegador el que hace cumplir la política CORS. Un atacante aún puede enviar cualquier solicitud que desee, por ejemplo. RIZO. También tenga en cuenta que incluso si no crea un widget, cualquiera puede crear un formulario que publique en su punto final en su propia página web.

    
respondido por el Anders 28.03.2018 - 23:30
fuente

Lea otras preguntas en las etiquetas