ajax 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){

        }
});
原文地址:https://www.cnblogs.com/zenan/p/10655169.html