python - engine - ¿Hay alguna solución disponible para proporcionar soporte xsrf/csrf para el motor de aplicaciones de Google?
import webapp2 (3)
Hice un decorador:
def csrf_protected(handler):
def inner(self, *args, **kwargs):
token = self.request.params.get(''token'')
if token and self.session.get(''csrf'') == token:
self.session[''csrf''] = uuid.uuid1().hex
handler(self, *args, **kwargs)
else:
self.abort(400)
return inner
Tener token en plantilla y sesión
La falsificación de solicitudes entre sitios es común en la web hoy en día. Me enfrento a esto en mi propio sitio desplegado en el motor de Google App. Llegué a saber esto al examinar los registros de acceso. ¿Hay alguna biblioteca XSRF / CSRF u otra solución disponible para el motor de la aplicación que pueda usar? ¿Y cuánta carga agregará a mi sitio?
Tal vez usted puede intentar usar el middleware de protección csrf contrib de Django . No estoy seguro de que funcione fuera de la caja en AppEngine pero vale la pena intentarlo.
Utilizo este código llamado desde la función de solicitud de inicio de basehandler
def init_csrf(self):
"""Issue and handle CSRF token as necessary"""
self.csrf_token = self.request.cookies.get(''c'')
if not self.csrf_token:
self.csrf_token = str(uuid4())[:8]
self.set_cookie(''c'', self.csrf_token)
if self.request.method == ''POST'' and self.csrf_protect /
and self.csrf_token != self.request.get(''_csrf_token''):
raise CsrfException(''Missing or invalid CSRF token.'')
Lo tomé de la aplicación de lienzo de ejemplo de Facebook que incluye código para manejar crsf. Prácticamente no lo probé mucho, pero lo incluyo en mi proyecto porque tengo una aplicación de lienzo para Facebook que se ejecuta en FB como un iframe. Hace que cada manejador de solicitudes tenga una variable de instancia que puede establecer en falso si genera una excepción para los casos normales.
Todavía no lo probé a fondo, pero este es el material que tengo sobre los tokens CRSF para Google App Engine en python. Si desea ver los detalles exactamente de qué manera estoy aprendiendo a usarlos, puede clonar mi repositorio .