tpshop防止sql注入补丁
本补丁 由 QQ 木偶人 提供
首先在 www\Application\Common\Common\function.php 文件添加一个方法
/**
* 转换SQL关键字
*
* @param unknown_type $string
* @return unknown
*/
function strip_sql($string) {
$pattern_arr = array(
"/\bunion\b/i",
"/\bselect\b/i",
"/\bupdate\b/i",
"/\bdelete\b/i",
"/\boutfile\b/i",
"/\bor\b/i",
"/\bchar\b/i",
"/\bconcat\b/i",
"/\btruncate\b/i",
"/\bdrop\b/i",
"/\binsert\b/i",
"/\brevoke\b/i",
"/\bgrant\b/i",
"/\breplace\b/i",
"/\balert\b/i",
"/\brename\b/i",
"/\bmaster\b/i",
"/\bdeclare\b/i",
"/\bsource\b/i",
"/\bload\b/i",
"/\bcall\b/i",
"/\bexec\b/i",
"/\bdelimiter\b/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);
}
其次需要替换一个方法 在文件 www\Application\Common\Common\function.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|((1\d{2})|([1-9]?\d)))\.){3}(?:25[0-5]|2[0-4]\d|((1\d{2})|([1 -9]?\d))))$/', $ip))
return $ip;
else
return '';
}
方法添加完之后, 在 www\Application\Common\Conf\config.php 文件末尾 添加一行配置
'DEFAULT_FILTER' => 'strip_sql,htmlspecialchars', // 系统默认的变量过滤机制
);
然后修改一下一个php文件 目录在 www\ThinkPHP\Library\Think\Db\Driver.class.php 代码 103 行 加上一行代码
// 复制这行加到相应位置
$this->options[PDO::ATTR_EMULATE_PREPARES] = false;
修改完成后记得 清除一下缓存
旧的版本 按照上述方法加上, 在新的发布版本里面 自带已经加上.