Django 的 CSRF 中间件是一个用来防止 CSRF 攻击的功能。一般情况下,启用这个功能很简单,只需要遵循以下步骤即可:
- 确保在项目的
settings.py
文件中,中间件的列表中包含了'django.middleware.csrf.CsrfViewMiddleware'
:
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
- 使用 POST 方法的表单,如果请求的 URL 是项目内部的 URL,那就要在模板中,加上
{% csrf_token %}
标签:
<form method="get" action="">
{% csrf_token %}
</form>
如果请求的 URL 是外部的 URL,那就不能添加这个标签,如果添加了的话就会泄露 CSRF 令牌。
- 在视图函数中,要确保使用
RequestContext
来返回相应内容,这样{% csrf_token %}
才能生效。render()
函数、通用视图、contrib app 都是使用RequestContext
的。
但是如果要在使用 AJAX 请求时启用 Django 的 CSRF 保护机制,还需要做一些额外的操作。