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