老张小站

  1. 欢迎光临

    感谢访问老张的博客!

  • 1
4,471

解决 Discuz! X3.* “允许发表的域名列表”中的域名在非http协议头时无效的问题

分类 网站技术/村民张先生 发布于 2016-04-22 19:35
1

BUG描述:

在 “后台”-“全局”-“注册与访问控制”-“访问控制”-“允许发表的域名列表” 中添加域名后,只有发布该域名http协议头的网址时才有效,https / ftp / mms 等其他协议头仍然被禁止。例如,普通用户组1已被设置禁止发布URL链接,我们在“允许发表的域名列表”中添加 xxx.com 后,xxx.com / *.xxx.com / http://xxx.com / http://*.xxx.com 均可以正常发出,但其它协议头下,例如 https://www.xxx.com 仍然被禁止发出。

BUG修复:

打开 source/class/helper/helper_form.php 文件,查找:

				if(!preg_match('/^http:\/\//is', $val)) $val = 'http://'.$val;

替换为(也就是删除其中的 ^http):

				if(!preg_match('/:\/\//is', $val)) $val = 'http://'.$val;

上传覆盖即可。

原理分析:

该行代码原本的目的,是在链接不带协议头的情况下,自动添加 http:// ,以便后面的 parse_url 提取链接的 host 部分。
但该行代码忽略了链接在带有 https:// 等其他协议头的情况,导致其它协议头的链接也被添加 http:// ,例如 http://https://www.xxx.com ,最后 parse_url 提取到的 host 为 协议头 https 。
我们去掉 ^http ,当连接中不存在 :// 时,则自动添加 http:// ,这样带有其它协议头的链接就会保持原样,后面的 parse_url 也就能正常获取到 host 部分了。

欢迎转载分享,转载请注明 来源:大张小站 https://www.zhang.cq.cn/20161706.html
若您喜欢这篇文章,欢迎订阅老张小站以获得最新内容。 / 欢迎交流探讨,请发电子邮件至 mail[at]vdazhang.com 。


已经有 1 条群众意见

  1. uuu /2017-09-29 06:59

    测试有效,谢谢 回应

    #1

欢迎谈谈你的看法(无须登录) *正文中请勿包含"http://"否则将被拦截