无法检测您的账户是否已创建,请确保已启用 Cookie

这些信息非常有用。我尚未具体遇到过 CORS 问题,但我会进一步深入调查。如果有任何发现,我会在这里发布。

看到这些脚本后,感觉可能与 Cloudflare 有关,你们是否使用了 Cloudflare?https://boards.neocron.org/cdn-cgi/apps/head/QNWX_8GN-3K7wUr6Qa73LdoD3JI.js。我们并没有使用它,因此可能尚未遇到这个具体问题。

谢谢!

深入排查后,我们发现已启用 设置 -> 安全 -> 内容安全策略

禁用该策略后,用户即可成功注册。我们尝试将上述报告中提到的 URL 添加到白名单脚本源中,但未能解决问题。

看来 Chrome 加强了其 CSP 机制。-> Manifest - Content Security Policy  |  Chrome Extensions  |  Chrome for Developers

嗯,恐怕我们已禁用了该功能,这应该是导致此问题的另一个原因。

抱歉 :frowning:

我们将 DISCOURSE_ENABLE_CORS 设置为 true,并且我们的 CORS 来源设置如下…

不知道这些信息是否对您有帮助,或者您的设置可能有所不同?

我们也启用了 CORS 标志,但不确定这是否相关。

这是一个 CSP 问题,而非 CORS。

这是子目录配置吗?

编辑:回过头来再次查看,我明白问题所在了。

我可以确认这是由 CF 注入的。

我们强烈不建议在生产环境中禁用 CSP。相反,如果可能,请关闭 Cloudflare(我们已收到 大量 关于 CF 对 Discourse 的 JavaScript 产生负面影响的工单),或者至少禁用所有 Cloudflare 优化

这会在您的网站上造成巨大的安全漏洞。我们强烈建议您不要这样做。这是一个非常糟糕的建议。

你好 @supermathie

我们并未使用 Cloudflare,但最近有两位用户遇到了这个问题。我们给他们的临时解决方案是使用无痕模式或其他浏览器,但可能还有其他用户未向我们报告此问题。

我们的社区用户大多为非技术人员,因此我认为他们的浏览器设置应该比较常规。

能否提供更多关于是什么触发了此问题的信息?这样我或许可以据此找到解决方案。

谢谢!

我们也希望我们能确切知道。

在“创建账户”屏幕上有一个隐藏的输入字段,在创建账户时会检查其完整性。

如果该字段被篡改,账户创建将失败。

能否请您让用户逐个禁用他们的插件,直到找到罪魁祸首?

我们已就这一行为向 Chrome 项目提交了一个工单进行调查。

让我提醒一下您,这是来自一位非技术用户电脑上的截图:

Imgur

您不能做任何假设 :slight_smile:

是啊,毕竟现在不是2000年了,浏览器安全性和恶意软件防护都更好了(我相信)。今天有另一位用户报告了这个问题,我会尝试从他们那里获取更多详情,希望能找到解决办法。

谢谢!

太好了。我们非常希望能把这件事落实,请随时告知我们。

我的一位朋友也遇到了同样的问题——我正在尝试邀请他担任版主。当我在无痕窗口中注册时,一切正常,但他在无痕窗口中也无法操作。因此,我确信问题不出在我的安装上(我在使用 Discourse 时确实安装了插件,但都是官方插件),而是出在他的浏览器上。

我正在与他一起排查问题。如果这不是插件的问题,我怀疑可能与我们的 Chrome 版本有关——也许浏览器底层有什么我不知道的情况在运行,但目前我还无法确定。我目前正在尝试获取他的版本号以便对比,但他是加州人,所以如果他够明智的话,现在应该已经睡着了 :stuck_out_tongue:

好的,这不太合理,但他现在已清醒且能提供信息。他从 75.0.3770.142 更新到了 76.0.3808.87(64 位),这本身并未解决主窗口的问题,但在清除缓存和 Cookie 后,他能够在无痕窗口中注册。除了广告拦截器外,他使用的是完全原生的 Chrome 设置。

编辑:由于我无法复现该问题(我无法做到),因此无法确定在 75.0.3770.142 版本上清除缓存或 Cookie 是否有效。不过,我发现至少对我朋友来说,这似乎起到了作用,这一点颇有趣。

