开公司先建设网站,政务门户网站建设规范,分类信息网站成都搭建,网站设计营销CSRF
即跨站请求攻击
跨站请求伪造csrf钓鱼网站本质搭建一个跟正常网站一模一样的页面用户在该页面上完成转账功能转账的请求确实是朝着正常网站的服务端提交唯一不同的在于收款账户人不同给用户书写form表单 对方账户的input没有name属性你自己悄悄提前写好了一个具有默认的…CSRF
即跨站请求攻击
跨站请求伪造csrf钓鱼网站本质搭建一个跟正常网站一模一样的页面用户在该页面上完成转账功能转账的请求确实是朝着正常网站的服务端提交唯一不同的在于收款账户人不同给用户书写form表单 对方账户的input没有name属性你自己悄悄提前写好了一个具有默认的并且是隐藏的具有name属性的input模拟钓鱼网站 form表单中csrf校验
form action methodpost{% csrf_token %}old_password:input typetext nameold_passwordnew_password:input typetext namenew_passwordinput typesubmit/form AJAX csrf校验
第一种方式自己手动获取
$(#d1).click(function () {$.ajax({url:,type:post,// 第一种方式 自己手动获取
data:{username:jason,csrfmiddlewaretoken:$(input[namecsrfmiddlewaretoken]).val()},success:function (data) {alert(data)}})})第二种方式利用模板语法
$(#d1).click(function () {$.ajax({url:,type:post,// 第二种方式 利用模板语法data:{username:jason,csrfmiddlewaretoken:{{ csrf_token }}},success:function (data) {alert(data)}})})第三种方式通用方式 引入外部js文件 官网提供的方式
$(#d1).click(function () {$.ajax({url:,type:post,##script src{% static myset.js %}/scriptsuccess:function (data) {alert(data)}})})js文件拷贝配置在静态文件中
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 protectionreturn (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}$.ajaxSetup({beforeSend: function (xhr, settings) {if (!csrfSafeMethod(settings.type) !this.crossDomain) {xhr.setRequestHeader(X-CSRFToken, csrftoken);}}
});CSRF相关装饰器
from django.views.decorators.csrf import csrf_exempt, csrf_protect
from django.utils.decorators import method_decoratorcsrf_exempt # 不校验csrf
csrf_protect # 校验
使用方法
在视图函数头上装 # csrf_exempt # 不校验csrf
# csrf_protect # 校验, 先注释中间件scrf
def transfer(srequest):return HttpResponse(transfer)CBV 只能在dispatch加 class MyHome(View): method_decorator(csrf_protect) # 第三种 类中所有的方法都装def dispatch(self, request, *args, **kwargs):return super().dispatch(request,*args,**kwargs)def post(self,request):return HttpResponse(post)def get(self,request):return HttpResponse(get) 参考https://www.cnblogs.com/guyouyin123/p/12194181.html