• 跨站脚本攻击 (XSS)和SQL注入漏洞php排查解决方案


    漏刻有时采用PHP-MVC结构,在参数传递过程中,已做参数过滤。
    如正常的访问路径如下:

    http://test.com/?m=Surveyor&a=apply
    
    • 1

    在实际进行脚本攻击的时候会使用

    跨站脚本攻击 (XSS)

    http://test.com/?m=Surveyor&a=apply
    
    • 1

    如果调用的方法未进行安全过滤,则在访问的过程中会弹出javascript弹窗,则表明存在漏洞。

    漏洞为害

    1. 窃取管理员帐号或Cookie,入侵者可以冒充管理员的身份登录后台。使得入侵者具有恶意操纵后台数据的能力,包括读取、更改、添加、删除一些信息。
    2. 窃取用户的个人信息或者登录帐号,对网站的用户安全产生巨大的威胁。例如冒充用户身份进行各种操作。
    3. 网站挂马。先将恶意攻击代码嵌入到Web应用程序之中。当用户浏览该挂马页面时,用户的计算机会被植入木马。

    解决方案

    1. 表单提交或者url参数传递前,对需要的参数进行过滤;
    2. 增加前后端验证机制;

    后端安全过滤函数

    解决参数在传送的过程中,使用

    /**
     * 安全过滤函数
     *
     * @param $str
     * @return $string
     */
    function safe_replace($str)
    {
        $string = str_replace('%20', '', $str);
        $string = str_replace('%27', '', $string);
        $string = str_replace('%2527', '', $string);
        $string = str_replace('*', '', $string);
        $string = str_replace('"', '"', $string);
        $string = str_replace("'", '', $string);
        $string = str_replace('"', '', $string);
        $string = str_replace(';', '', $string);
        $string = str_replace('<', '', $string);
        $string = str_replace('>', '', $string);
        $string = str_replace("{", '', $string);
        $string = str_replace('}', '', $string);
        $string = str_replace('\\', '', $string);
        return $string;
    }
    
    /*
     * 变量传递值函数
     * @param $str 变量值
     */
    function get_param($str)
    {
        $string = safe_replace($_GET[$str]);
        if ($string == '0') {
            $val = '0';
        } else {
            $val = !empty($string) ? $string : null;
        }
        return $val;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    SQL注入漏洞

    http://test.com/index.php?m=Manager&a=examineAdmin&act=examine&pro_id=914&pro_types=1
    
    • 1
    • m=Manager,使用get_param过滤;
    • a=examineAdmin,使用get_param过滤;
    • act=examine,使用get_param过滤;
    • pro_id=914,使用get_safe过滤;
    • pro_types=1,使用get_safe过滤;
    //判断是否是整数类型
    function get_safe($str)
    {
        $num = $_GET[$str];
        if (is_numeric($num)) {
            return $num;
        } else {
            redirect("index.php?m=Pop&a=tips&act=tips&tips_id=7");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    逻辑漏洞

    漏洞说明:使用默认密码登录系统后,在强制修改密码时,存在手机验证码验证机制,但手机验证码可以使用bp拦截工具进行获取。从而得到修改密码的功能。获取验证码时抓包再进行抓回包

    在登录平台、忘记密码时,系统采用手机短信验证码功能。系统生成验证码是,采用的cookies,而非session全局变量,由此导致浏览器端可以通过F12或bp拦截工具获取系统的验证码而不通过手机。

    解决方案:

           session_start();
           $rmdCode = rand(111111, 999999);//随机验证码
            $_SESSION['code'] = $rmdCode;
    
    • 1
    • 2
    • 3
     //登录成功后自动销毁;
        session_destroy();
    
    • 1
    • 2

    密码强度

    增加密码强度,强制注册时必须包含必须同时包含字母和数字且至少6位。

    ,pass: [/(?=.*[0-9])(?=.*[a-zA-Z]).{6,30}/, '密码必须同时包含字母和数字且至少6位']
    
    • 1

    @lockdata.cn

  • 相关阅读:
    【微服务】基于Ribbon实现负载均衡
    互联网技术岗笔试基础题目练习①
    Log4j输出格式控制--log4j的PatternLayout参数含义以及详细配置
    好心情患者故事:节食暴食反复横跳,我确诊了重度抑郁
    超实用 :大部分的人都不知道的一个Python技巧
    配置JupyterLab远程密码访问
    基于php+MYSQL的旅游景点攻略的设计与实现毕业设计源码301216
    用于细胞定位的指数距离变换图--Exponential Distance Transform Maps for Cell Localization
    基于BS的在线考试系统设计与开发
    SpringBoot电商项目进阶Day5
  • 原文地址:https://blog.csdn.net/weixin_41290949/article/details/126821149