你好,我今天在 community.boid.com 上设置了一个新实例,在尝试注册第二个账户时遇到了此错误消息(无论是在普通 Chrome 窗口还是无痕模式下均出现)。我通过手动删除 Google 账户中的自动填充密码,并在注册表单中不使用任何自动填充选项,成功解决了该问题。我注意到 Chrome 建议从其他无关网站自动填充多种不同的身份验证选项。我在其他网站上尚未见过此类行为,因此想分享一下我的经历。据我所知,这似乎确实与 Google Chrome 的自动填充功能有关。

我有一个方法可以复现这个问题,但比较晦涩。你需要两个浏览器窗口。

  • 在无痕模式下加载你的网站,打开“创建新用户”对话框。

  • 在第二个浏览器窗口中,以管理员身份登录。进入站点设置,启用“仅限邀请”,这将禁用公开注册。

  • 在无痕浏览器中,尝试通过之前打开的“创建新用户”对话框完成新用户注册。

你将无法完成,因为新用户创建已不再被允许,所以你会看到……我们的老朋友……

至少我们有了这个复现步骤,尽管它……有点疯狂。:crazy_face:

我从未、也从未在任何其他方式下复现过这个问题,这个话题中的其他人也从未能在没有任何插件的默认 Chrome 实例上提供一套复现步骤。如果你能做到,请随时提供这些复现步骤……

我在 try.discourse.org 上复现了此错误:

请观看整个过程的视频:https://drive.google.com/file/d/19s20cgdz78XYpgHePkWRBFXseY-Znt_P/view?usp=sharing 每次使用建议生成的密码时都会发生这种情况。那么……我们该如何为客户解决这个问题?

好的,非常好,这是一个我们可以处理的复现步骤,感谢提供。

不过请注意,这仍然需要用户手动操作——在创建新账户/注册时,在密码字段上右键点击并点击“建议”。我必须先按 F5 刷新页面,然后再启动注册对话框,才能稳定地看到该选项,但之后确实会出现。

既然我们已经有了一种复现方式,@sam,我们是否可以分配这项工作了?

我们目前采用两种机制来防止机器人盲目注册账户。

  1. 我们设置了一个看似“密码确认”的字段,实际上是一个“陷阱”:我们期望该字段的值非常特定。这是一个输入框,不会在屏幕上渲染,而是放在一个隐藏的 div 中。

  2. 我们提供一个挑战字符串,期望 JavaScript 对其进行处理并原样返回。

如果上述(1)或(2)任一条件未正确满足,我们将该请求视为可疑,并不注册账户。

Chrome 密码管理器目前的行为是“自动填充”新账户确认字段中的密码:

{{input type="password" value=accountPasswordConfirm id="new-account-confirmation" autocomplete="new-password"}}

这个 INPUT 字段是隐藏的,不会在屏幕上显示。

对此我们有两个替代方案:

  1. 移除该保护机制,接受密码管理器在此处出错的现实。它们通常不会在填充前检查“确认密码”字段是否真正可见。

  2. 联系 Chrome 团队,请他们停止这种行为:向不可见的 INPUT 字段填充信息并不合适。(我已提交相关反馈

我也不太确定……或许我们可以选择方案(1),这很容易实现。我可以移除该保护机制,并让 JavaScript 客户端以类似比特币的方式计算哈希值,以证明其确实在执行计算工作。例如,我可以给客户端一个字符串,让它不断追加数字,直到生成的 MD5 值至少以 00 结尾。这样对机器人来说计算成本很高,而对服务器验证来说却极其廉价。

让机器人盲目计算 MD5,我想,也算是让它们实实在在为我的巴哈马退休计划买单的一种方式吧。

是否有可能完全禁用此类机制并启用传统的 Google CAPTCHA?我认为这样既能保持安全性,又能让更多用户注册。

或者我们可以等待你们的紧急修复。您觉得哪种方案更好?我们计划在下周初在论坛上启动合作伙伴的大型推广活动。

我刚创建了一个新账号,浏览器中完全没有反垃圾邮件/间谍软件/软件,却遇到了同样的问题。我通过使用“使用 Google 登录”的方法解决了它,之后便正常了。