当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《有没有可用的解决方案为Google应用引擎提供xsrf/csrf支持?》经验,为你挑选了3个好方法。

现在,跨网站请求伪造在网上很常见.我在部署在Google App引擎上的我自己的网站上面对此问题.我通过检查访问日志来了解这一点.是否有可用于App引擎的XSRF/CSRF库或其他解决方案.并且,它将为我的网站添加多少负载?



1> Niklas Rosen..:

我使用从basehandler的init请求函数调用的代码

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的画布应用程序,它在FB中作为iframe运行.它使每个请求处理程序都有一个实例变量,如果它为正常情况生成异常,则可以将其设置为false.

我还没有彻底测试它,但这是我在python中使用Google App Engine的CRSF令牌的材料.如果您想查看详细信息,我现在正在学习如何使用它,您可以克隆我的存储库.


实际上,已知对XSRF的cookie方法存在缺陷,不推荐使用.https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet#Prevention_Measures_That_Do_NOT_Work

2> Stan..:

也许你可以尝试使用Django的contrib csrf保护中间件.不确定它是否会在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

在模板和会话中有令牌

推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有