langyo
试过 Ctrl + F5,试过代理,没用

死活刷不出来

不过我还能从中看出更具体的一些问题



如上图所示,控制台报错的来源是 geetest 验证码的预加载脚本,提示的是 JSON 解析出了问题



我先追踪到了报错的 HTML 部分,第一行其实并没有啥毛病,就一句小萝莉自己加的注释

但或许问题就出在这呢?也许是不是该考虑下把注释移动下位置?或者删掉?



我又追踪到了报错的 JS 部分,发现这是服务器返回的数据出了问题
这是真得修了



已确认本人的网络没有问题,下载数据无误




因为这验证码问题,我估计又有许多人因登不上论坛而被憋得一句话说不出来……

重开防御脚本副作用就是大啊……

@gamerteam @混乱




致普通用户:

请参考此贴解决问题
我不是故意成为标题党的,茶馆帖子不会出现在论坛版头,所以只能以这种方式尽可能告诉大家这个问题啦

(P.S. @SPGoding 你不是说你有坑的咩!怎么又跑出来秀操作啦!(╯‵□′)╯︵┻━┻)


langyo
额外补充一下(开保护脚本时编辑实在难受,干脆直接回复)



是个明白人应该都看得懂什么了吧

我建议的解决方案有两种:
1. 关闭对链接 /plugin\.php\?id=geetest3&model=start&t=([0-9]+)/ (←这是正则表达式,可直接拿去用)的屏蔽,这个需要改写论坛的 PHP 脚本
检查一下浏览器发来的 href 又费不了多大事,时间成本和防御脚本生成个随机字串返回是差不多的,不会至于让论坛宕机

2. 修改 gt3-init.js(不太建议)
改一下脚本,让脚本检测一下返回的是 JSON 还是 HTML,如果是 HTML 就提取其中的随机字串并再次向页面发送请求
有点费事,如果 PHP 改不了,就改 JS

langyo
本帖最后由 langyo 于 2019-2-9 05:38 编辑

额外再提一句,有关修复论坛开防御脚本时的一劳永逸的无法评分/保存帖子/回复帖子等的解决方案

(这里只是暂时粗略提一下,不提供修复代码)

(或许哪天我有时间,就直接往公告版发可直接复制粘贴的修复代码了呢?)



修复的关键其实在于正确处理 ajax 请求

在开防御脚本的情况下,浏览器打开由论坛返回的 HTML 文件时,由于自动执行脚本,所以能够成功访问论坛

而当浏览器根据 HTML 文件指向的附属资源(或用户主动请求,例如评分)向论坛发送请求时,使用的 Ajax 是无法像刚刚那样能自动执行脚本的

说白了,解决方案就是改写 Ajax 脚本,把它包装一下,在正式解析返回的数据前先确定下这是防御脚本产生的随机字符串还是真实数据;当发现是防御脚本时,自行重置自己,先执行防御脚本提供的随机字符串,再重新发送 Ajax 请求

其实……原理似乎已经说的很透彻了……吧?

哦还有,产生 Ajax 请求的应该不止这一个脚本,除了 ajax.js 里的以外, geetest 验证码服务的 ajax 与 Discuz! 自己的 ajax 是分开的,两边都要考虑下……以及,Discuz! 本身也不止 ajax.js 这一个产生 ajax 请求的脚本

xmdhs
这个防御脚本太暴力了。。。

几乎所有请求都得允许那个 js 才行。

不能换换别的吗,比如类似于 cloudflare 的5秒盾

roj234
本帖最后由 roj234 于 2019-2-9 12:12 编辑

其实和注释并没关系,只是F12不知道错误到底在哪所以显示【当前页面地址:1】
一般:1都是不知道在哪,比如闭包函数(function(){})();和以前的setInterval有时页面加载完毕之后打开F12也会这样


第一页 上一页 下一页 最后一页