2011-11-12 20 views
2

最近のDjangoプロジェクト私はmakoテンプレートを使用しています。DjangoのテンプレートのようなMakoのcsrf_token

クロスサイトリクエスト偽造についてCSRF。

djangoテンプレートには、ハッカーから保護するためのタグ{% csrf_token %}があります。

makoテンプレートはどうですか? csrf_tokenのアナログがあるか、別の保護メカニズムがありますか?

ありがとうございます!

答えて

1

コメントがあると判断しても、これを行うように見えるsome sample code at Django Snippetsがあります。ちょっと手を加える必要があるかもしれません。問題がある場合は、基本的にはthe Django stock CSRF tagを複製していることを確認してください(リンクをクリックして、87行目を開始してください)。

+0

は、あなたが知ってはいけない - 多分マコ、そのような行動を必要としません?実際、私はmakoのドキュメントでセキュリティについて何も見つけることができませんでした... –

+2

Makoはテンプレート言語であり、CSRFが停止するセキュリティ問題は、Mako対Djangoの株価テンプレート言語対Jinjaまたはその他あなたが選ぶかもしれないテンプレート言語。 –

3

今日は同じ問題が発生しました(これが私がここで終わった理由です)。私は少なくとも、私がやりたがって、POST形式のデータをHTML形式で別のビューに渡すというソリューションを見つけました。ここでは、次のとおりです。

  1. あなたの第一の視点から、CSRFトークンを取得し、(まこ)コンテキストに追加します。

    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 }" /> 
    

出典:Cross Site Request Forgery protection (Django 1.5 Docs)

関連する問題