django csrftoken

CSRF(跨站请求伪造)

背景知识:浏览器在发送请求的时候,会自动带上当前域名对应的cookie内容,发送给服务端,不管这个请求是来源A网站还是其它网站,只要请求的是A网站的链接,就会带上A网站的cookie。浏览器的同源策略并不能阻止CSRF攻击,因为浏览器不会停止js发送请求到服务端,只是在必要的时候拦截了响应的内容。或者说浏览器收到响应之前它不知道该不该拒绝。

攻击过程:

假设abc用户登录银行的网站进行操作, 同时也访问了攻击者预先设置好的网站。
abc点击了攻击者网站的某一个链接,这个链接是http://www.bank.com/xxxx指向银行,银行服务器会根据这个链接携带的参数会进行转账操作。
银行服务器在执行转账操作之前会进行SESSION验证是否登录, 但是由于abc已经登录了银行网站,攻击者的链接也是www.bank.com.所以攻击的链接就会携带session id到银行服务器。
由于session id是正确的,所以银行会判断操作是由本人发起的,执行转账操作。

django 表单

<form>
{% csrf_token %}
<input type="password" name="password" value=""> </form>

ajax请求

模板文件方式

$.ajaxSetup({
data: {csrfmiddlewaretoken: '{{ csrf_token }}' },
}); $.ajax({
type:"POST",
url:"/basic/verifycode/",
datatype:"json",
data:{
"tel_phone":$("#tel_phone").val(),
"captcha":$("#captcha").val(),
},
async:true,
success:function(result){
},
error:function(result){
}
});

  

ajax自带

var csrftoken = $("input[name$='csrfmiddlewaretoken']").val();
$.ajax({
type:"POST",
url:"/basic/verifycode/",
datatype:"json",
data:{
"tel_phone":$("#tel_phone").val(),
"captcha":$("#captcha").val(),
},
headers:{'X-CSRFToken':csrftoken },
async:true,
success:function(result){
var s = eval(result);
var msg = s.msg;
console.log(msg);
},
error:function(result){ }
});
上一篇:【转载】VS2010+VMWare8+VisualDDK1.5.6 创建并调试驱动程序 - 完全教程


下一篇:【ORACLE】ORA-12537 问题整理