ChatGPT解决这个技术问题 Extra ChatGPT

在本地主机上使用 reCAPTCHA

我正在使用 PHP 开发一个网站,我想在其中一个会话中进行人工验证。对于开发,我最初在本地运行系统,当它准备好时,我将把它放在某个域上。

reCAPTCHA website 中,据说该插件只能在给定域(和子域)中工作。

有没有办法在本地主机上使用 reCAPTCHA 插件?

如果事后添加了 localhost,请清除 cookie。

A
Adam

更新

原来的答案不再正确。开发人员指南现在指出:

“如果您想使用“localhost”进行开发,则必须将其添加到域列表中。”

这仅在您使用 127.0.0.1/... 而不是 localhost/... 访问 localhost 时才有效。

原始答案保留在下面。

根据the reCAPTCHA Developer's Guide

“默认情况下不再支持 localhost 域。如果您希望继续支持它们进行开发,您可以将它们添加到您的站点密钥的支持域列表中。转到管理控制台以更新您的支持域列表。我们建议使用单独的密钥进行开发和生产,并且不允许 localhost 在您的生产站点密钥上。”

换句话说,只需使用相同的密钥。


我检查以确认这些词是否在该页面上。它不见了! 2015年,你可以找到上面的报价@developers.google.com/recaptcha/docs/start
这个答案是准确的,但有一个重要的警告让我感到困惑:从 reCAPTCHA v1 迁移到 v2 时,必须重新生成 API 密钥才能使此消息消失。此外,同样重要的是,如果您像我一样,并且通过将条目放入操作系统的“主机”文件中来在本地/开发环境中设置测试域,则需要将这些“假”域添加到允许的域中有问题的 reCAPTCHA 帐户以解决“错误:站点密钥的域无效”错误。
当您的 localhost 未命名为“localhost”时,它就无法工作。
谷歌似乎已经取消了在 localhost 上进行测试的能力。
虽然 localhost 对我不起作用,但我可以同时使用 127.0.0.1 和 *.xip.io 地址。
P
Peter Mortensen

这对我有用:

reCAPTCHA documentation 中提取:

使用以下测试密钥,您将始终获得 No CAPTCHA,并且所有验证请求都将通过。站点密钥:6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI 密钥:6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe reCAPTCHA 小部件将显示一条警告消息,声称它仅用于测试目的。请不要将这些密钥用于您的生产流量。


如果这停止工作,我将切换到 Automattic 的解决方案。您在这里的解决方案是唯一使我无法放弃这种烦人的技术的方法。
这似乎是“正确答案”,因为它使您的开发环境与您的生产环境不同。
似乎是一个罕见的信息,因为谷歌从来没有给出像这样脆弱的东西
看起来那些钥匙已经过时了。该链接重定向到提供更新键的 FAQ6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe
另请注意,这些适用于 reCAPTCHA v2,而不是 reCAPTCHA v3。常见问题解答建议您制作自己的单独密钥对以针对 v3 进行测试。
Z
Zoe stands with Ukraine

请注意,截至 2016 年,reCAPTCHA doesn't naively support localhost anymore。从常见问题解答:

默认情况下不再支持 localhost 域。如果您希望继续支持它们进行开发,您可以将它们添加到您的站点密钥的支持域列表中。转到管理控制台以更新您支持的域列表。我们建议使用单独的密钥进行开发和生产,并且不允许在您的生产站点密钥上使用 localhost。

只需将 localhost 添加到您网站的域列表中即可。


我添加了 localhost,但仍然收到错误“Localhost 不是此站点密钥支持的域的列表”。
@ArbazAbid 您可能需要等待一个小时左右才能让谷歌更新他们的系统......
此外,如果您有很多项目并且您设置了 Windows 主机文件和 VirtualHosts,例如在 WAMP 中,可以在 C:\wamp\bin\apache\Apache2.2.21\conf\extra\httpd-vhosts.conf 中找到它,然后注册您的项目服务器名称。测试并且工作正常。
@Jeffz 主机文件不是特定于 Windows 的 - 这是一个很好的一般建议。
P
Peter Mortensen

它是如此容易:

