zoukankan      html  css  js  c++  java
  • php之防注入程序绕过浅谈

    <?php
    /*判断传递的变量是否含有非法字符
    如:$_POST/$_GET
    功能:SQL防注入系统
    */

    //屏蔽错误提示
    error_reporting(7);

    //需要过滤的字符

    $ArrFiltrate = array("'", "or", "and", "union", "where"); //1.如果规则不完全,也会引起安全问题

    //出错跳转的URL
    $StrGoUrl = ""; //2.如果此处不初始化,且register_globals = On,就会产生变量覆盖漏洞(php4.2.0之前默认register_globals = On)

    //防注入函数
    function FunStringExist($StrFiltrate, $ArrFiltrate)
    {
    foreach ($ArrFiltrate as $key => $value)
    {
    if (stristr($value, $StrFiltrate)) //3.保证or/Or/oR/OR之类的提交不会成功(这是个比较安全的防止SQL注入的函数,现对于strstr()函数而言)
    {
    return true;
    }
    }

    return false;
    }

    //合并$_POST && $_GET
    if (function_exists(array_merge))
    {
    $ArrPostAndGet = array_merge ($_POST, $_GET);
    }
    else
    {
    //手动合并$_POST
    foreach ($_POST as $key => $value)
    {
    $ArrPostAndGet[] = $value;
    }

    //手动合并$_GET
    foreach ($_GET as $key => $value)
    {
    $ArrPostAndGet[] = $value;
    }
    }

    //调用防注入函数
    foreach ($ArrPostAndGet as $key => $value)
    {
    if (FunStringExist ($value, $ArrFiltrate))
    {
    echo "<script>alert('非法字符');</script>";

    if (empty($StrGoUrl))
    {
    echo "<script>history.go(-1);</script>";
    }
    else
    {
    echo "<script>window.location = '".$StrGoUrl."'</script>";
    }

    exit(0);
    }
    }
    ?>

  • 相关阅读:
    nginx-rtmp-module搭建流媒体服务器
    rabbitmq安装
    opencv+python (3)
    linux命令
    mysql语句概览
    BUUCTF V&N-misc内存取证
    2018 HEBTUCTF 部分misc
    2020 安恒2月月赛 misc
    2018.6.1 铁三数据赛 复现
    2020 i春秋新春战疫公益赛 misc
  • 原文地址:https://www.cnblogs.com/milantgh/p/4088453.html
Copyright © 2011-2022 走看看