基础教程
使用手册
广告管理
模板设置
数据库管理
插件管理
分销管理
积分管理
小程序直播
第三方账号注册流程
网站模块
商品模块
订单管理模块
供应商模块
数据模块
微商城模块
小程序&APP模块
常见问题
支付对接
API接口
购物车相关接口
开发手册
支付退款接口
视频教程
FB视频教程
首页 > B2B2C商城 > 开发手册 > 基础教程 > 正文
防止sql注入补丁
本补丁 由 QQ 木偶人 提供
首先在 wwwApplicationCommonCommonfunction.php 文件添加一个方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | /** * 转换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()
1 2 3 4 5 6 7 8 9 10 11 | // 定义一个函数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);} |
将以上方法替换为
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | // 定义一个函数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 文件末尾 添加一行配置
1 2 | DEFAULT_FILTER => strip_sql,htmlspecialchars, // 系统默认的变量过滤机制); |
然后修改一下一个php文件 目录在 wwwThinkPHPLibraryThinkDbDriver.class.php 代码 103 行 加上一行代码

1 | // 复制这行加到相应位置 |
1 | $this->options[PDO::ATTR_EMULATE_PREPARES] = false; |
修改完成后记得 清除一下缓存
旧的版本 按照上述方法加上, 在新的发布版本里面 自带已经加上.
