2009-07-23 15 views
6

Quiero encontrar una solución independiente de plataforma/lenguaje para garantizar que el origen de un FORM POST provenga de una fuente esperada. Es decir. Página1.aspx publicando en Page2.php dentro del mismo sitio web.Validar el origen de FORM POST para asegurar que proviene del mismo servidor/aplicación

Específicamente, lo que intento hacer aquí es evitar la falsificación de solicitudes.

+0

ASP.NET tiene clases de ayuda para hacer eso y evitar ataques/solicitudes de dominios que no sean los suyos. http://blog.stevensanderson.com/2008/09/01/prevent-cross-site-request-forgery-csrf-using-aspnet-mvcs-antiforgerytoken-helper/ – Saturnix

Respuesta

8

Utilice un campo oculto en su formulario, que contiene un token que generó su aplicación. Almacene el token en la sesión del usuario. Cuando se envía el formulario, su aplicación verificará que el valor del campo oculto sea idéntico al valor almacenado en la sesión del usuario.

Si es idéntico, entonces sabrá que el formulario enviado proviene de donde se espera que llegue.

+2

Pero pon un límite de tiempo sobre la validez de esa ficha , para evitar que se copie y reutilice indefinidamente. – skaffman

+1

¿Has visto algún buen tutorial sobre cómo hacer esto? Gracias –

0

Puede incluir en el formulario un campo oculto que sería SHA1Hash ("some-secret" + Remote_IP + PerSessionSecret).

PerSessionSecret es algo que se autogenera al comienzo de la sesión. "some-secret" es un valor secreto global, que ayudará un poco en caso de que PerSessionSecret generada aleatoriamente no sea lo suficientemente aleatoria.

Luego haga el mismo cálculo al enviar el formulario y usted sabrá que probablemente se haya enviado desde el mismo cliente al que se envió. (Por supuesto, si tiene varios clientes detrás de la única dirección, como un proxy o un NAT, no puede distinguir entre ellos de manera confiable).

1

Tema viejo, pero podría ser útil.

Si no tiene el conjunto de información de sesión (la mejor opción), puede incluir un campo oculto con una marca de tiempo cifrada y compararlo (después de descifrado) con la hora actual en el proceso para asegurarse de que sea relativamente cerca y, por lo tanto, tan reciente como lo considere necesario.

+0

Esto no evita necesariamente el CSRF (falsificación de solicitudes entre sitios) sino que protege contra ataques de repetición, algo diferente. –

Cuestiones relacionadas