像Django模板中的Mako csrf_token

时间:2011-11-12 18:00:12

标签: django django-templates mako

我最近的Django项目我使用的是mako模板。

关于Cross Site Request Forgery CSRF。

在django模板中,标记{% csrf_token %}可以防止黑客攻击。

mako模板怎么样?有csrf_token的模拟还是有另一种保护机制???

谢谢!

2 个答案:

答案 0 :(得分:3)

我今天遇到了同样的问题(这就是为什么我最终来到这里)。我找到了一个解决方案,至少是我想要做的,它通过HTML表单将一些POST数据传递给另一个视图。这是:

  1. 从您的第一个视图中,获取CSRF令牌并将其添加到您的(Mako)上下文中:

    from djangomako.shortcuts import render_to_response as render  
    from django.core.context_processors import csrf
    
    def first_view(request):  
        """This view generates a form whose action is 'second_view'."""  
        context = { "csrftoken": csrf(request)["csrf_token"] }  
        return render("path/to/yourtemplate.html", context)  
    
  2. yourtemplate.html的表单必须有一个名为“csrfmiddlewaretoken”的字段,其值为CSRF令牌,我们将其置于上下文中作为“csrftoken”。如:

    <input type="hidden" name="csrfmiddlewaretoken" value="${ csrftoken }" />
    
  3. 来源:Cross Site Request Forgery protection (Django 1.5 Docs)

答案 1 :(得分:1)

some sample code at Django Snippets看起来这样做,虽然根据评论判断,你可能需要稍微改变一下。如果您遇到问题,基本上要确保复制the Django stock CSRF tag(点击链接,从第87行开始)。