黑帽联盟

 找回密码
 会员注册
查看: 592|回复: 1
打印 上一主题 下一主题

[建站文章] Discuz! X2.5全站启用https(按照评论回复的那条操作,亲测有效)

[复制链接]

895

主题

38

听众

3329

积分

管理员

Rank: 9Rank: 9Rank: 9

  • TA的每日心情
    难过
    昨天 22:31
  • 签到天数: 1652 天

    [LV.Master]伴坛终老

    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/



    帖子永久地址: 

    黑帽联盟 - 论坛版权1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
    2、本站所有主题由该帖子作者发表,该帖子作者与黑帽联盟享有帖子相关版权
    3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和黑帽联盟的同意
    4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
    5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
    6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
    7、黑帽联盟管理员和版主有权不事先通知发贴者而删除本文

    勿忘初心,方得始终!

    895

    主题

    38

    听众

    3329

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

  • TA的每日心情
    难过
    昨天 22:31
  • 签到天数: 1652 天

    [LV.Master]伴坛终老

    按照这里的方法去操作,亲测有效

    关于高级模式链接的问题,已解决。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.     }
    复制代码
    勿忘初心,方得始终!
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 会员注册

    发布主题 !fastreply! 收藏帖子 返回列表 搜索
    回顶部