是否有任何可用的解决方案为 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 支持?的主要内容,如果未能解决你的问题,请参考以下文章
是否有任何引擎用于获取 twitter xml 或 json 输出? [关闭]