django-csrf跨站请求伪造

django-csrf跨站请求伪造[Python基础]

django-csrf跨站请求伪造

一、什么是跨站请求伪造

  跨站请求伪造。英文简称:csrf,英文全称:cross-site request forgery

  举个栗子:钓鱼网站

    有一个和某银行一摸一样的虚假网站,用户在该页面完成转账功能,转账的请求是朝着银行的真实网站的服务端提交,这两个网站提交数据的唯一不同在于收款账户人不同,在虚假网站书写收款人的form表单,此页面的input输入框没有name属性,虚假网站开发人员提前写好一个具有默认的并且是隐藏的具有name属性的input,所以向银行真实服务端提交数据的时候,默认就是将你的金额转给了默认写好的账户,这种虚假网站就叫做钓鱼网站,这种方式叫做跨站请求伪造。

  那么如何开启csrf校验,防止此类事情出现呢?

 

 

二、django如何开启csrf校验

  csrf是django的默认中间件,默认是开启的,对前端请求进行校验;将其注释即关闭校验。

  但是在开启情况下,前端向后台提交数据会被阻拦报出 403 forbidden 错误。那么如何通过这种校验呢?

  PS:关闭csrf中间件即可通过校验,但是出于数据安全考虑,不建议此类操作,可做简单测试使用,不推荐使用于生产环境。下文不对此方法进行叙述。

 

 

三、如何正确通过csrf校验

1、前端的form表单如何通过csrf校验

  在form表单内书写一个{% csrf_token %}即可,例:

  这样的话,后端会返回给前端一串随机字符串,前端向后端再次发送数据时,后端的csrf中间件会对这一串字符串进行校验,校验成功正确即返回数据,校验不成功即 403 forbidden 报错。

 

2、ajax如何通过csrf校验

  第一种:手动获取

$.ajax({
    url: "",
    type: "post",
    // 第一种方式:手动获取
    data:{"username":"tom", "csrfmiddlewaretoken":$("input[name="csrfmiddlewaretoken"]").val()}
    success:function (data) {
        alert(data)
    }
})
hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » django-csrf跨站请求伪造