CSRF_TOKEN跨站请求伪造
CSRF或者XSRF:跨站请求伪造
攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的
防范:CSRF攻击防范
-Referer:上一次访问的地址(图片防盗链)
https://www.lagou.com/gongsi/
-在请求地址中添加 token 并验证
-在 HTTP 头中自定义属性并验证
-把随机字符串放在请求体中
Django中处理csrf
//form表单
<form action="" method="post">
{% csrf_token %}
<p>给谁转:<input type="text" name="to_user" id="id_name"></p>
<p>转多少:<input type="text" name="money" id="id_money"></p>
<input type="submit" value="转账">
</form>
//ajax提交:两种方案
$.ajax({
url: '/transfer/',
method: 'post',
//方法一
data: {
to_user: $('#id_name').val(),
money:$('#id_money').val(),
csrfmiddlewaretoken:$('[name="csrfmiddlewaretoken"]').val()
},
//方法二
data: {
to_user: $('#id_name').val(),
money: $('#id_money').val(),
csrfmiddlewaretoken:'{{csrf_token}}'},
success: function (data) {console.log(data)}
})
cookie的处理
<script src="/static/jquery.cookie.js"></script>
var token=$.cookie('csrftoken')
csrf放到请求头中
$.ajax({
url: '/',
headers:{'X-CSRFToken':token},
type: 'post',
data: {
'name': $('[name="name"]').val(),
'password': $("#pwd").val(),
},
success: function (data) {
console.log(data)
}
})
全局使用csrf,局部视图函数禁用csrf
1 在视图函数上加装饰器
from django.views.decorators.csrf import csrf_exempt,csrf_protect
# 不再检测,局部禁用(前提是全站使用)
@csrf_exempt
def csrf_token(request):
# 检测,局部使用(前提是全站禁用)
@csrf_protect
def csrf_token(request):