现在,跨站点请求伪造在网络上很常见。我在部署在 Google App 引擎上的自己的站点中面临这个问题。我通过检查访问日志了解了这一点。是否有任何 XSRF/CSRF 库或其他可用于我可以使用的 App 引擎的解决方案。而且,它会给我的网站增加多少负载?
问问题
3483 次
3 回答
10
我使用从 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 的示例画布应用程序中获取它,其中包含处理 crsf 的代码。我实际上并没有对其进行太多测试,但我将它包含在我的项目中,因为我有一个用于 Facebook 的画布应用程序,它作为 iframe 在 FB 中运行。它使每个请求处理程序都有一个实例变量,如果它在正常情况下生成异常,您可以将其设置为 false。
我还没有彻底测试它,但这是我在 python 中关于 Google App Engine 的 CRSF 令牌的材料。如果您想详细了解这些天我是如何学习如何使用它的,您可以克隆我的存储库。
于 2011-12-17T13:49:15.633 回答
6
也许你可以尝试使用Django 的 contrib csrf protection middleware。不确定它是否可以在 AppEngine 中开箱即用,但值得一试。
于 2011-12-19T21:52:34.283 回答
5
我做了一个装饰器:
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
在模板和会话中有令牌
于 2013-12-04T21:24:36.197 回答