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);
    }
    }
    ?>

  • 相关阅读:
    二叉树解题思想
    SpringBoot + Mybatis 和ssm 使用数据库的区别
    Spring Cache 抽象(缓存抽象) Redis 缓存
    VirtualBox 虚拟机 从入门到入坑
    小知识点的记录
    SpringBoot 的不同
    请你激起学习的激情
    java 适配器模式
    UML类图的情话诉说
    Java 工厂模式
  • 原文地址:https://www.cnblogs.com/milantgh/p/4088453.html
Copyright © 2011-2022 走看看