淘先锋技术网

首页 1 2 3 4 5 6 7

Django框架之CSRF使用篇

目录

全局使用

设置csrf token

表单使用

脚本使用

单独豁免

引入csrf类库

设置单独豁免csrf

单独保护

关闭全局csrf

引入csrf库

设置函数保护

csrf token配置

总结


全局使用

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框架又增加了一些了解,在使用上可以更加的灵活。