【ThinkPHP5初体验(二)1】CSRF防范原理(thinkphp5 CSRF ajax令牌)

本文深入探讨了CSRF攻击原理及防御策略,重点讲解了如何通过使用存储在session中的令牌(token)来防范CSRF攻击,包括PHP代码实现和HTML示例。

CSRF是什么我就不解释了,百度一搜全是,比波姐的片源还要多,千篇一律都他么是复制粘贴。

那为什么这个令牌(token)操作可以防范CSRF呢?下面我就随便说说说错了大家不要介意。

首先我们要知道令牌是存储在session里面的,这个很重要

 php代码如下

<?php 
    namespace app\index\controller;
    //我直接允许跨域,因为伪装CSRF网站随便在nginx搞个反向代理,跨域问题随便破
    header('Access-Control-Allow-Origin:*');
    //$this->request要用到继承Controller
    use think\Controller;
    //操作session需要用到Session
    use think\Session;
    
    class Index extends Controller
    {
        function index()
        {
            //新建一个令牌
            $t = $this->request->token('__token__', 'sha1');
            //直接输出令牌,不做json处理了
            echo $t;
        }
        function action()
        {
            //判断,找到session的令牌和上传的令牌是不是一样
            if (Session::get('__token__') == $this->request->post('__token__')) {
                return '成功'.Session::get('__token__');
            } else{
                return '失败'.Session::get('__token__');
            }
        }
    }
 
html代码如下(这个直接放在www目录下面就好了,即网站根目录)(http://localhost和http://127.0.0.1都算是跨域噢)

<html>
    <script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
    <body>
        <div id="first">第一次ajax产生的token:</div>
        <div id="second">第二次ajax输出的token:</div>
    </body>
    <script>
        $.ajax({
                //tp的url地址我放在这里,根据自己定义
                url:'http://127.0.0.1/public/index/index/index',
                type:'GET'
                success(data1){
                    first.innerHTML += data1
                    $.ajax({
                       url:'http://127.0.0.1/public/index/index/action',
                       type:'POST',
                       data:{
                            __token__:__token__
                        },
                       success(data2){
                           second.innerHTML += data2
                       }
                    })
                }
            })
    </script>
</html>

https://blog.youkuaiyun.com/jeason_L/article/details/85081317

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值