转到您的 google reCAPTCHA 管理面板,将 localhost 和 127.0.0.1 添加到新站点的域中,如下图所示。

https://i.stack.imgur.com/ikMHd.jpg

更新:

如果您的问题是如何在 Google 网站上设置 reCAPTCHA 以便在 localhost 中使用它,那么就像我在上面写的那样,但是如果您很好奇如何在 both localhost上使用 reCAPTCHA和 控制器中的最少代码website host 并防止其中包含 ConfigurationManager.AppSettings["ReCaptcha:SiteKey"] 之类的代码,然后我会在我的答案中帮助您提供这些额外的描述和代码。

你喜欢下面的 GET 和 POST 操作吗?

下面的代码支持 reCAPTCHA,不需要任何其他代码来处理 reCAPTCHA。

[HttpGet]
[Recaptcha]
public ActionResult Register()
{
    // Your code in the GET action
}

[HttpPost]
[Recaptcha]
[ValidateAntiForgeryToken]
public ActionResult Register(RegisterViewModel model, string reCaptcha_SecretKey){
   // Your code in the POST action
   if (!ModelState.IsValid || !ReCaptcha.Validate(reCaptcha_SecretKey))
   {
       // Your code
   }
   // Your code
}

视图中: (reference)

@ReCaptcha.GetHtml(@ViewBag.publicKey)

@if (ViewBag.RecaptchaLastErrors != null)
{
    <div>Oops! Invalid reCAPTCHA =(</div>
}

使用它

A) 将以下 ActionFilter 添加到您的 Web 项目中:

public class RecaptchaAttribute : FilterAttribute, IActionFilter
{
    public void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var setting_Key = filterContext.HttpContext.Request.IsLocal ? "ReCaptcha_Local" : "ReCaptcha";
        filterContext.ActionParameters["ReCaptcha_SecretKey"] = ConfigurationManager.AppSettings[$"{setting_Key}:SecretKey"];
    }

    public void OnActionExecuted(ActionExecutedContext filterContext)
    {
        var setting_Key = filterContext.HttpContext.Request.IsLocal ? "ReCaptcha_Local" : "ReCaptcha";
        filterContext.Controller.ViewBag.Recaptcha = ReCaptcha.GetHtml(publicKey: ConfigurationManager.AppSettings[$"{setting_Key}:SiteKey"]);
        filterContext.Controller.ViewBag.publicKey = ConfigurationManager.AppSettings[$"{setting_Key}:SiteKey"];
    }
}

B) 在您的 webconfig 文件中添加 localhostwebsite 的 reCAPTCHA 设置密钥,如下所示:

<appSettings>

    <!-- RECAPTCHA SETTING KEYS FOR LOCALHOST -->
    <add key="ReCaptcha_Local:SiteKey" value="[Localhost SiteKey]" />
    <add key="ReCaptcha_Local:SecretKey" value="[Localhost SecretKey]" />
    <!-- RECAPTCHA SETTING KEYS FOR WEBSITE -->
    <!--<add key="ReCaptcha:SiteKey" value="[Webite SiteKey]" />
    <add key="ReCaptcha:SecretKey" value="[Webite SecretKey]" />-->

    <!-- OTHER SETTING KEYS OF YOUR PROJECT -->

</appSettings>

注意:通过这种方式,您无需在 发布操作 中设置 reCaptcha_SecretKey 参数或在操作和视图中手动设置任何用于 reCaptcha 的 ViewBag。所有这些都将在运行时自动填充适当的值,具体取决于您是否在 localhost 或网站上运行了项目。


P
Peter Mortensen

当您在 Google reCAPTCHA 中添加域时:

添加新域:

本地主机,而不是本地主机

“L”是大写字母。


字母大小写无关紧要。我刚刚测试过。添加 Localhostlocalhost 相同。至少,在 reCaptcha v3 中。
使用 Recaptcha v2 对此进行了测试。本地主机和本地主机都不会保存。
“Localhost”中的大写“L”真的很重要吗?您确定吗?
我需要 v3 上的大写 L:/
P
Peter Mortensen

