X3.1的新补丁是针对一些安全上的问题修补。3.0和2.5的补丁没发布,大家看着改吧。
以下是对比修改处,大家参照后酌情修改,修改的时候别忘记备份
- 1、admincp_setting.php
- 2591行
- if(isset($settingnew[$k])) {
- $settingnew[$k] = dhtmlspecialchars($settingnew[$k]);
- }
- }
- 下面增加
- if(isset($settingnew['statcode'])) {
- $settingnew['statcode'] = str_replace(array('<?', '?>'), array('<?', '?>'), $settingnew['statcode']);
- }
- 2、admincp_misc.php
- 1211行
- $efile = explode(':', $_GET['filenamenew']);
- 下面增加
- if(substr($_GET['filenamenew'], -4) !== '.php') {
- cpmsg('crons_filename_illegal', '', 'error');
- }
- 1259行
- if(!file_exists($cronfile)) {
- 改为
- if(substr($cronfile, -4) !== '.php' || !file_exists($cronfile)) {
- 3、admincp_makehtml.php
- 459行
- if(!empty($re[0])) {
- cpmsg(cplang('setting_functions_makehtml_topichtmldir_invalid').','.cplang('return'), NULL, 'error');
- }
- 下面增加
- $topichtmldir = realpath($settingnew['makehtml']['topichtmldir']);
- if($topichtmldir === false) {
- dmkdir($settingnew['makehtml']['topichtmldir'], 777, false);
- $topichtmldir = realpath($settingnew['makehtml']['topichtmldir']);
- rmdir($settingnew['makehtml']['topichtmldir']);
- if($topichtmldir === false) {
- cpmsg(cplang('setting_functions_makehtml_topichtmldir_invalid').','.cplang('return'), NULL, 'error');
- }
- }
- $topichtmldir = str_replace(DISCUZ_ROOT, '', $topichtmldir);
- $sysdir = array('api', 'archiver', 'config', 'data/diy', 'data\diy', 'install', 'source', 'static', 'template', 'uc_client', 'uc_server');
- foreach($sysdir as $_dir) {
- if(stripos($topichtmldir, $_dir) === 0) {
- cpmsg(cplang('setting_functions_makehtml_topichtmldir_invalid').','.cplang('return'), NULL, 'error');
- }
- }
- 4、function_admincp.php
- 18行
- strpos(realpath(DISCUZ_ROOT.'./'.$dir), realpath(DISCUZ_ROOT.'./template')) === 0;
- 改为
- strpos(realpath(DISCUZ_ROOT.'./'.$dir), realpath(DISCUZ_ROOT.'./template').DIRECTORY_SEPARATOR) === 0;
- 5、function_blog.php
- 开头
- if(!defined('IN_DISCUZ')) {
- exit('Access Denied');
- }
- 下面增加
- function blog_check_url($url) {
- $url = durlencode(trim($url));
- if(preg_match("/^(https?|ftp|gopher|news|telnet|rtsp|mms|callto|bctp|thunder|qqdl|synacast){1}:\/\//i", $url)) {
- $return = '<a href="'.$url.'" target="_blank">';
- } else {
- $return = '<a href="'.(!empty($GLOBALS['_G']['siteurl']) ? $GLOBALS['_G']['siteurl'] : 'http://').$url.'" target="_blank">';
- }
- return $return;
- }
- 69行
- '<a href="\\1" target="_blank">'
- 改为
- 'blog_check_url(\'\\1\')'
- <font color="#ff0000">这个地方上面有一个正则3.0中是/i修饰符,3.1中使用了/ie 修饰符,注意下。要使用这个补丁得要用上/ie。但是/e修饰符已经被PHP在后期版本中丢弃。因为并不是很安全。</font>
- 6、function_discuzcode.php
- 417行
- $url = addslashes($url);
- if(!in_array(strtolower(substr($url, 0, 6)), array('http:/', 'https:', 'ftp://', 'rtsp:/', 'mms://')) && !preg_match('/^static\//', $url) && !preg_match('/^data\//', $url)) {
- $url = 'http://'.$url;
- }
- 改为
- $url = addslashes($url);
- if(!in_array(strtolower(substr($url, 0, 6)), array('http:/', 'https:', 'ftp://', 'rtsp:/', 'mms://')) && !preg_match('/^static\//', $url) && !preg_match('/^data\//', $url)) {
- return dhtmlspecialchars($url);
- }
- 7、static下
- mp3player.swf等3个swf替换
- 增加了
- bbcode.js
- 8、function_core.php
- 3.1以后自带
- function durlencode($url) {
- static $fix = array('%21', '%2A','%3B', '%3A', '%40', '%26', '%3D', '%2B', '%24', '%2C', '%2F', '%3F', '%25', '%23', '%5B', '%5D');
- static $replacements = array('!', '*', ';', ":", "@", "&", "=", "+", "[ DISCUZ_CODE_3 ]quot;, ",", "/", "?", "%", "#", "[", "]");
- return str_replace($fix, $replacements, urlencode($url));
- }
- 3.0以前都要增加这个新函数。
复制代码
|