csrf跨站请求伪造
Posted xiongying4
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了csrf跨站请求伪造相关的知识,希望对你有一定的参考价值。
设置value的值为钓鱼网站受益人账号
网站会给返回给用户的form表单页面 偷偷塞一个随机字符串
请求到来的时候 会先比对随机字符串是否一致 如果不一致 直接拒绝(403)
该随机字符串有以下特点
1.同一个浏览器每一次访问都不一样
2.不同浏览器绝对不会重复
第一种方法
正规网站中form表单发送post请求的时候(csrf中间件就不需要注释了)
添加:
% csrf_token %
第二种方法
ajax发送post请求 如何避免csrf校验
function getCookie(name) var cookieValue = null; if (document.cookie && document.cookie !== ‘‘) var cookies = document.cookie.split(‘;‘); for (var i = 0; i < cookies.length; i++) var cookie = jQuery.trim(cookies[i]); // Does this cookie string begin with the name we want? if (cookie.substring(0, name.length + 1) === (name + ‘=‘)) cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); break; return cookieValue; var csrftoken = getCookie(‘csrftoken‘); function csrfSafeMethod(method) // these HTTP methods do not require CSRF protection return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method)); $.ajaxSetup( beforeSend: function (xhr, settings) if (!csrfSafeMethod(settings.type) && !this.crossDomain) xhr.setRequestHeader("X-CSRFToken", csrftoken); );
csrf_exempt(不校验)
from django.utils.decorators import method_decorator from django.views.decorators.csrf import csrf_exempt,csrf_protect
@method_decorator(csrf_protect,name=‘post‘) # 有效的
第二种方式
@method_decorator(csrf_protect) # 有效的 def post(self,request): return HttpResponse(‘post‘)
第三种方式
@method_decorator(csrf_protect) def dispatch(self, request, *args, **kwargs): res = super().dispatch(request, *args, **kwargs) return res def get(self,request): return HttpResponse(‘get‘)
@method_decorator(csrf_exempt,name=‘dispatch‘) # 第二种可以不校验的方式 class MyView(View): # @method_decorator(csrf_exempt) # 第一种可以不校验的方式 def dispatch(self, request, *args, **kwargs): res = super().dispatch(request, *args, **kwargs) return res def get(self,request): return HttpResponse(‘get‘) def post(self,request): return HttpResponse(‘post‘)
以上是关于csrf跨站请求伪造的主要内容,如果未能解决你的问题,请参考以下文章