CSRF(Cross-site request forgery)跨站请求伪造

django为用户实现防止跨站请求伪造的功能,通过中间件 django.middleware.csrf.CsrfViewMiddleware 来完成。而对于django中设置防跨站请求伪造功能有分为全局和局部。

全局

中间件 django.middleware.csrf.CsrfViewMiddleware

局部

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

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

应用

Form提交(CSRF)

在表单中加入{% csrf_token %}

csrf.html:

<form action="/csrf.html" method="post">
{% csrf_token %}
<input type="text" name="username" placeholder="username">
<input type="submit" value="form submit">
</form>
Ajax提交(CSRF)

通过Ajax提交表单时需要处理请求头

CSRF请求头: 'X-CSRFToken'

csrf.html:

<form>
<input type="text" name="username" id="username" placeholder="username">
<input type="submit" id="submit" value="ajax submit">
</form>
<script src="/static/jQuery.js"></script>
<script src="/static/jquery.cookie.js"></script>
<script src="/static/csrf.js"></script>

csrf.js:

通过添加 headers

$(function () {
$('#submit').click(function () {
$.ajax({
url: '/csrf.html',
type: 'POST',
data: {'username': $('#username').val()},
headers: {'X-CSRFToken': $.cookie('csrftoken')},
success: function (data) {
alert(data)
}
})
});
});

通过配置 ajax

$(function () {
$.ajaxSetup({
beforeSend: function (xhr, settings) {
xhr.setRequestHeader('X-CSRFToken', $.cookie('csrftoken'))
}
});
$('#submit').click(function () {
$.ajax({
url: '/csrf.html',
type: 'POST',
data: {'username': $('#username').val()},
success: function (data) {
alert(data)
}
})
});
});

最新文章

  1. visual studio code
  2. 强联通 HDU 2767 3836
  3. UML基础:统一建模语言简介
  4. [LeetCode]题解(python):093 Restore IP Addresses
  5. apache开源项目 -- tez
  6. Git CMD - reset: Reset current HEAD to the specified state
  7. VS打包
  8. CI源码学习 一步一步重写 CodeIgniter 框架
  9. showMonth
  10. 【Android病毒分析报告】 - ZooTiger “集恶意推广、隐私窃取、恶意吸费于一体”
  11. nyoj 927 The partial sum problem(dfs)
  12. 使用CSS3伸缩盒实现图片垂直居中
  13. struts2+hibernate+spring配置版框架搭建以及简单测试(方便脑补)
  14. (转)Java线程:新特征-原子量,障碍器
  15. JavaIO
  16. 19、Squid代理服务器
  17. js 錯誤
  18. java虚拟内存设置 防止内存溢出 OutOfMemory【转】【原】
  19. Java反射在Android中的使用
  20. virtualbox pxe启动

热门文章

  1. xpath:
  2. 【Linux命令】setterm命令修改虚拟机颜色显示(目录及背景颜色)
  3. Docker容器 MySQL中文乱码解决方案
  4. My97Datepicker 日历控件的使用
  5. Kafka常见错误整理(不断更新中)
  6. idea创建maven的web项目
  7. Koa + GraphQL 示例
  8. mysql - 锁及事务的认识
  9. CSS @charset规则
  10. HTML颜色名称大全