自 2021 年 1 月 2 日起,Google 在 this article 中发布了这两个密钥以供测试。

我想用 reCAPTCHA 运行自动化测试。我应该怎么办?对于 reCAPTCHA v3,为测试环境创建一个单独的密钥。分数可能不准确,因为 reCAPTCHA v3 依赖于查看真实流量。

对于 reCAPTCHA v2,请使用以下测试密钥。您将永远不会收到验证码,并且所有验证请求都会通过。

Site key: 6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI
Secret key: 6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe

reCAPTCHA 小部件将显示一条警告消息,以确保它不用于生产流量。

在我第一次使用密钥时,生成的电子邮件进入了垃圾邮件。


这些密钥在他们的文档中,但由于它们仅适用于 reCAPTCHA v2,因此它们不再有效。我无法想象如果您今天正在开发,仅仅切换到 v3 并不比解决 v2 更容易。
P
Peter Mortensen

删除当前的 reCAPTCHA 密钥,注册新密钥,并使用以下域设置您的密钥设置:

127.0.0.1
localhost

P
Peter Mortensen

谷歌最近已停止默认允许 localhost (正如@Artur Cesar De Melo 所触及的那样)。这是在他们的常见问题解答下:

我收到一条错误消息“本地主机不在支持的域列表中”。以前是这样的,我该怎么办?默认情况下不再支持 localhost 域。如果您希望继续支持它们进行开发,您可以将它们添加到您的站点密钥的支持域列表中。转到管理控制台以更新您支持的域列表。我们建议使用单独的密钥进行开发和生产,并且不允许在您的生产站点密钥上使用 localhost。

1:为您的开发环境创建一个单独的密钥

2:将 127.0.0.1 添加到允许域列表中

3:保存更改并等待最多 30 分钟以使更改生效


P
Peter Mortensen

reCAPTCHA 在 localhost/ 上不起作用。

使用 127.0.0.1/ 而不是 localhost/


这个答案与公认的答案有何不同?
它是公认的更简单的版本。两个答案在接受的一个中都不正确。对于 1) 您不需要将 localhost 添加到接受的域列表中。对于 2) 它不适用于本地主机。
2021 年 5 月:请勿在姓名或地址后添加任何字符,Google 会抛出错误 The following domain is invalid: 127.0.0.1/. A valid domain requires a host and must not include any protocol, path, port, query or fragment.
i
isherwood

