zoukankan      html  css  js  c++  java
  • tpshop防止sql注入补丁

    本补丁 由 QQ 木偶人  提供

    首先在  wwwApplicationCommonCommonfunction.php 文件添加一个方法

    /**
     * 转换SQL关键字
     *
     * @param unknown_type $string
     * @return unknown
     */
    function strip_sql($string) {
        $pattern_arr = array(
                "/union/i",
                "/select/i",
                "/update/i",
                "/delete/i",
                "/outfile/i",
                "/or/i",
                "/char/i",
                "/concat/i",
                "/truncate/i",
                "/drop/i",            
                "/insert/i", 
                "/revoke/i", 
                "/grant/i",      
                "/replace/i", 
                "/alert/i", 
                "/rename/i",            
                "/master/i",
                "/declare/i",
                "/source/i",
                "/load/i",
                "/call/i", 
                "/exec/i",         
                "/delimiter/i",            
              
        );
        $replace_arr = array(
                'union',
                'select',
                'update',
                'delete',
                'outfile',
                'or',
                'char',
                'concat',
                'truncate',
                'drop',            
                'insert',
                'revoke',
                'grant',
                'replace',
                'alert',
                'rename',
                'master',
                'declare',
                'source',
                'load',
                'call',                     
                'exec',         
                'delimiter',
                                   
        );
     
        return is_array($string) ? array_map('strip_sql', $string) : preg_replace($pattern_arr, $replace_arr, $string);
    }

    其次需要替换一个方法 在文件 wwwApplicationCommonCommonfunction.php 找到方法 getIP()

     // 定义一个函数getIP() 客户端IP,
    function getIP(){            
        if (getenv("HTTP_CLIENT_IP"))
             $ip = getenv("HTTP_CLIENT_IP");
        else if(getenv("HTTP_X_FORWARDED_FOR"))
                $ip = getenv("HTTP_X_FORWARDED_FOR");
        else if(getenv("REMOTE_ADDR"))
             $ip = getenv("REMOTE_ADDR");
        else $ip = "Unknow";
        return htmlspecialchars($ip);
    }

    将以上方法替换为

    // 定义一个函数getIP() 客户端IP,
    function getIP(){            
        if (getenv("HTTP_CLIENT_IP"))
             $ip = getenv("HTTP_CLIENT_IP");
        else if(getenv("HTTP_X_FORWARDED_FOR"))
                $ip = getenv("HTTP_X_FORWARDED_FOR");
        else if(getenv("REMOTE_ADDR"))
             $ip = getenv("REMOTE_ADDR");
        else $ip = "Unknow";
         
        if(preg_match('/^((?:(?:25[0-5]|2[0-4]d|((1d{2})|([1-9]?d))).){3}(?:25[0-5]|2[0-4]d|((1d{2})|([1 -9]?d))))$/', $ip))          
            return $ip;
        else
            return '';
    }

    方法添加完之后, 在 wwwApplicationCommonConfconfig.php 文件末尾 添加一行配置

        'DEFAULT_FILTER'        => 'strip_sql,htmlspecialchars',   // 系统默认的变量过滤机制
    );

    然后修改一下一个php文件 目录在 wwwThinkPHPLibraryThinkDbDriver.class.php 代码 103 行 加上一行代码

     

    // 复制这行加到相应位置

    $this->options[PDO::ATTR_EMULATE_PREPARES]  =   false;

    修改完成后记得 清除一下缓存

    旧的版本 按照上述方法加上,   在新的发布版本里面 自带已经加上.

  • 相关阅读:
    【BUG】android.content.res.Resources$NotFoundException: File res/drawable-xxhdpi/toolbar_line.png from
    关于 折半查找 while 条件 < , <=
    Unity3D——加入剑痕效果(PocketRPG Trail插件)
    用外部物理路由器时使用Neutron dhcp-agent提供的metadata服务(by quqi99)
    项目经理之项目经理注意事项
    让你提前认识软件开发(37):研发流程初探
    1.RunLoop是什么?
    列表类型内置方法
    字符串类型内置方法
    数字类型内置方法
  • 原文地址:https://www.cnblogs.com/luhouxiang/p/7704215.html
Copyright © 2011-2022 走看看