7

我们已经开始使用 ASP.NET recaptcha 控件,它工作正常。但我们的要求之一是所有出站流量都通过 Https。

我知道recaptcha 支持https,但不清楚使用ASP.NET 插件选项时如何配置(或者即使它是可配置的)。

有没有人有这方面的经验?

我将扩展我到目前为止发现的内容......

Recaptcha 包包含 3 个公共类

RecaptchaControl, RecaptchaValidatorRecaptchaResponse

RecaptchaControl是一个 Asp.NET 控件,那里的 recaptcha 特定方法似乎与主题/外观有关。

Validator 的一个实例有一个 RemoteIP 字段(我认为它代表验证服务器),但我无法将它绑定到控件。

RecaptchaResponse似乎或多或少代表了一个具有可能响应的枚举(有效/无效/连接失败)。

如果请求是 https ,Recaptcha 控件看起来会智能地选择https 。我假设它对验证也是如此,但从源代码 http://code.google.com/p/recaptcha/source/browse/trunk/recaptcha-plugins/dotnet/library/中并不清楚

private const string VerifyUrl = "http://www.google.com/recaptcha/api/verify";
private const string RECAPTCHA_SECURE_HOST = "https://api-secure.recaptcha.net";        
private const string RECAPTCHA_HOST = "http://api.recaptcha.net";
--------------------------------SNIP------------------------------------
/// <summary>
        /// This function generates challenge URL.
        /// </summary>
        private string GenerateChallengeUrl(bool noScript)
        {
            StringBuilder urlBuilder = new StringBuilder();
            urlBuilder.Append(Context.Request.IsSecureConnection || this.overrideSecureMode ? RECAPTCHA_SECURE_HOST : RECAPTCHA_HOST);
            urlBuilder.Append(noScript ? "/noscript?" : "/challenge?");
            urlBuilder.AppendFormat("k={0}", this.PublicKey);
            if (this.recaptchaResponse != null && this.recaptchaResponse.ErrorCode != string.Empty)
            {
                urlBuilder.AppendFormat("&error={0}", this.recaptchaResponse.ErrorCode);
            }

            return urlBuilder.ToString();
        }
4

3 回答 3

12

如果您查看http://recaptcha.net/apidocs/captcha/client.html它会说:

“为了避免收到浏览器警告,如果您在 SSL 站点上使用 reCAPTCHA,您应该将 http://api.recaptcha.net替换为 https://api-secure.recaptcha.net。”

很明显,recaptcha 支持 HTTPS 提交。ASP.NET 控件是否有任何可以配置出站 URL 的属性?在最坏的情况下,您可能需要使用Reflector来检查代码并查看它是如何构建的。

于 2010-04-14T11:27:24.263 回答
5

.NET 库不需要任何配置即可在 HTTPS 环境中工作。它将根据当前HttpContext请求是否来自 HTTPS 协议。

但是,RecaptchaControl.OverrideSecureMode您可以使用一些属性,以防万一它无法按预期工作。设置为True强制 HTTPS 模式。

更新

我似乎误解了这个问题。恐怕没有用于 reCAPTCHA 验证的 HTTPS 端点(在您的服务器和他们的服务器之间)。

于 2010-05-25T15:10:10.077 回答
0

我们正在使用 .NET 的 reCAPTCHA 插件,我们需要做两件事来让它在我们的环境中通过 SSL 工作。我们的开发环境不使用 SSL,而我们的测试和生产环境使用。

  1. RecaptchaControl.OverrideSecureMode正如 Adrian Godong 在他对这个问题的原始回答中提到的那样,将属性设置为 true。这允许控件在本地和不使用 SSL 的开发中工作,并在使用 SSL 的测试和生产中工作。

    <recaptcha:RecaptchaControl
        OverrideSecureMode="True"
        ID="recaptcha"
        runat="server"
        Theme="blackglass"
        />
    
  2. 当我们生成公钥和私钥时,我们指定了全局密钥。这使我们能够在所有不同的环境(本地、dev.mydomain.com、test.mydomain.com 和 mydomain.com)中使用 recaptcha 并修复了“ input error: invalid referrer”错误。

于 2014-06-23T23:28:39.277 回答