在您的 Google reCAPTCHA 网站 (https://www.google.com/recaptcha/admin/site/{siteid}/settings) 的域列表中,添加 LOCALHOST

如果上述方法不起作用,请尝试添加 127.0.0.1


为什么是大写(“LOCALHOST”)?
P
Peter Mortensen

根据Google's reCAPTCHA documentation

默认情况下不再支持 localhost 域。如果您希望继续支持它们进行开发,您可以将它们添加到您的站点密钥的支持域列表中。转到管理控制台以更新您支持的域列表。我们建议使用单独的密钥进行开发和生产,并且不允许在生产站点密钥上使用 localhost


P
Peter Mortensen

在 https://www.google.com/recaptcha/admin 注册您的网站 添加 JavaScript 插件 添加 Google 提供的类和您的站点密钥


P
Peter Mortensen

localhost 现在可以工作了。但是,请记住,将 localhost 添加到域名列表后,最多需要 30 分钟才能生效(根据针对域名列表显示的帮助提示)。


P
Peter Mortensen

如果您有旧密钥,则应重新创建 API 密钥。还要注意代理。


代理有什么问题?代理需要允许来自 Google API 的通信?
@SQLDBA 配置不正确或新位置(IP)来自制裁国家,这可能会导致一些问题。
P
Peter Mortensen

可以写“localhost”或“127.0.0.1”,但URL必须相同。

示例:Google Domains 添加 -> localhost URL => localhost/login.php

示例:Google Domains 添加 -> 127.0.0.1 URL => 127.0.0.1/login.php


P
Peter Mortensen

我最近正在创建一个涉及 reCAPTCHA v2 的网站,我需要在我的本地主机上进行测试自动化。我没有在 reCAPTCHA 管理门户中添加任何 IP 地址或 localhost。

请按照以下步骤操作

登录到 reCAPTCHA 管理站点。屏幕截图 Locate Key Settings 单击高级设置 在域名验证下,取消选中验证 reCAPTCHA 解决方案的来源复选框。此选项用于验证来自上述域之一的请求。请注意,如果禁用,您需要在验证解决方案时检查服务器上的主机名。

我创建了一个新密钥,禁用它,并使用这个密钥在 localhost 中进行测试。

这是为评论实现 reCAPTCHA 的 a sample page


P
Peter Mortensen

截至 2021 年的今天,Google reCAPTCHA Enterprise 版控制台包含一项验证检查,不允许允许将 localhost 添加到允许的域列表中。为了解决这个问题(显然仅用于开发/测试目的)为我做以下工作:

在您的 hosts 文件中创建一个条目,将您的域解析为您的 localhost 127.0.0.1 不管您的域-will-be.com 不是通过导航到 localhost,而是通过导航到您的域来测试您的应用程序。

我的本地服务器/应用程序通常会在 http://localhost:4000 运行,因此导航到 http://whatever-your-domain-will-be.com:4000 就可以了。

一旦部署或测试完成,就很容易删除主机文件条目,并且在 reCAPTCHA 允许的域列表中没有挥之不去的垃圾。


P
Peter Mortensen

这可能有助于所有在本地主机上遇到 reCAPTCHA 问题的用户。谷歌确实说“默认情况下,所有密钥都在 'localhost'(或 '127.0.0.1')上工作”,但实际上在 localhost 上使用 reCAPTCHA 可能会导致问题。就我而言,我使用 secure tokens 解决了它。

I posted a working solution for PHP here


P
Peter Mortensen

出于测试目的,如果您想在 localhost 上测试包含 reCAPTCHA 的网页,请在 Admin Console 2 的域列表中添加 localhosthttps://www.google.com/recaptcha/admin。 *建议为 localhost 创建一个单独的站点密钥。

Admin Console Screenshot

CAPTCHA Output


P
Peter Mortensen

对我有用的方法是使用我的外部 IP 地址。

如果您不知道它是什么,只需谷歌“我的 IP 是什么”

然后使用您的 IP 地址并在您的域中为验证码设置它,它应该开始正常工作。


P
Peter Mortensen

如果您使用的是 Laravel,那么您应该重新启动服务器并运行以下两个命令:

php artisan config:clear

php artisan cache:clear

m
myworldbox

快速回答

Do get requests on Recaptcha in your backend rather than frontend

C
Carlos Cruz

对我来说,它可以删除我的实际配置并创建一个新配置,添加如下域:

https://i.stack.imgur.com/zu6QG.png


这是危险的。您不应将本地地址和公共地址列入白名单。如果我访问您的站点,我可以轻松地绕过您重新验证,因为我的计算机(和任何计算机)可以是 127.0.0.1。如果您想知道谁会这样做,我在媒体工作,我可以肯定地告诉您,网络上的许多恶意机器人都会这样做。
当然,但我这样做只是为了开发目的。在 prod 上,显然这将被改变。感谢您的建议! :)
是的,但是您在屏幕抓取中列出了一个公共 IP。说真的,这是一种利用。如果您在某处托管集成或测试系统,请为此使用新的验证码。对于您的本地框,仅使用 localhost 和 127.0.0.1。当我们谈论 recaptcha 时,它不是最严重的漏洞,但它暗示了不那么谨慎的安全实践。只是一个人的意见。
P
Peter Mortensen

我在 Laravel 网站上收到与 reCAPTCHA 相关的错误。我通过使用一些命令和一个 env 文件解决了它,以前的答案也将有助于解决这个问题。

首先,检查 Google reCAPTCHA 密钥的 env 文件(在您的情况下是具有 Google reCAPTCHA 密钥的文件)。

其次,运行这些命令:

php artisan config:clear php artisan cache:clear composer dump-autoload php artisan view:clear php artisan route:clear

它会解决你的问题。


这不是关于 reCaptcha 的问题,缓存问题,而是关于在开发环境(本地主机域)下使用它。

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