码迷,mamicode.com
首页 > 其他好文 > 详细

csrf

时间:2019-06-24 00:42:00      阅读:110      评论:0      收藏:0      [点我收藏+]

标签:set   键值   两种   imp   端口   class   utils   input   不同的   

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‘,就不会报错了


技术图片
 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

 

csrf

标签:set   键值   两种   imp   端口   class   utils   input   不同的   

原文地址:https://www.cnblogs.com/huangxuanya/p/11074854.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!