标签:添加 val === bst block 受益人 break NPU 输入
设置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); } } });
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‘)
标签:添加 val === bst block 受益人 break NPU 输入
原文地址:https://www.cnblogs.com/xiongying4/p/11587826.html