seguridad Webapp2

11

Estoy codificando una aplicación web REST que se ejecuta en el motor de aplicaciones de Google, autentica las solicitudes de API a los datos privilegiados mediante sesiones mediante cookies proporcionadas por webapp2_extras.auth y webapp2_extras.security.

Todo el sitio y todos los puntos utilizan HTTPS.

Webapp2 se ejecuta en un "contexto de solicitud" que creo que significa que cada solicitud que recibe tiene su propio subproceso, pero me pregunto algo que probablemente sea bastante específico del código e incluso si busco el código para entenderlo, estoy No estoy seguro de que sea capaz de poner fin a todos mis miedos, por lo que pregunto aquí.

La situación es: Preparo la solicitud http PATCH para "agrupar" las solicitudes de los métodos PUT, GET y DELETE para guardar en viajes de ida y vuelta cliente-servidor. Si el cliente tiene muchos objetos para guardar en el servidor, puede hacer un PARCHE con la lista jsonificada de "sub" solicitudes para

/user/dame_edna/objects

Y el parche repetirá esa lista y luego realizará solicitudes dentro de la aplicación a los diferentes puntos , por ejemplo, una solicitud podría ser:

method:delete point:/decorative_fans/small_dog_design

Y el método de parche construirá un objeto webapp2.Request que apunta a

/user/dame_edna/objects/decorative_fans/small_dog_design

Rellenará varios campos (pero, de manera crucial para esta pregunta, no los campos de cookie o autenticación), y luego instanciará el controlador de solicitudes, en este caso,

user.objects.decorative_fans.crud.responder

y ejecute esa solicitud en la aplicación, sin un viaje de ida y vuelta cliente-servidor

Aquí es donde me pierdo y lo que me parece interesante:

El campo de cookie de la nueva solicitud está en blanco, pero de alguna manera la solicitud conoce el token de autenticación y la sesión de la solicitud de origen. Tenga en cuenta que la solicitud de PATCH original llegó a /user/dame_edna , e incluso para hacer esa solicitud de PATCH aquí necesitamos tener una sesión autenticada para el usuario "dame_edna", pero mi preocupación es: ¿cómo funcionan las solicitudes secundarias que realizo en el ¿La aplicación sabe que están verificadas como "dame_edna"?

Pero lo hacen. Volcé el token de autenticación para la solicitud DELETE, y surgió como el mismo token de autenticación que autentificó, por ejemplo, dame_edna a la solicitud PATCH original, aunque no lo copié ni configuré de ninguna manera

Me parece extraño que webapp2 copie a través de estos fundamentos de autenticación, o que simplemente sean accesibles para el objeto Request recién creado, desde la creación de Requests in-app como hice, según los documentos, se usa principalmente para pruebas unitarias.

Quiero aclarar cualquier duda al respecto antes de seguir adelante con la aplicación, ya que es un área bastante clave que no quiero estropearla, y no puedo ignorarla sin saber exactamente qué está pasando.

Se agradece la ayuda por una explicación de cómo la solicitud secundaria y interna de la aplicación conoce el estado original de las solicitudes HTTP y si el uso de solicitudes secundarias de esta manera será tan "a prueba de balas" como las sesiones firmadas originales proporcionado por webapp2_extras

    
pregunta Cris Stringfellow 21.04.2013 - 20:11
fuente

1 respuesta

1

Algunas cosas que vinieron a la mente.

Una sesión tcp (que es la base para las solicitudes HTTP) se identifica mediante IP: origen a IP: destino y se considera una 'sesión'. La solicitud HTTP no es diferente e identifica las sesiones según estos parámetros.

Dado que indicó que intenta guardar viajes de ida y vuelta cliente-servidor, esta es una declaración verdadera. Mientras el cliente no envíe un TCP-RST o TCP-FIN, el identificador de sesión para el par de puertos IP: continuará siendo reutilizado. O, hasta que la conexión se agote y el servidor devuelva un TCP-RST. Solo así se renovará el manejo de la sesión.

Además de esto, los servidores de aplicaciones y los marcos también pueden tener su propio estado de sesión.

Básicamente, mientras no reinicies la conexión, los estados de sesión tcp, http y superior permanecerán intactos. Depende (altamente) de su configuración específica y de la configuración en su lugar.

Debes escribir algún código para validar lo que realmente está sucediendo.

    
respondido por el Saint Crusty 19.09.2014 - 16:48
fuente

Lea otras preguntas en las etiquetas