是否有任何可用的解决方案为 Google 应用引擎提供 xsrf/csrf 支持?

Posted

技术标签:

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

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

【问题讨论】:

这里没有任何特定的 App Engine - 为 Python 编写的任何东西都应该可以正常工作。 【参考方案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。

【讨论】:

实际上,已知 XSRF 的 cookie 方法存在缺陷,不推荐使用。 owasp.org/index.php/…【参考方案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

在模板和会话中有令牌

【讨论】:

以上是关于是否有任何可用的解决方案为 Google 应用引擎提供 xsrf/csrf 支持?的主要内容,如果未能解决你的问题,请参考以下文章

容器引擎上的服务访问

Google 应用引擎上的服务器端 javascript

是否有任何引擎用于获取 twitter xml 或 json 输出? [关闭]

应用引擎数据存储中的可用性日期范围查询?

通过eclipse在Google应用引擎中部署时数据库未部署

从 Angular 访问受 Google IAP 保护的 API