2010-04-14 19 views
6

Zaczęliśmy używać kontrolki recaptcha ASP.NET i działa dobrze. ale jednym z wymogów jest to, że cały ruch wychodzący przechodzi przez Https..NET Recaptcha https

Wiem, że recaptcha obsługuje https, ale nie jest jasne, jak skonfigurować (lub nawet jeśli jest konfigurowalny) podczas korzystania z opcji wtyczki ASP.NET.

ma ktoś ma jakiekolwiek doświadczenie w tym?

będę rozwinąć trochę na co znalazłem do tej pory ....

Pakiet zawiera 3 Odśwież klas publicznych

RecaptchaControl, RecaptchaValidator i RecaptchaResponse

RecaptchaControl jest Asp Kontrola .NET, metody specyficzne dla recaptcha wydają się dotyczyć tematów/wyglądu i odczuć.

Wystąpienie walidatora ma pole RemoteIP (które, jak sądzę, będzie reprezentować serwer weryfikacji), ale nie mogę go powiązać z formantem.

RecaptchaResponse wydaje się mniej więcej reprezentować wyliczenie z możliwymi odpowiedziami (prawidłowe/nieprawidłowe/nieudane połączenie).

wygląda tak, że kontrolka Ponownie steruje inteligentnie wybiera https, jeśli żądanie było https. jestem przypuszczać, że robi to samo dla walidacji, ale nie jest jasne z kodu źródłowego 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(); 
     } 

Odpowiedz

12

Jeśli sprawdzeniu http://recaptcha.net/apidocs/captcha/client.html mówi:

„aby uniknąć przeglądarkę Jeśli używasz reCAPTCHA na stronie SSL , powinieneś zamienić http://api.recaptcha.net na https://api-secure.recaptcha.net. "

Tak wyraźnie recaptcha obsługuje przesyłanie HTTPS. Czy formant ASP.NET ma jakieś właściwości, które można skonfigurować dla wychodzącego adresu URL? W najgorszym wypadku możesz potrzebować użyć kodu Reflector, aby sprawdzić kod i zobaczyć, jak jest zbudowany.

+0

dzięki za to Dan, dodałem kilka szczegółów do mojego pytania. Na pewno wrócę z reflektorem w razie potrzeby, ale mam nadzieję, że ktoś może uratować mi kłopot. – TygerKrash

+0

Prosta odpowiedź ... Rozwiązałem mój problem ... – Ahsan

5

Biblioteka .NET nie wymaga żadnej konfiguracji do pracy w środowisku HTTPS. Będzie ono pochodzić z bieżącego HttpContext, niezależnie od tego, czy żądanie jest wykonane z protokołu HTTPS.

Ale istnieje właściwość RecaptchaControl.OverrideSecureMode, której można użyć na wypadek, gdyby nie działała zgodnie z oczekiwaniami. Ustaw na True, aby wymusić tryb HTTPS.

Aktualizacja:

wydaje mi się, że źle zrozumiał pytanie. Obawiam się, że nie ma punktu końcowego HTTPS do weryfikacji reCAPTCHA (między serwerem a ich serwerem).

+0

Uruchomiłem to w równoważniku obciążenia z odciążeniem SSL, więc węzły nie wiedziały o stanie SSL od zwykłego nagłówka. Więc ta zmiana była bardzo pomocna, dzięki! – QFDev

0

Używamy wtyczki reCAPTCHA dla .NET i musieliśmy zrobić dwie rzeczy, aby działało przez SSL w naszym środowisku.Nasze środowisko deweloperów nie korzysta z SSL, a nasze środowiska testowe i produkcyjne.

  1. Ustaw właściwość RecaptchaControl.OverrideSecureMode true, jak Adrian Godong wspomniano w swojej oryginalnej odpowiedzi na to pytanie. Dzięki temu kontrola mogła działać lokalnie, a deweloper nie korzystał z SSL, a w testach i prod wykorzystał SSL.

    <recaptcha:RecaptchaControl 
        OverrideSecureMode="True" 
        ID="recaptcha" 
        runat="server" 
        Theme="blackglass" 
        /> 
    
  2. Kiedy wygenerowane klucze publiczne i prywatne, mamy określone globalnych klucze. To pozwoliło nam używać recaptcha we wszystkich naszych różnych środowiskach (lokalnie, dev.mydomain.com, test.mydomain.com i mydomain.com) i naprawił błąd "input error: invalid referrer".

+0

nie sądzę, że to odpowie na pytanie, szczerze mówiąc. moje zapytanie dotyczy konkretnie prośby o potwierdzenie wysłanej przez Recaptcha. Będzie działać bez względu na to, czy twoja aplikacja jest https czy nie (chyba że firewall między tobą a serwerami google nie zezwala na wychodzące żądania https, w takim przypadku nie powiedzie się). Tymczasem prośba o wyzwanie wydaje się automatycznie przełączać na https, mogę ". t zobacz na podstawie kodu, w jaki sposób wniosek o zatwierdzenie zrobiłby to samo. szczególnie, że protokół "http: //" jest osadzony w definicji adresu URL. – TygerKrash