黑帽联盟

标题: Discuz! X2.5全站启用https(按照评论回复的那条操作,亲测有效) [打印本页]

作者: 定位    时间: 2023-8-3 17:42
标题: Discuz! X2.5全站启用https(按照评论回复的那条操作,亲测有效)
Discuz! 在 X3 之后才内建支援 https 协定
因为不想大幅度升级,所以决定以修改的方式让 X2.5 版能支援 https 协定

花了不少时间追原始码,初步修改后大致上可以同时使用 http 和 https 两种协定进入论坛
使用 https 进入论坛时,论坛画面、主题列表 都没问题
但是点入文章后,很容易就被浏览器提醒 连线可能有安全漏洞

原因是论坛本就开放式架构,任何人张贴连外的连结或图片或其他任何资源
只要连外不是使用 https 连结的,都会被视为不安全的连线
所以多数的论坛都维持使用 http 协定,顶多就是登入时使用 https 而已

既然已经修改了,就纪录一下修改的方法

先配置好Web服务器,设置好SSL证书

后台设置(把http设置成https)

全局-站点信息-网站 URL

站长-UCenter设置-UCenter 访问地址

UCenter-应用管理-应用的主 URL

修改程序

文件 source/function/function_core.php

找到$content = output_replace($content);

在下面添加
  1. $content = str_replace('http://www.xxx.com','https://www.xxx.com',$content);
复制代码
如果有多个二级域名
  1. $content = preg_replace('http://(.*?)xxx.com','https://\1xxx.com',$content);
复制代码
注释掉下面的代码
  1. if(!defined('IN_MOBILE') && !defined('IN_ARCHIVER')) {

  2.         $tipsService = Cloud::loadClass('Service_DiscuzTips');

  3.         $tipsService->show();

  4.     }
复制代码
要修改的档案如下

