本补丁 由 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;elsereturn '';}
方法添加完之后, 在 wwwApplicationCommonConfconfig.php 文件末尾 添加一行配置
'DEFAULT_FILTER' => 'strip_sql,htmlspecialchars', // 系统默认的变量过滤机制);
然后修改一下一个php文件 目录在 wwwThinkPHPLibraryThinkDbDriver.class.php 代码 103 行 加上一行代码
// 复制这行加到相应位置
$this->options[PDO::ATTR_EMULATE_PREPARES] = false;
修改完成后记得 清除一下缓存
旧的版本 按照上述方法加上, 在新的发布版本里面 自带已经加上.