csrftoken

本文深入探讨了CSRF(跨站请求伪造)攻击原理及防御措施,详细介绍了如何使用csrftoken来保护Web应用程序免受此类攻击。文章覆盖了表单提交、AJAX请求中的csrftoken使用方法,以及Django装饰器的配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

csrftoken

CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。攻击者通过HTTP请求江数据传送到服务器,从而盗取回话的cookie。盗取回话cookie之后,攻击者不仅可以获取用户的信息,还可以修改该cookie关联的账户信息。

解决csrf攻击的最直接的办法就是生成一个随机的csrftoken值,保存在用户的页面上,每次请求都带着这个值过来完成校验。

form表单提交

form表单进行csrftoken验证时需要在表单内部添加{% csrf_token %}

<form action="" method="post">
    {% csrf_token %}
    <input type="text" id="uid">用户名<br>
    <input type="password" id="pwd">密码<br>
    <input type="submit" value="提交">
</form>

{% csrf_token %}会自动变成一个隐藏的input标签,form表单提交时会将这个隐藏的标签的数据也进行提交

<input type="hidden" name="csrfmiddlewaretoken" value="d8tUZvCD6pznb2ENdab0tOli0zcnmt1UQm0dUG0zqt6v9Nb4DA4Mi9FcyKnpBj6K">

ajax提交

ajax进行提交时,也需要在页面添加{% csrf_token %},因为是需要通过js获取值,所以添加到form表单外部也没问题

方式一

$("#bu").click(function () {
       var uid = $("#uid").val();
       var pwd = $("#pwd").val();
       $.ajax({
           url:"/login/",
           type:"post",
           data:{
               "uid":uid,
               "pwd":pwd,
               "csrfmiddlewaretoken":$("[name='csrfmiddlewaretoken']").val() 
               //手动获取{% csrf_token %}转换成隐藏input标签的值
           },
           success:function (res) {console.log(res)}
       })
    });

方式二

$("#bu").click(function () {
       var uid = $("#uid").val();
       var pwd = $("#pwd").val();
       $.ajax({
           url:"/login/",
           type:"post",
           data:{
               "uid":uid,
               "pwd":pwd,
                csrfmiddlewaretoken:"{{ csrf_token }}" // 获取csrf_token
           },
           success:function (res) {console.log(res)}
       })
    });

方式三

<script type="text/javascript" src="/static/js/jquery.cookie.js"></script> //导入jquery.cookie.js
<script>
    $("#bu").click(function () {
       var uid = $("#uid").val();
       var pwd = $("#pwd").val();
       $.ajax({
            //自定制请求头
           url:"/login/",
           type:"post",
           data:{"uid":uid, "pwd":pwd,},
           headers:{"X-CSRFToken":$.cookie("csrftoken")},
           success:function (res) {console.log(res)}
       })
    });
</script>

装饰器

from django.views.decorators.csrf import csrf_exempt,csrf_protect

# 指定次函数不进行csrf认证
@csrf_exempt
def index(request):
	pass	

# 指定次函数必须进行csrf认证
@csrf_protect
def index(request):
	pass	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值