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)
views.py

 

以上是关于csrf的主要内容,如果未能解决你的问题,请参考以下文章

CSRF的攻与防

CSRF的攻与防

csrf攻击

Django学习手册 - csrf

CSRF攻击原理

CSRF攻防之道