zoukankan      html  css  js  c++  java
  • PHP防注入安全代码

    怕网站被注入的朋友们看过来了,今天分享个代码。
    1.将safe.func.php传到要包含的文件的目录

    2.在页面中加入防护,有两种做法,根据情况二选一即可:


    a).在所需要防护的页面加入代码
    require_once('safe.func.php');
    就可以做到页面防注入、跨站
    如果想整站防注,就在网站的一个公用文件中,如数据库链接文件config.inc.php中!
    添加require_once('safe.func.php');来调用本代码


    常用php系统添加文件
    PHPCMS V9 phpcmsase.php
    PHPWIND8.7 datasql_config.php
    DEDECMS5.7 datacommon.inc.php
    DiscuzX2   configconfig_global.php
    Wordpress   wp-config.php
    Metinfo   includehead.php


    b).在每个文件最前加上代码
    在php.ini中找到:
    Automatically add files before or after any PHP document.

    auto_prepend_file = safe.func.php路径;
    safe.func.php 代码如下:

    <?php
    /**
     * 防注入 2012年12月21日 14:04:33 http://yige.org/php/
     *
     * "<br><br>操作IP: ".$_SERVER["REMOTE_ADDR"]."<br>操作时间: ".strftime("%Y-%m-%d %H:%M:%S")."<br>操作页面:".$_SERVER["PHP_SELF"]."<br>提交方式: ".$_SERVER["REQUEST_METHOD"]."<br>提交参数: ".$StrFiltKey."<br>提交数据: ".$StrFiltValue);
     */

    function safe_custom_error($errno, $errstr, $errfile, $errline) {
     echo "<b>Error number:</b> [$errno],error on line $errline in $errfile<br />";
     die();
    }


    set_error_handler("safe_custom_error", E_ERROR);

    function safe_stop_attack($k, $v, $method=0) {
     $filter = array(
      "'|(and|or).+?(>|<|=|in|like)|/*.+?*/|<s*script|EXEC|UNION.+?SELECT|UPDATE.+?SET|INSERTs+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)s+(TABLE|DATABASE)",//get
      "(and|or).{1,6}?(=|>|<|in|like)|/*.+?*/|<s*script|EXEC|UNION.+?SELECT|UPDATE.+?SET|INSERTs+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)s+(TABLE|DATABASE)"//post, cookie
     );

     $filter = isset($filter[$method]) ? $filter[$method] : $filter[0];
     
     if(is_array($v)) {
      $v = implode($v);
     }
     if (preg_match("/" . $filter . "/is", $v) == 1) {
            exit("本次操作已记录。请不要继续非法操作。");
     }
    }

    if (isset($_GET)) {
     foreach($_GET as $k => $v) safe_stop_attack($k, $v, 0);
    }
    if (isset($_POST)) {
     foreach($_POST as $k => $v) safe_stop_attack($k, $v, 1);
    }
    if (isset($_COOKIE)) {
     foreach($_COOKIE as $k => $v) safe_stop_attack($k, $v, 1);
    }


    本文转载自#一个网# http://yige.org

  • 相关阅读:
    《MySQL必知必会》第六章:过滤数据
    《MySQL必知必会》第七章:数据过滤
    《MySQL必知必会》第五章:排序检索数据
    Java高级特性:clone()方法
    Java基础知识详解:abstract修饰符
    Java虚拟机:虚拟机内存区域和内存溢出异常
    Java虚拟机:源码到机器码
    Java虚拟机:本地方法栈与Native方法
    [LeetCode] 1481. Least Number of Unique Integers after K Removals
    [LeetCode] 331. Verify Preorder Serialization of a Binary Tree
  • 原文地址:https://www.cnblogs.com/youlechang123/p/3125529.html
Copyright © 2011-2022 走看看