csrf
Posted huangxuanya
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了csrf相关的知识,希望对你有一定的参考价值。
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‘)
以上是关于csrf的主要内容,如果未能解决你的问题,请参考以下文章