2012-03-29 8 views
2

を読んでいる間に、リンクまたはフォームを使用してdjangobook chapterを読んでいる間に、ログアウトリンクが悪意のあるサイトの隠れた場所に置かれているcsrf攻撃を記述するセクションに出くわしました。djangoログアウトは、

<a href="{% url my_logout %}" > Logout </a> 

my_logoutのURLポイント​​

urlpatterns=patterns('django.contrib.auth.views', 
url(r'^logout/$', 'logout_then_login', {}, name = 'my_logout'), 
) 

へ:私はジャンゴを使用して作成したWebアプリケーションで

、私は同様のログアウト・リンクに

base.htmlを使用していましたcsrf攻撃について読んだら、悪意のあるサイトが私にも問題を引き起こす恐れがあるので、フォームを使用してログアウトしたいと思います。

は、私はこの

base.html好きと考えていた。今

... 

    <form method="post" action=".">{% csrf_token %} 
     <input type="hidden" name="next" value="{{next}}" /> 
     <input type="hidden" name="confirm" value="true" /> 
     <input type="submit" value="Logout" /> 
    </form> 
... 

、私は隠された変数を処理していた場合には(confirmをこのフォームを処理するためのビューを作成する必要がありますか?ログアウトを行う必要があるかどうかを確認してください。next)、​​メソッドを使用することはできますか?

私はこれを正しく実行しているかどうか誰かに教えてください。事前に

おかげ

答えて

3

あなたも

from django.views.decorators.cache import never_cache 
from django.views.decorators.csrf import csrf_protect 
from django.views.decorators.http import require_POST 

@csrf_protect 
@require_POST 
@never_cache 
def safer_logout(request): 
    # 'confirm' is useless here, POST implies 'do it' 
    return logout_then_login(request, request.POST.get('next')) 

ようにそれをラップすることができ、SESSION_COOKIE_HTTPONLY

@ClaudeVedoviniはちょうど私がそれを編集したとき、誰かが速い入力されたと感じ
+0

、ヘクタール= P – okm

+0

Iを使用することを検討してくださいほとんど同じ答えを投稿しようとしていました:) とにかく、私はこれが本当に便利だとは思わないと付け加えます。 CSRFエクスプロイトは、ログインしているアプリケーションでアクションを完了する際にユーザーを欺くために使用されますが、強制的にログアウトする必要はありません。 –

+0

@ClaudeVedoviniはい、攻撃者があなたをしばらくログアウトしようとしたり、新しいログイン手順を待っているときに有害なことがあります – okm

関連する問題