2010-04-14 14 views
6

Abbiamo iniziato a utilizzare il controllo Recaptcha di ASP.NET e funziona correttamente. ma uno dei requisiti che abbiamo è che tutto il traffico in uscita supera Https..NET Recaptcha https

So che recaptcha supporta https, ma non è chiaro come configurare (o anche se è configurabile) quando si utilizza l'opzione di plug-in ASP.NET.

qualcuno ha avuto qualche esperienza in questo?

sarò espandere un po 'su quello che ho trovato finora ....

Il pacchetto Recaptcha contiene 3 classi pubbliche

RecaptchaControl, RecaptchaValidator e RecaptchaResponse

RecaptchaControl è un Asp Controllo .NET, i metodi specifici di recaptcha sembrano essere relativi a temi/aspetto grafico.

Un'istanza del Validator ha un campo RemoteIP (che presumo rappresenti il ​​server di verifica), ma non riesco a vincolarlo al controllo.

RecaptchaResponse sembra più o meno rappresentare un enum con possibili risposte (valido/non valido/non è riuscito a connettersi).

sembra che il controllo Recaptcha selezioni in modo intelligente https se la richiesta era https. sto presumendo che fa la stessa cosa per la convalida, ma la sua non è chiaro dal codice sorgente 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(); 
     } 

risposta

12

se si estrae http://recaptcha.net/apidocs/captcha/client.html dice:

"Al fine di evitare che il browser avvisi, se si utilizza reCAPTCHA su un sito SSL , è necessario sostituire http://api.recaptcha.net con https://api-secure.recaptcha.net. "

Quindi chiaramente recaptcha supporta gli invii HTTPS. Il controllo ASP.NET ha proprietà che è possibile configurare l'URL in uscita? Nel peggiore dei casi potrebbe essere necessario utilizzare Reflector per esaminare il codice e vedere come è costruito.

+0

grazie per quel Dan, ho aggiunto alcuni dettagli alla mia domanda. Certamente rivedrò con il riflettore se necessario, ma spero che qualcuno possa salvarmi il disturbo. – TygerKrash

+0

Risposta semplice ... Risolto il mio problema ... – Ahsan

5

La libreria .NET non richiede alcuna configurazione per funzionare in ambiente HTTPS. Deriverà dall'attuale HttpContext se la richiesta viene effettuata dal protocollo HTTPS.

Ma, c'è la proprietà RecaptchaControl.OverrideSecureMode che è possibile utilizzare solo nel caso in cui non funzioni come previsto. Impostare su True per forzare la modalità HTTPS.

Aggiornamento:

mi sembra di aver capito la domanda. Temo che non esista un endpoint HTTPS per la verifica di reCAPTCHA (tra il tuo server e il loro).

+0

Stavo eseguendo questo in un servizio di bilanciamento del carico con offloading SSL in modo che i nodi non sapessero dello stato SSL dalla solita intestazione. Quindi sì, questo override è stato molto utile, grazie! – QFDev

0

Utilizziamo il plugin reCAPTCHA per .NET e abbiamo dovuto fare due cose per farlo funzionare su SSL nel nostro ambiente.Il nostro ambiente di sviluppo non utilizza SSL e i nostri ambienti di test e produzione.

  1. Impostare la proprietà RecaptchaControl.OverrideSecureMode al vero, come Adrian Godong menzionato nella sua risposta originale a questa domanda. Ciò ha permesso al controllo di funzionare localmente e in dev non usando SSL, e in test e prod con SSL.

    <recaptcha:RecaptchaControl 
        OverrideSecureMode="True" 
        ID="recaptcha" 
        runat="server" 
        Theme="blackglass" 
        /> 
    
  2. Quando abbiamo generato le chiavi pubbliche e private, abbiamo specificato tasti globali. Questo ci ha permesso di utilizzare recaptcha in tutti i nostri diversi ambienti (locale, dev.mydomain.com, test.mydomain.com e mydomain.com) e corretto l'errore "input error: invalid referrer".

+0

non pensa che questo risponda alla domanda per essere onesti. la mia richiesta riguarda specificamente la richiesta di convalida effettuata da Recaptcha. Funzionerà bene se la tua app è https o meno (a meno che il firewall tra te e i server di google non permetta le richieste https in uscita, nel qual caso fallirà). Mentre la richiesta di challenge sembra passare automaticamente a https, posso Vedi in base al codice come la richiesta di validazione farebbe lo stesso. in particolare dal momento che il protocollo "http: //" è incorporato nella definizione dell'URL. – TygerKrash