Django框架之CSRF使用篇
目录
全局使用
Django项目配置中默认全局使用csrf中间件,注释掉即可不再使用,
不过不建议如此这样不安全。
设置csrf token
表单使用
在form表单中直接使用csrf token模板标签,在提交时自动csrf验证。
{% csrf_token %}
脚本使用
在项目中,很多操作需要ajax来操作提交。
通过查看源代码可看到csrf token标签是在表单中创造了一个名称为csrfmiddlewaretoken(默认情况)的隐藏输入框。
Js获取并设置token
let csrf = $('input[name="csrfmiddlewaretoken"]').val()
$.ajax({
type: 'POST',
url: "/media_list",
data: {csrfmiddlewaretoken:csrf},
dataType: 'json',
success: function (data) {
// 将mp3list赋值给this.songs
this.songs = data.list;
// 调用渲染歌曲列表的方法
this.renderSongList();
}.bind(this),
error: function (e) {
console.log("ERROR : ", e);
}
});
单独豁免
有时候方法不想设置csrf保护,这时候就可以使用csrf装饰器。
引入csrf类库
from django.views.decorators.csrf import csrf_exempt
设置单独豁免csrf
使用csrf_exempt来单独豁免此方法不进行csrf验证
@csrf_exempt
def upload_music(request):
单独保护
比较适合,大部分函数方法不需要验证csrf,只有少部分需要验证的情况下。
关闭全局csrf
修改settings.py中中间件处,注释掉csrf中间件。
引入csrf库
from django.views.decorators.csrf import csrf_protect
设置函数保护
设置视图中的方法,使用csrf_protect装饰器,来对upload_music方法单独进行csrf验证。
@csrf_protect
def upload_music(request):
csrf token配置
在settings.py 中可对csrf属性设置,可设置属性为:
CSRF_HEADER_NAME = 'HTTP_X_CSRF_AARONTOKEN'
CSRF_COOKIE_SAMESITE = 'Strict'
CSRF_COOKIE_NAME = 'MyCookie'
CSRF_COOKIE_HTTPONLY = False
CSRF_COOKIE_SECURE = False
CSRF_TRUSTED_ORIGINS = []
总结
Csrf验证在项目中对于安全非常重要,通过上述的csrf设置与使用,对django框架又增加了一些了解,在使用上可以更加的灵活。