python学习笔记项目_python 学习笔记十九 django项目bbs论坛

标签:

跨站请求伪造保护

CSRF 中间件和模板标签提供对跨站请求伪造简单易用的防护。某些恶意网站上包含链接、表单按钮或者JavaScript ,它们会利用登录过的用户在浏览器中的认证信息试图在你的网站上完成某些操作,这就是跨站攻击。还有另外一种相关的攻击叫做“登录CSRF”,攻击站点触发用户浏览器用其它人的认证信息登录到其它站点。

全局:

中间件 django.middleware.csrf.CsrfViewMiddleware

局部:

@csrf_protect,为当前函数强制设置防跨站请求伪造功能,即便settings中没有设置全局中间件。

@csrf_exempt,取消当前函数防跨站请求伪造功能,即便settings中设置了全局中间件。

注:from django.views.decorators.csrf import csrf_exempt,csrf_protect

使用csrf:

1.普通表单

veiw中设置返回值:return render_to_response(‘Account/Login.html‘,data,context=RequestContext(request))

或者return render(request, ‘xxx.html‘, data)

html中设置Token:

{% csrf_token %}

2.ajax

虽然上面的方法可以用于AJAX POST 请求,但是它不太方便:你必须记住在每个POST 请求的数据中传递CSRF token。

由于这个原因,还有另外一种方法:在每个XMLHttpRequest 上设置一个自定义的X-CSRFToken头部,其值为CSRF token。

注:

CSRF token 的Cookie 默认叫做csrftoken,你可以通过CSRF_COOKIE_NAME设置自定义它的名字。

CSRF header 默认叫做HTTP_X_CSRFTOKEN,你可以通过CSRF_HEADER_NAME设置自定义它的名字。

//using jQuery

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;

}

}

}returncookieValue;

}var csrftoken = getCookie(‘csrftoken‘);

var csrftoken = Cookies.get(‘csrftoken‘);

实例:

from django.template.context import RequestContext

# Create your views here.

def test(request):

if request.method == ‘POST‘:

print request.POST

return HttpResponse(‘ok‘)

return render_to_response(‘app01/test.html‘,context=RequestContext(request))

views

varcsrftoken=Cookies.get(‘csrftoken‘);functioncsrfSafeMethod(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);

}

}

});functionDo(){

$.ajax({

url:"/app01/test/",

data:{id:1},

type:‘POST‘,

success:function(data){

console.log(data);

}

});

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值