.NET Recaptcha https

时间:2010-04-14 11:13:19

标签: asp.net https recaptcha

我们已经开始使用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();
        }

3 个答案:

答案 0 :(得分:12)

如果您查看http://recaptcha.net/apidocs/captcha/client.html,则说明:

  

“为了避免获取浏览器   警告,如果您使用reCAPTCHA   SSL站点,你应该替换   http://api.recaptcha.net   https://api-secure.recaptcha.net“。

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

答案 1 :(得分:5)

.NET库不需要任何配置即可在HTTPS环境中运行。它将从当前HttpContext派生,无论请求是否来自HTTPS协议。

但是,如果它不能按预期工作,您可以使用RecaptchaControl.OverrideSecureMode属性。设置为True以强制使用HTTPS模式。

<强>更新

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

答案 2 :(得分:0)

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

  1. RecaptchaControl.OverrideSecureMode属性设置为true,正如Adrian Godong在他对此问题的原始答案中所提到的那样。这允许控件在本地和开发中不使用SSL,在测试和prod中使用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”错误。