¿Impedir el envío de formularios de dominio cruzado con nonce?

7

No he hecho mucho en seguridad web antes, pero ahora necesito evitar que se envíe un formulario desde cualquier cosa que no sea mi propio dominio.

Sé cómo bloquear esto en un archivo .htaccess, pero el referente no es muy confiable por lo que he entendido.

Ahora estoy buscando en nonces. He configurado un nonce en mi formulario que funciona (estoy usando Wordpress, por lo que es fácil crear campos de nonce).

Lo que ahora necesito saber es si esto realmente me ayuda a evitar envíos entre dominios.

En mi mente, hace lo que necesitaría mi clave secreta para generar la cadena nonce pero, por otro lado, la cadena nonce está visible en la fuente de la página. ¿Eso significa que necesitarías mi clave secreta de nuevo para traducir la cadena nonce para validarla?

¡Espero que alguien pueda aclararme esto!

    
pregunta Brigante 08.02.2013 - 11:34
fuente

1 respuesta

8

La prevención de envíos de formularios desde otra fuente es un problema resuelto, y usar un nonce es uno de los métodos recomendados.

Para algunos antecedentes, hay una forma de ataque contra aplicaciones web conocidas como falsificación de solicitudes entre sitios (XSRF) . Una falsificación de solicitud entre sitios, en términos simples, es cuando alguien carga JavaScript en una página maliciosa que hace publicaciones en otra página . Hay más que eso, y si no está familiarizado con CSRF, le recomiendo que lo lea. (Consulte el artículo de Jeff Atwood además de la OWASP Artículo al que he vinculado anteriormente.

La buena noticia es que muchos marcos de desarrollo web ya cuentan con mecanismos preconfigurados para evitar ataques XSRF, y lo hacen al garantizar que las publicaciones provengan de su propio dominio. Una vez más, usar un nonce es uno de esos métodos.

Desde la página OWASP en XSRF:

  

Controles relacionados

     
  • Agregue un nonce por solicitud a la URL y todos los formularios además de la sesión estándar. Esto también se conoce como "claves de formulario". Muchos   Los marcos (ex, Drupal.org 4.7.4+) tienen o están empezando a   incluir este tipo de protección "incorporada" a cada forma para que el   El programador no necesita codificar esta protección manualmente.
  •   
  • TBD: agregue un nonce por sesión a la URL y todos los formularios
  •   

En la parte inferior de la página de OWASP hay varias referencias que incluyen enlaces a mecanismos ya disponibles para resolver esto, incluido el Guardia CSRF de OWASP, que utiliza J2EE , .NET , y los filtros PHP que agregan un token de solicitud único a cada formulario y enlace en la respuesta HTML para brindar cobertura universal contra CSRF en toda su aplicación.

    
respondido por el David Stratton 08.02.2013 - 15:25
fuente

Lea otras preguntas en las etiquetas