【问题标题】:Is there any available solution to provide xsrf/csrf support for Google app engine?是否有任何可用的解决方案为 Google 应用引擎提供 xsrf/csrf 支持?
【发布时间】:2012-01-13 03:48:46
【问题描述】:

Cross-site request forgery 现在在网络上很常见。我在部署在 Google App 引擎上的自己的站点中面临这个问题。我通过检查访问日志了解了这一点。是否有任何 XSRF/CSRF 库或其他可用于我可以使用的 App 引擎的解决方案。而且,它会给我的网站增加多少负载?

【问题讨论】:

  • 这里没有任何特定的 App Engine - 为 Python 编写的任何东西都应该可以正常工作。

标签: python google-app-engine webapp2


【解决方案1】:

我使用从 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.')

我从Facebook's example canvas application 获取它,包括处理 crsf 的代码。我实际上并没有对其进行太多测试,但我将它包含在我的项目中,因为我有一个用于 Facebook 的画布应用程序,它作为 iframe 在 FB 中运行。它使每个请求处理程序都有一个实例变量,如果它在正常情况下生成异常,您可以将其设置为 false。

我还没有彻底测试它,但这是我掌握的关于 Python 中 Google App Engine 的 CRSF 令牌的材料。如果您想详细了解这些天我是如何学习如何使用它的,您可以克隆my repository

【讨论】:

【解决方案2】:

也许您可以尝试使用Django's contrib csrf protection middleware。不确定它是否可以在 AppEngine 中开箱即用,但值得一试。

【讨论】:

    【解决方案3】:

    我做了一个装饰器:

    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
    

    在模板和会话中有令牌

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-16
      • 2020-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多