档案:source/class/discuz/discuz_application.php
搜寻 $_G = array( (约110行),然后修改成如下
  1. global $_G;
  2. $_G = array(
  3. <font color="#ff0000">        'req_scheme' => array_key_exists('REQUEST_SCHEME', $_SERVER) ? $_SERVER['REQUEST_SCHEME']
  4.                         : ( $_SERVER['SERVER_PORT'] == 443 || (array_key_exists('HTTPS', $_SERVER) && strtolower($_SERVER['HTTPS']) != 'off') ? 'https' : 'http'),</font>
  5.         'uid' => 0,
  6.         'username' => '',
  7.         'adminid' => 0,
  8.         'groupid' => 1,
复制代码
接着修改以下6个地方
  1. # 搜寻
  2. $_G['siteurl'] = dhtmlspecialchars('http://'.$_SERVER['HTTP_HOST'].$sitepath.'/');
  3. # 修改成
  4. $_G['siteurl'] = dhtmlspecialchars(<font color="#ff0000">$_G['req_scheme'].'://'</font>.$_SERVER['HTTP_HOST'].$sitepath.'/');


  5. # 搜寻
  6. setglobal('currenturl_encode', base64_encode('http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']));
  7. # 修改成
  8. setglobal('currenturl_encode', base64_encode(<font color="#ff0000">$this->var['req_scheme'].'://'</font>.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']));

  9. # 搜寻
  10. dheader("Location:http://".$this->var['setting']['domain']['app']['default'].$_SERVER['REQUEST_URI']);
  11. # 修改成
  12. dheader("Location:<font color="#ff0000">'. $this->var['req_scheme'] .'://"</font>.$this->var['setting']['domain']['app']['default'].$_SERVER['REQUEST_URI']);

  13. # 搜寻
  14. $mobileurl = 'http://'.$this->var['setting']['domain']['app']['mobile'];
  15. # 修改成
  16. $mobileurl = <font color="#ff0000">$this->var['req_scheme'].'://'</font>.$this->var['setting']['domain']['app']['mobile'];

  17. # 搜寻
  18. $mobileurl = 'http://'.$this->var['setting']['domain']['app']['forum'].'?mobile=yes';
  19. # 修改成
  20. $mobileurl = <font color="#ff0000">$this->var['req_scheme'].'://'</font>.$this->var['setting']['domain']['app']['forum'].'?mobile=yes';

  21. # 搜寻
  22. $this->var['setting']['mobile']['nomobileurl'] = ($this->var['setting']['domain']['app']['forum'] ? 'http://'.$this->var['setting']['domain']['app']['forum'].'/' : $this->var['siteurl']).$this->var['basefilename'].($query_sting_tmp ? '?'.$query_sting_tmp.'&' : '?').'mobile=no';
  23. # 修改成
  24. $this->var['setting']['mobile']['nomobileurl'] = ($this->var['setting']['domain']['app']['forum'] ? <font color="#ff0000">$this->var['req_scheme'].'://'</font>.$this->var['setting']['domain']['app']['forum'].'/' : $this->var['siteurl']).$this->var['basefilename'].($query_sting_tmp ? '?'.$query_sting_tmp.'&' : '?').'mobile=no';
复制代码
档案:source/function/function_core.php
搜寻: $ucenterurl = empty($ucenterurl) ? $_G['setting']['ucenterurl'] : $ucenterurl;
修改成下面这样
  1. static $staticavatar;
  2. if($staticavatar === null) {
  3.         $staticavatar = $_G['setting']['avatarmethod'];
  4. }

  5. $ucenterurl = empty($ucenterurl) ? $_G['setting']['ucenterurl'] : $ucenterurl;
  6. <font color="#ff0000">if( $_G['req_scheme'] == 'https' ) {
  7.         $ucenterurl = preg_replace("/http\:/s", "https:", $ucenterurl);
  8. }</font>
  9. $size = in_array($size, array('big', 'middle', 'small')) ? $size : 'middle';
  10. $uid = abs(intval($uid));
复制代码
档案: uc_server/admin.php
在档案开头附近可以看到 define('IN_UC', TRUE); 修改如下
  1. $mtime = explode(' ', microtime());
  2. $starttime = $mtime[1] + $mtime[0];

  3. <font color="#ff0000">$req_scheme = array_key_exists('REQUEST_SCHEME', $_SERVER) ? $_SERVER['REQUEST_SCHEME']
  4.                 : ( $_SERVER['SERVER_PORT'] == 443 || (array_key_exists('HTTPS', $_SERVER) && strtolower($_SERVER['HTTPS']) != 'off') ? 'https' : 'http');</font>

  5. define('IN_UC', TRUE);
  6. define('UC_ROOT', substr(__FILE__, 0, -9));
  7. define('UC_API', strtolower($req_scheme.'://'.$_SERVER['HTTP_HOST'].substr($_SERVER['PHP_SELF'], 0, strrpos($_SERVER['PHP_SELF'], '/'))));
  8. define('UC_DATADIR', UC_ROOT.'data/');
  9. define('UC_DATAURL', UC_API.'/data');
复制代码
档案: uc_server/avatar.php
在档案开头可以看到 error_reporting(0); 修改如下
  1. error_reporting(0);
  2. <font color="#ff0000">$req_scheme = array_key_exists('REQUEST_SCHEME', $_SERVER) ? $_SERVER['REQUEST_SCHEME']
  3.                 : ( $_SERVER['SERVER_PORT'] == 443 || (array_key_exists('HTTPS', $_SERVER) && strtolower($_SERVER['HTTPS']) != 'off') ? 'https' : 'http');
  4. define('UC_API', strtolower($req_scheme.'://'.$_SERVER['HTTP_HOST'].substr($_SERVER['PHP_SELF'], 0, strrpos($_SERVER['PHP_SELF'], '/'))));
  5. </font>
  6. $uid = isset($_GET['uid']) ? $_GET['uid'] : 0;
  7. $size = isset($_GET['size']) ? $_GET['size'] : '';
复制代码
到这里就设置完成了,唯一的不足是下面这个地方:
211.png

有知道怎么处理的,回复一下,万分感谢!!!

转载自:https://ezbox.idv.tw/71/discuz-x25-https/和https://t2.re/archives/565/




作者: 定位    时间: 2023-8-28 14:45
标题: 按照这里的方法去操作,亲测有效
关于高级模式链接的问题,已解决。2种解决方式如下。第1种:登录后台:点击全局--域名设置--应用域名,删除默认域名里面的链接。这种方式,有时候会导致多入口的问题,前台会出现css无法加载,直接出现ip链接,所以不建议。第二种:修改模板的方式,文件为:template/default/forum/post_infloat.htm,找到第87行,直接添加https://bbs.cnblackhat.com(这里修改成你的域名),如图所示:
2121.png


还有就是论坛里面链接后面都带有443端口的问题,修改文件source/class/discuz/discuz_application.php,修改182行,$_SERVER['SERVER_PORT'] == '80' 修改为 $_SERVER['SERVER_PORT'] == '443'

最后更新模板即可


更新一下Discuz! X2.5全站启用https,这里只需要按照这条评论回复的操作即可,剩下的操作如下:
先配置好Web服务器,设置好SSL证书
后台设置
全局-站点信息-网站 URL
站长-UCenter设置-UCenter 访问地址
UCenter-应用管理-应用的主 URL

修改程序
文件 source/class/discuz/discuz_application.php
替换http://为https://

文件 source/function/function_core.php
找到$content = output_replace($content);
在下面添加
$content = str_replace('http://www.xxx.com','https://www.xxx.com',$content);

如果有多个二级域名
$content = preg_replace('http://(.*?)xxx.com','https://\1xxx.com',$content);

注释掉下面的代码
  1. if(!defined('IN_MOBILE') && !defined('IN_ARCHIVER')) {
  2.         $tipsService = Cloud::loadClass('Service_DiscuzTips');
  3.         $tipsService->show();
  4.     }
复制代码





欢迎光临 黑帽联盟 (https://bbs.cnblackhat.com/) Powered by Discuz! X2.5