¿Cómo prevenir el CSRF si desea incluir complementos de Flash en su formulario como Uploadify en su formulario?

5

¿Qué es CSRF?

Necesito una definición básica que no se elimine de Wikipedia.

Entiendo que la inyección SQL, XSS, el envenenamiento de cookies, pero simplemente no puedo entender esto.

Estoy usando un marco, CakePHP , que tiene un componente que previene automáticamente este CSRF. Sin embargo, cada vez que hago algo en el formulario como usar jQuery para alterar los valores del campo. O cuando incluyo algunos Ajax que funcionan con complementos de Flash como Uploadify , necesito deshabilitar CSRF.

Entonces, ¿cómo puedo, en principio, prevenir la CSRF cuando dichos elementos están involucrados en el formulario?

    
pregunta Kim Stacks 18.01.2011 - 17:26
fuente

1 respuesta

7

CSRF o Cross-Site Request Forgery es básicamente una persona mala que engaña al navegador de una persona buena para que realice funciones en su sitio web en nombre de las personas malas.

Aquí hay un ejemplo:

  
  1. Los buenos usuarios inician sesión en su sitio web y   obtiene una sesión valida
  2.   
  3. Malos trucos de usuario buen usuario en   siguiendo un enlace a un sitio malicioso
  4.   
  5. malicioso       El sitio contiene un formulario con datos falsificados que publica en su   sitio web       (Sin embargo, desde que se envía desde el cliente       lado, su sitio cree que se originó       del buen usuario)
  6.   
  7. tu sitio entonces       El buen usuario ha enviado un formulario.       y procesa la acción.
  8.   

Pongámoslo en contexto:

  
  1. Un buen usuario es un administrador en   su sitio web.
  2.   
  3. Desde el panel de administración, un buen usuario puede   añadir un usuario rellenando un formulario   que se parece a esto:

    <form action="/new_user.php" name="myform" method="POST">
        <input type="text" name="new_username">
        <input type="password" name="new_password">
        <input type="Submit">
    </form>
    
  4.   
  5. Un buen usuario sigue un enlace a un   sitio malicioso, que contiene el   siguiente javascript:

    <form action="http://www.yoursite.com/new_user.php" name="myform" method="POST">
        <input type="hidden" name="new_username" value="MaliciousHax0r">
        <input type="hidden" name="new_password" value="MaliciousPass">
    </form>
    <script type="text/javascript">
        document.myform.submit();
    </script>
    
  6.   
  7. Tu aplicación ahora recibe el   solicitud que fue presentada por Buena   usuario, en nombre de usuario malo. Desde que   originado de Buen usuario, quien   pasa a iniciar sesión en su   sitio web, todo está bien y tu   El sitio web procesa la solicitud.

  8.   

Ahora tenga en cuenta que esto es un simple       ejemplo, y el buen usuario vería       la presentación suceda que DEBERÍA elevar       una bandera roja, sin embargo usando un poco       métodos más complejos, tales como       XMLHttpRequest () en javascript lo haría       ser silencioso / desconocido para el buen usuario.

     

El usuario malo ha obtenido una cuenta   en tu sistema.

Cómo eliminar CSRF:

  
  1. El truco es agregar un token a cada uno   forma que tiene un valor aleatorio que   se genera para cada solicitud.
  2.   
  3. Cuando se envía el formulario, su   controles de la aplicación para asegurarse de que el   el token se pasa y coincide con el   uno al azar que se generó cuando   el formulario fue cargado.
  4.   

El sitio malicioso no tendría   acceso a este token, por lo tanto   no podria proporcionar eso   pieza requerida, y un formulario de presentación   no sería procesado.

Cómo hacer que otras herramientas funcionen sin deshabilitar la protección CSRF en CakePHP:

No lo sé. Consulte la documentación para la protección CSRF, para CakePHP y para los otros complementos.

Cuestione si el uso de esos complementos vale o no la pena en la protección CSRF, y considere soluciones alternativas.

Recurso CSRF:

enlace

    
respondido por el Purge 18.01.2011 - 19:17
fuente

Lea otras preguntas en las etiquetas