csrf 古城微笑少年丶 2021-11-09 18:42 406阅读 0赞 CSRF跨站请求伪造 如何通过csrf校验 <form action="" method="post"> {% csrf_token %} <p>username:<input type="text" name="username"></p> <p>money:<input type="text" name="money"></p> <p>对方账户:<input type="text" name="others"></p> <input type="submit"> </form> <input type="hidden" name="csrfmiddlewaretoken" value="HHxKItr7Z17sZxCAtybnOeV5ne5K3xnvkymENCupB5ylL8h8kWBIiklm9K10paxE"> ajax如何通过csrf校验 # 通过jQuery标签查找获取csrfinput框的键值对,手动加到data参数里面 $('button').click(function () { $.ajax({ url:'', type:'post', data:{'name':'jason','csrfmiddlewaretoken':$('[name=csrfmiddlewaretoken]').val()}, success:function (data) { console.log(data) } }) }) 局部使用与局部禁用csrf from django.views.decorators.csrf import csrf_exempt,csrf_protect @csrf_exempt def home(request): return HttpResponse('home') @csrf_protect def login(request): return HttpResponse('login') #csrf是给用户返回的form表单页面,用户需要提交数据的页面,给他偷偷的筛了一个键值对 #给form表单页面,筛了一个input框,input框中name = csrf...等等,value是动态生成值 #也就是说,每次提交的时候,我先获取我给你筛的这个input框里的name和值到底给我的相不相等 #如果不相等,就把你forbidden掉,意味着你不是我网站出来的页面,相当于你这个页面是你自己写的页面 #写好视图函数之后,还要再起一个django,两个服务器,别人的页面跟你写的页面肯定是两个不同的服务器 #要写把scrf注掉 #将新起的django的端口号该一下,然后将我这个diango的路径复制过去 # 'django.middleware.csrf.CsrfViewMiddleware', # {% scrf_token %} form表单加上这个就算在settings里面加上 # 'django.middleware.csrf.CsrfViewMiddleware',就不会报错了 ![ContractedBlock.gif][] ![ExpandedBlockStart.gif][] 1 #scrif 2 def index(request): 3 print(123) 4 username = request.POST.get('username') 5 money = request.POST.get('money') 6 others = request.POST.get('others') 7 print(request.POST.get('name')) 8 print('%s 给 %s 转了%s 钱' %(username,money,others)) 9 return render(request, 'index.html',locals()) 10 11 12 #这个网站,并不是整体都是要校验csrf的,有几个视图函数也能接受这个post请求,但是不需要 13 #接受这个csrf_token,就有一个装饰器就不需要校验到csrf_token了 14 15 from django.views.decorators.csrf import csrf_exempt,csrf_protect 16 @csrf_exempt 17 def home(request): 18 return HttpResponse('home') #一定要return一个HttpResponse对象 19 20 21 #需要csrf校验的函数 22 @csrf_protect 23 def login(request): 24 return HttpResponse('login') 25 26 27 #CBV 28 from django.utils.decorators import method_decorator 29 30 #装饰csrf装饰器的时候,只有这两种写法 31 @method_decorator(csrf_exempt,name='dispatch') #第一种 32 class Reg(View): 33 @method_decorator(csrf_exempt) #第二种 34 def dispatch(self, request, *args, **kwargs): 35 res = super().dispatch(request,*args,**kwargs) 36 return res 37 def get(self,request): 38 return HttpResponse('get') 39 40 def post(self,request): 41 return HttpResponse('post') views.py ![ContractedBlock.gif][] ![ExpandedBlockStart.gif][] 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script> 7 8 <link href="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet"> 9 <script src="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script> 10 11 <link href="https://cdn.bootcss.com/font-awesome/5.8.2/css/fontawesome.min.css" rel="stylesheet"> 12 <script src="https://cdn.bootcss.com/font-awesome/5.8.2/js/fontawesome.min.js"></script> 13 14 <link href="https://cdn.bootcss.com/sweetalert/1.1.3/sweetalert.min.css" rel="stylesheet"> 15 <script src="https://cdn.bootcss.com/sweetalert/2.1.2/sweetalert.min.js"></script> 16 </head> 17 <body> 18 { #<h1>hello</h1>#} 19 <h1>正经网站</h1> 20 <!--csrif--> 21 { #<form action="" method="post">#} 22 { # {% csrf_token %}#} 23 { # <!--hidden隐藏 name取的名字csrf.. value是随机字符串,#} 24 { # 这个随机字符串是每次请求页面都会动态刷新,也就意味着你下次提交的时候,#} 25 { # input里的值我后端可以拿到,拿到之后根据这个name拿到这个value,#} 26 { # 然后比对以下这个value跟我之前那个value访问的一不一样,如果不一样就forbidden掉-->#} 27 { # <input type="text" hidden name="csrftoken" value="jdfverffsddkmcf">#} 28 { # <p>username:<input type="text" name="username"></p>#} 29 { # <p>password:<input type="text" name="money"></p>#} 30 { # <p>对方账号:<input type="text" name="others"></p>#} 31 { # <input type="submit">#} 32 { #</form>#} 33 { #<button id="1">ajaz请求</button>#} 34 { #<script>#} 35 { # $('#1').click(function(){#} 36 { # $.ajax({#} 37 { # url:'',#} 38 { # type:'post',#} 39 { # data:{'name':'jason','csrfmiddlewaretoken': $('[name=csrfmiddlewaretoken]').val()},#} 40 { # success:function(data){#} 41 { # console.log(data) }#} 42 { # })#} 43 { # })#} 44 { #</script>#} 45 46 47 48 { #<!--没写 {% csrf_token %} 加装饰器的视图函数前端页面-->#} 49 { #<form action="/home/" method="post">#} 50 { # <!--hidden隐藏 name取的名字csrf.. value是随机字符串,#} 51 { # 这个随机字符串是每次请求页面都会动态刷新,也就意味着你下次提交的时候,#} 52 { # input里的值我后端可以拿到,拿到之后根据这个name拿到这个value,#} 53 { # 然后比对以下这个value跟我之前那个value访问的一不一样,如果不一样就forbidden掉-->#} 54 { # <input type="text" hidden name="csrftoken" value="jdfverffsddkmcf">#} 55 { # <p>username:<input type="text" name="username"></p>#} 56 { # <p>password:<input type="text" name="money"></p>#} 57 { # <p>对方账号:<input type="text" name="others"></p>#} 58 { # <input type="submit">#} 59 { #</form>#} 60 { #<button id="1">ajaz请求</button>#} 61 { #<script>#} 62 { # $('#1').click(function(){#} 63 { # $.ajax({#} 64 { # url:'',#} 65 { # type:'post',#} 66 { # data:{'name':'jason','csrfmiddlewaretoken': $('[name=csrfmiddlewaretoken]').val()},#} 67 { # success:function(data){#} 68 { # console.log(data) }#} 69 { # })#} 70 { # })#} 71 { #</script>#} 72 73 74 { #<!--没写 {% csrf_token %} 加装饰器的视图函数前端页面(scrf_protect)-->#} 75 <form action="/login/" method="post"> 76 <!--hidden隐藏 name取的名字csrf.. value是随机字符串, 77 这个随机字符串是每次请求页面都会动态刷新,也就意味着你下次提交的时候, 78 input里的值我后端可以拿到,拿到之后根据这个name拿到这个value, 79 然后比对以下这个value跟我之前那个value访问的一不一样,如果不一样就forbidden掉--> 80 <input type="text" hidden name="csrftoken" value="jdfverffsddkmcf"> 81 <p>username:<input type="text" name="username"></p> 82 <p>password:<input type="text" name="money"></p> 83 <p>对方账号:<input type="text" name="others"></p> 84 <input type="submit"> 85 </form> 86 <button id="1">ajaz请求</button> 87 <script> 88 $('#1').click(function(){ 89 $.ajax({ 90 url:'', 91 type:'post', 92 data:{ 'name':'jason','csrfmiddlewaretoken': $('[name=csrfmiddlewaretoken]').val()}, 93 success:function(data){ 94 console.log(data) } 95 }) 96 }) 97 </script> 98 99 100 </body> 101 </html> html 打开第二个服务器,将端口号进行修改 ![ContractedBlock.gif][] ![ExpandedBlockStart.gif][] 1 from django.shortcuts import render 2 3 # Create your views here. 4 5 def index(request): 6 return render(request ,'index.html') Views.py ![ContractedBlock.gif][] ![ExpandedBlockStart.gif][] 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script> 7 8 <link href="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet"> 9 <script src="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script> 10 11 <link href="https://cdn.bootcss.com/font-awesome/5.8.2/css/fontawesome.min.css" rel="stylesheet"> 12 <script src="https://cdn.bootcss.com/font-awesome/5.8.2/js/fontawesome.min.js"></script> 13 14 <link href="https://cdn.bootcss.com/sweetalert/1.1.3/sweetalert.min.css" rel="stylesheet"> 15 <script src="https://cdn.bootcss.com/sweetalert/2.1.2/sweetalert.min.js"></script> 16 </head> 17 <body> 18 <h1>钓鱼网站</h1> 19 <form action="http://127.0.0.1:8000/index" method="post"> 20 <p>username:<input type="text" name="username"></p> 21 22 <p>money:<input type="text" name="money"></p> 23 <p>对方账号:<input type="text"></p> 24 <input type="text" name="others" value="jason" style="display: none"> 25 <input type="submit"> 26 </form> 27 28 </body> 29 </html> index.html 转载于:https://www.cnblogs.com/huangxuanya/p/11074854.html [ContractedBlock.gif]: https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif [ExpandedBlockStart.gif]: /images/20211109/587beb8bcdd44b359bfdb8789d5209ea.png
相关 CSRF漏洞 CSRF漏洞概述 > CSRF(Cross-site request forgery ,跨站请求伪造),也被称为 one click attack。是一种对网站的恶意利用 左手的ㄟ右手/ 2023年09月30日 08:03/ 0 赞/ 38 阅读
相关 csrf(csrf请求非法是什么意思) CSRF具体操作我想在Windows7安装一个SQLServer 这个按正常步骤安装就可以了啊,不知道你困惑在哪里。。。。 ![csrf(csrf请求非法是什么意思)\ 缺乏、安全感/ 2023年09月26日 13:08/ 0 赞/ 119 阅读
相关 csrf CSRF:(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF r囧r小猫/ 2023年06月01日 05:50/ 0 赞/ 25 阅读
相关 CSRF详解 What's CSRF? CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session R ╰半橙微兮°/ 2022年12月17日 08:54/ 0 赞/ 170 阅读
相关 CSRF 一.CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session 谁借莪1个温暖的怀抱¢/ 2022年08月27日 08:57/ 0 赞/ 197 阅读
相关 csrf好 CSRF全程 Cross Site Request Forgery, 跨站域请求伪造.这种攻击方式相对于XSS,SQL注入等攻击方式比较晚被发现,今天就来讲解下这种攻击方式以及 男娘i/ 2022年06月13日 23:09/ 0 赞/ 207 阅读
相关 CSRF 3、CSRF攻击原理 那么,上面那段话到底是什么意思呢?我们先来看session的工作机制。 session我想大家都不陌生, 迈不过友情╰/ 2022年06月13日 23:06/ 0 赞/ 245 阅读
相关 CSRF攻击 CSRF 背景与介绍 CSRF(Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,它在 2007 年曾被列为互联网 20 大安 矫情吗;*/ 2022年05月27日 02:46/ 0 赞/ 298 阅读
相关 csrf CSRF跨站请求伪造 如何通过csrf校验 <form action="" method="post"> { 古城微笑少年丶/ 2021年11月09日 18:42/ 0 赞/ 407 阅读
还没有评论,来说两句吧...