Hỏi đáp về BotDetect CAPTCHA ASP.NET

Trang này bao gồm các câu trả lời cho các câu hỏi thường gặp về cài đặt, triển khai và hiện thực BotDetect ASP.NET CAPTCHA.

I. Cài đặt & Triển khai

  1. Tôi có thể dùng BotDetect CAPTCHA với ASP.NET 2.0 được không?
  2. Tôi có thể dùng BotDetect CAPTCHA với .NET framework 3.0 hoặc 3.5 được không?
  3. Tôi có thể dùng BotDetect CAPTCHA với Visual Studio 2008 được không?
  4. Cần phải có ASP.NET Session State khi dùng BotDetect CAPTCHA hay không?
  5. Tôi có thể dùng BotDetect ASP.NET CAPTCHA trên một Web Farm / Web Garden được không?
  6. Có cần phải thay đổi gì không nếu tôi sử dụng phiên bản dùng thử của ASP.NET BotDetect CAPTCHA và sau đó mua bản đầy đủ, hay chỉ việc biên dịch lại mã nguồn?
  7. Trang web của tôi đang chạy trên nền ASP.NET 2.0 và nhà cung cấp dịch vụ web không cho phép mức độ bảo mật hoàn toàn tin cậy (full trust) nữa. Sản phẩm của bạn có thể vận hành trên ASP.NET 2.0 với mức độ bảo mật bình thường (medium trust) được không?
  8. Tại sao BotDetect CAPTCHA control đòi hỏi phải được cài đặt như một HttpHandler trong web.config của dự án ASP.NET?
  9. BotDetect ASP.NET CAPTCHA có thể chạy với IIS 7.0 được không? Mọi thứ chạy tốt trên IIS 6.0, nhưng khi tôi chuyển sang IIS 7.0 thì hình ảnh CAPTCHA không hiển thị.
  10. Làm thế nào để tôi có thể cài đặt dự án mẫu của BotDetect trên máy chạy Windows Vista / Server 2008 / Windows 7? Tôi đã thử chạy "1st install the samples.bat" nhưng không được.
  11. Tôi cần phải thực hiện thêm bước nào không để nâng cấp lên phiên bản mới hơn? Khi tôi cập nhật file Lanap.BotDetect.dll trong dự án bằng phiên bản mới, bị báo lỗi "The located assembly's manifest definition does not match the assembly reference".

II. Hiện thực

  1. Tôi đang cố gắng cài đặt một dự án mẫu sử dụng chức năng của BotDetect ASP.NET CAPTCHA, nhưng gặp khó khăn trong việc hiển thị hình ảnh CAPTCHA. Tôi thấy nó trỏ tới LanapCaptcha.aspx, nhưng không có trang này trong thư mục sản phẩm (và cả trong thư mục con của nó).
  2. Tôi đang cố gắng sử dụng BotDetect CAPTCHA control trong trang login.aspx, nó được hiển thị cho người dùng trước khi xác thực họ. Tuy nhiên, hình ảnh CAPTCHA không hiển thị với những người dùng chưa được xác thực. Tôi đang sử dụng Forms Authentication, nên không thể sử dụng nguyên bản file web.config được.
  3. Tôi đã thêm reference cho component trong dự án của tôi, nhưng tôi vẫn bị lỗi khi biên dịch: Could not load file or assembly 'Lanap.BotDetect' or one of its dependencies. The system cannot find the file specified. Trong thư mục Bin có file Interop.LANAPBOTDETECTLib.dll, nhưng không có file nào tên Lanap.BotDetect.dll.
  4. Chúng tôi đang cố gắng sử dụng BotDetect CAPTCHA control trong ASP.NET 2.0 AJAX UpdatePanel nhưng phương thức Captcha.Validate dường như luôn luôn trả về false, mặc dù người sử dụng nhập đúng mã CAPTCHA.
  5. Âm thanh CAPTCHA dường như sử dụng mã CAPTCHA khác với mã được hiển thị trên hình ảnh CAPTCHA. Lỗi này dường như chỉ xuất hiện trên Windows Vista dùng Internet Explorer 7.0.
  6. Âm thanh CAPTCHA dường như sử dụng mã CAPTCHA khác với mã được hiển thị trên hình ảnh CAPTCHA. Lỗi này dường như chỉ xuất hiện trên Google Chrome.
  7. Chúng tôi đang thử sử dụng sản phẩm này với DotNetNuke 4.5.5, và gặp vài vấn đề bởi vì việc giao tiếp với URL viết lại HTTP module. Âm thanh và hình ảnh CAPTCHA được tạo ra dùng đường dẫn tương đối, đường dẫn này bị đọc sai bởi URL rewriter và không được chuyển đến HttpHandler. Bạn đã khắc phục lỗi này chưa?
  8. Chúng tôi đang gặp trục trặc với a) hình ảnh CAPTCHA không hiển thị b) xác thực CAPTCHA trả về false mặc dù nhập đúng mã c) âm thanh CAPTCHA đọc sai mã đang được hiển thị trên hình ảnh CAPTCHA. Dường như là người sử dụng AOL đang gặp những vấn đề này.
  9. Chúng tôi đang thử sử dụng BotDetect CAPTCHA trên trang được <iframe>-d thành trang khác trên domain khác. CAPTCHA chạy tốt trên Firefox, nhưng trên IE (phiên bản 6 hoặc 7) thì không. Bạn đã gặp vấn đề này bao giờ chưa?
  10. Tôi đang gặp lỗi Key cannot be null. Parameter name: key trong file logs. Bạn có biết nguyên nhân nào dẫn đến hiện tượng này không?
  11. Tôi đang kiểm tra BotDetect CAPTCHA trên trang ASP.NET. Vấn đề tôi gặp phải là Google Webmaster Tools thông báo nhiều lỗi crawl cho đường dẫn liên quan tới CAPTCHA. Tôi gặp rất nhiều lỗi tương tự, với chút khác biệt về Urls, nên tôi không chắc là tôi có thể chặn chúng trong file robots.txt.
  12. Tôi đang sử dụng hình ảnh CAPTCHA với chiều cao chỉ 30 pixels, và biểu tượng reload được hiển thị dưới hình ảnh CAPTCHA - có cách nào để làm cho nó hiển thị bên phải của biểu tượng cái loa, thay vì hiển thị dưới nó?
  13. Tôi muốn xác thực CAPTCHA trên máy khách mà không phải gửi thông tin về máy chủ. Bạn có đề nghị nào không? Có thể lấy mã CAPTCHA hiện tại ở Page_Load, và gửi nó tới máy khách được không?
  14. Sau khi thêm BotDetect CAPTCHA vào trang của tôi, tôi nhận thấy rằng lần đầu tiên tôi vào trang này thì URL tự động thay đổi, bằng cách thêm chuỗi truy vấn: ?AspxAutoDetectCookieSupport=1. Chuỗi truy vấn này biến mất trong lần yêu cầu tiếp theo, nhưng tôi đang tự hỏi không biết có thểt ẩn nó đi được không?
  15. Tôi đang sử dụng phiên bản BotDetect CAPTCHA mới nhất và âm thanh đôi khi không đồng nhất với hình ảnh CAPTCHA. Tôi thấy lỗi tương tự trên bản demo của các bạn nếu tôi để 20 phút hoặc hơn trước khi nhấn nút "play audio".
  16. Bạn có ví dụ mẫu nào về sử dụng BotDetect CAPTCHA với ASP.NET CreateUserWizard control hay không?
  17. Trang web của tôi có rất nhiều trường được bảo vệ bởi BotDetect CAPTCHA, và khi người dùng nhập đúng mã CAPTCHA nhưng xác thực phía máy chủ cho các trường khác không thành công, hình ảnh CAPTCHA được hiển thị với mã khác. Có cách nào hiển thị hình ảnh CAPTCHA trước đó và giữ lại mã đã được nhập hay không, như vậy người dùng không phải trả lời nhiều CAPTCHA chỉ vì họ nhập sai các trường khác?

I. Cài đặt & Triển khai

Tôi có thể dùng BotDetect CAPTCHA với ASP.NET 2.0 được không?

Được, bạn có thể dùng BotDetect CAPTCHA với ASP.NET 2.0 .

Cả hai bản dùng thử và đầy đủ đều có gói cài đặt với ASP.NET 1.1 và ASP.NET 2.0, bao gồm phiên bản tương ứng của component và dự án ví dụ tương thích với phiên bản .NET framework của bạn.

Tôi có thể dùng BotDetect CAPTCHA với .NET framework 3.0 hoặc 3.5 được không?

Được, bạn có thể dùng BotDetect CAPTCHA với .NET framework 3.0 hoặc 3.5. Chỉ cần sử dụng gói cài đặt của ASP.NET 2.0.

Phiên bản ASP.NET 2.0 của BotDetect tương thích với các phiên bản mới hơn, vì những phiên bản .NET đó đều chạy trên core .NET 2.0 runtime - .NET 3.0 và .NET 3.5 được hiện thực như là thư viện nâng cấp cho .NET 2.0 framework.

Tôi có thể dùng BotDetect CAPTCHA với Visual Studio 2008 được không?

Được, BotDetect CAPTCHA control trong gói cài đặt ASP.NET 2.0 sẽ hoạt động tốt khi bạn sử dụng Visual Studio 2008.

Các dự án mẫu trong gói cài đặt cũng hoạt động tốt sau khi bạn chạy Conversion Wizard, Wizard này được chạy tự động khi bạn mở dự án với Visual Studio 2008.

Cần phải có ASP.NET Session State khi dùng BotDetect CAPTCHA hay không?

Cần, cần phải có ASP.NET Session State khi dùng BotDetect CAPTCHA.

Chú ý rằng nó không cần phải là Session state mặc định InProc – bạn có thể dùng bất cứ Session nào của Microsoft hay các nhà cung cấp khác mà bạn thích (cơ sở dữ liệu, máy chủ trạng thái, hệ thống file...).

BotDetect không yêu cầu một cách lưu trữ nào nhất định (nó sẽ hoạt động khi nó có thể lưu dữ liệu cần thiết ở đâu đó), nhưng vì ASP.NET cung cấp cách thức để thay đổi cách thức lưu trữ nên chúng tôi sử dụng đối tượng Session (như được giải thích tại http://msdn2.microsoft.com/en-us/library/aa479034.aspx), tất cả những lời gọi lưu trữ trong mã nguồn của BotDetect đều dùng đối tượng Session.

Tôi có thể dùng BotDetect ASP.NET CAPTCHA trên một Web Farm / Web Garden được không?

Được. Chú ý rằng BotDetect CAPTCHA yêu cầu Session State persistence, vì vậy bạn phải thiết lập cho phép Session State trong ứng dụng web của bạn. Trong ngữ cảnh của Web Farm / Web Garden, điều này có nghĩa là:

  • Thiết lập ASP.NET sử dụng SQL Server hoặc .NET State Server của Session State persistence, và lưu Session State cho toàn bộ Web Farm trên cùng một máy chủ.
  • Tiếp tục sử dụng InProc Session State trên từng máy chủ, nhưng bạn phải đảm bảo máy khách trả về máy chủ có chứa dữ liệu về Session State trên tất cả các yêu cầu Http sau yêu cầu đầu tiên. Điều này được biết đến như cho phép sticky connections. Hãy kiểm tra thiết lập của load-balancer.

Thông tin thêm về đề tài này, tham khảo các trang sau:

Có cần phải thay đổi gì không nếu tôi sử dụng phiên bản dùng thử của ASP.NET BotDetect CAPTCHA và sau đó mua bản đầy đủ, hay chỉ việc biên dịch lại mã nguồn?

Không cần phải thay đổi gì khi bạn mua phiên bản đầy đủ của BotDetect ASP.NET CAPTCHA control.

Bạn có thể lập trình với phiên bản dùng thử, và sau khi mua thay thế file Lanap.BotDetect.dll của bản dùng thử trên máy chủ với bản đầy đủ. Bằng cách đó, bạn không cần lập trình thêm thậm chí không cần biên dịch lại.

Điều này được giải thích chi tiết hơn tại Thông tin về phiên bản dùng thử BotDetect CAPTCHA.

Trang web của tôi đang chạy trên nền ASP.NET 2.0 và nhà cung cấp dịch vụ web không cho phép mức độ bảo mật hoàn toàn tin cậy (full trust) nữa. Sản phẩm của bạn có thể vận hành trên ASP.NET 2.0 với mức độ bảo mật bình thường (medium trust) được không?

Được. Vì rằng phiên bản 2.0, BotDetect chạy với ASP.NET 2.0 trong medium trust.

Nói cách khác, file Lanap.BotDetect.dll được đánh dấu với:

[assembly: System.Security.AllowPartiallyTrustedCallers]

Tại sao BotDetect CAPTCHA control đòi hỏi phải được cài đặt như một HttpHandler trong web.config của dự án ASP.NET?

HttpHandler cần thiết để sinh ra hình ảnh CAPTCHA. Chúng tôi không lưu những hình ảnh đó trên đĩa cứng hay sử dụng lại dưới bất cứ hình thức nào, ngược lại tạo ra chúng khi cần vì lý do bảo mật. ASP.NET HttpHandler cho phép chúng ta tạo hình ảnh CAPTCHA mà chỉ người sử dụng hiện tại mới thấy, và cho phép chỉ một lần trả lời cho mỗi mã CAPTCHA.

BotDetect ASP.NET CAPTCHA có thể chạy với IIS 7.0 được không? Mọi thứ chạy tốt trên IIS 6.0, nhưng khi tôi chuyển sang IIS 7.0 thì hình ảnh CAPTCHA không hiển thị.

Được. BotDetect ASP.NET CAPTCHA chạy tốt với IIS 7.0. Nếu bạn chạy ASP.NET trong integrated mode, bạn cần thêm các khai báo dưới đây vào file web.config:

<system.webServer>
  <validation validateIntegratedModeConfiguration="false" />
  <handlers>
    <remove name="LanapCaptchaHandler"/>
    <add name="LanapCaptchaHandler" preCondition="integratedMode" 
      verb="*" path="LanapCaptcha.aspx" 
      type="Lanap.BotDetect.CaptchaHandler, Lanap.BotDetect" />
  </handlers>
</system.webServer>

Làm thế nào để tôi có thể cài đặt dự án mẫu của BotDetect trên máy chạy Windows Vista / Server 2008 / Windows 7? Tôi đã thử chạy "1st install the samples.bat" nhưng không được.

Script để cài đặt ví dụ mẫu phải được chạy với quyền Administrator. Không may là, file .bat không có lựa chọn "Run as administrator" trong menu ngữ cảnh mặc định, vì vậy bạn phải tìm tới thư mục Samples và chạy script tại đây bằng cách:

  1. Chọn "Browse Samples Folder" từ vị trí của Start Menu "1st install the samples.bat"
  2. Click phải vào file InstallSamples.bat và chọn "Run as administrator"

Tôi cần phải thực hiện thêm bước nào không để nâng cấp lên phiên bản mới hơn? Khi tôi cập nhật file Lanap.BotDetect.dll trong dự án bằng phiên bản mới, bị báo lỗi "The located assembly's manifest definition does not match the assembly reference".

  • Nếu bạn sử dụng BotDetect CAPTCHA trong một dự án ASP.NET Web Application hoặc một ASP.NET MVC Web Application (thay vì ASP.NET Web Site), bạn phải biên dịch lại dự án với file mới Lanap.BotDetect.dll, và triển khai lại.
  • Nếu bạn đang dùng tiện ích lưu lỗi để dò lỗi của BotDetect CAPTCHA, bạn phải cập nhật file Lanap.BotDetect.Troubleshooting.dll lên phiên bản mới nhất.
  • Nếu bạn tham khảo đến file Lanap.BotDetect.dll với số đầy đủ PublicKeyToken (trong file web.config hoặc @Register), bạn phải cập nhật các giá trị này tương ứng với phiên bản mới.

II. Hiện thực

Tôi đang cố gắng cài đặt một dự án mẫu sử dụng chức năng của BotDetect ASP.NET CAPTCHA, nhưng gặp khó khăn trong việc hiển thị hình ảnh CAPTCHA. Tôi thấy nó trỏ tới LanapCaptcha.aspx, nhưng không có trang này trong thư mục sản phẩm (và cả trong thư mục con của nó).

LanapCaptcha.aspx là một HttpHandler được khai báo trong file Lanap.BotDetect.dll, và nó không tồn tại trên ổ cứng của bạn (như là một file). Bạn có thể đọc một bài viết hay về HttpHandler logic: http://www.devx.com/dotnet/Article/6962/1954?pf=true.

Một cách ngắn gọn: bạn không phải tìm file LanapCaptcha.aspx. Chỉ cần thêm tham khảo tới file Lanap.BotDetect.dll trong dự án của bạn, và Captcha control vào trang web. Sau đó, mở file web.config và thêm khai báo HttpHandler vào phần <system.web>:

<system.web>
  <httpHandlers>
    <add verb="*" path="LanapCaptcha.aspx" 
      type="Lanap.BotDetect.CaptchaHandler, 
        Lanap.BotDetect"/>
  </httpHandlers>
</system.web>

Lưu mọi thay đổi, biên dịch và thực thi dự án bạn sẽ thấy hình ảnh CAPTCHA hiển thị trên trang web. Bạn có thể xem Hướng dẫn sử dụng BotDetect ASP.NET CAPTCHA trong Visual Studio 2005, mọi bước cần thiết đều được giải thích chi tiết.

Tôi đang cố gắng sử dụng BotDetect CAPTCHA control trong trang login.aspx, nó được hiển thị cho người dùng trước khi xác thực họ. Tuy nhiên, hình ảnh CAPTCHA không hiển thị với những người dùng chưa được xác thực. Tôi đang sử dụng Forms Authentication, nên không thể sử dụng nguyên bản file web.config được.

Đây là phần xác thực trong file .config:

<authentication mode = "Forms">
  <forms name = ".SECAUTH" loginUrl="login.aspx" 
    timeout="480" />
</authentication>
<authorization>
  <deny users="?" />
</authorization>>

Bạn cần phải tắt việc kiểm tra xác thực cho các yêu cầu BotDetect CAPTCHA. Thêm đoạn mã này vào phần <configuration> của file web.config sẽ giải quyết được vấn đề:

<location path="LanapCaptcha.aspx">
  <system.web>
    <authorization>
      <allow users="*"/>
    </authorization>
  </system.web>
</location>

Tôi đã thêm reference cho component trong dự án của tôi, nhưng tôi vẫn bị lỗi khi biên dịch:

Could not load file or assembly 'Lanap.BotDetect' or one 
of its dependencies. The system cannot find the file specified.

Trong thư mục Bin có file Interop.LANAPBOTDETECTLib.dll, nhưng không có file nào tên Lanap.BotDetect.dll:

Nếu bạn cài đặt cả 2 phiên bản BotDetect CAPTCHA cho ASP.NET và BotDetect CAPTCHA cho ASP, cẩn thận chỉ dùng phiên bản .NET trong dự án ASP.NET.

Nếu bạn thêm tham khảo đến phiên bản ASP trong dự án .NET, Visual Studio tự động sinh COM Interop wrapper (Interop.LANAPBOTDETECTLib.dll), nhưng giao tiếp của component này khác và không thể sử dụng trong dự án ASP.NET.

Phiên bản .NET của BotDetect CAPTCHA nằm ở

C:\Program Files\Lanapsoft\BotDetect\ASP.NET 2.0\v2.0\
  Assembly\Lanap.BotDetect.dll

Phiên bản COM của BotDetect CAPTCHA nằm ở

C:\Program Files\Lanapsoft\BotDetect\ASP\v2.0\Component\
  LanapBotDetect.dll

Khi bạn xoá tham khảo đến Interop.LANAPBOTDETECTLib.dll và thêm vào Lanap.BotDetect.dll, lỗi này sẽ không xuất hiện nữa.

Chúng tôi đang cố gắng sử dụng BotDetect CAPTCHA control trong ASP.NET 2.0 AJAX UpdatePanel nhưng phương thức Captcha.Validate dường như luôn luôn trả về false, mặc dù người sử dụng nhập đúng mã CAPTCHA.

Cập nhật: Vấn đề này đã được giải quyết hoàn toàn trong phiên bản BotDetect ASP.NET v2.0.10 (phát hành vào ngày 2008-04-06), vì vậy bạn chỉ cần nâng cấp lên phiên bản mới nhất.

Hướng dẫn giải quyết tạm thời sau đây chỉ áp dụng cho phiên bản 2.0.6 - 2.0.9, và trong khi vẫn có thể áp dụng được, nó không được khuyến khích.

Giải pháp tạm thời cho các phiên bản cũ (không được khuyến khích)

Giải quyết vấn đề này cần có BotDetect cho ASP.NET v2.0.6 (phát hành ngày 2007-07-02) hoặc mới hơn. Nếu bạn có phiên bản cũ hơn, xin hãy liên hệ với chúng tôi để được cập nhật.

Bạn đã biết làm cách nào để Captcha control xác thực trong UpdatePanel tại Ví dụ mẫu về ASP.NET Ajax CAPTCHA đi kèm với gói cài đặt BotDetect CAPTCHA.

Về cơ bản, bạn nên sử dụng phiên bản sửa đổi (gọi là AjaxCaptcha) thay vì Lanap.BotDetect.Captcha. Chỉ cần ba bước ngắn gọn để thay đổi:

  1. Copy file AjaxCaptcha.cs (hoặc .vb) từ ví dụ mẫu vào thư mục App_Code trong dự án của bạn.
  2. Thêm:

    <%@Register Assembly="App_Code" Namespace="
      Lanap.BotDetect" TagPrefix="BotDetect" %>

    vào phần đầu của file .aspx, chỉ sau <%@Page>.

  3. Thay thế khai báo <BotDetect:Captcha> bằng <BotDetect:AjaxCaptcha>, ví dụ:

    <BotDetect:Captcha ID="SampleCaptcha" runat="server" /> 

    trở thành:

    <BotDetect:AjaxCaptcha ID="SampleCaptcha" 
      runat="server" SoundEnabled="False" />

Chú ý rằng AjaxCaptcha control trong ví dụ mẫu có thuộc tính SoundEnabled được thiết lập false – việc postback sử dụng bởi UpdatePanel không kết hợp tốt với phiên bản hiện tại của Firefox và DOM scripting. Vì vậy, chúng tôi khuyên không nên dùng âm thanh CAPTCHA trong Update Panel ngay lúc này.

(Cập nhật: Vấn đề về âm thanh CAPTCHA này là do một lỗi trong QuickTime v7.1.6 cho Firefox, và đã được sửa trong phiên bản mới hơn của QuickTime. Âm thanh CAPTCHA đã hoạt động tốt trong ASP.NET Ajax Update Panel.)

Khi bạn thay đổi như vậy, giá trị trường ẩn sẽ được gửi tới UpdatePanel, và việc xác thực CAPTCHA sẽ hoạt động đúng.

Âm thanh CAPTCHA dường như sử dụng mã CAPTCHA khác với mã được hiển thị trên hình ảnh CAPTCHA. Lỗi này dường như chỉ xuất hiện trên Windows Vista dùng Internet Explorer 7.0.

Giải quyết vấn đề này cần có BotDetect cho ASP.NET v2.0.7 (phát hành ngày 2007-07-18) hoặc mới hơn. Nếu bạn có phiên bản cũ hơn, xin hãy liên hệ với chúng tôi để được cập nhật.

Bên cạnh việc cập nhật phiên bản .dll mới nhất trên máy chủ, bạn cũng cần phải thay đổi khai báo <sessionState> trong file web.config . Ví dụ, nếu bạn đang dùng khai báo như sau:

<sessionState mode="InProc" cookieless="AutoDetect" 
  timeout="20" />

Hãy đổi lại thành:

<sessionState mode="InProc" cookieless="AutoDetect" 
  timeout="20" sessionIDManagerType="
    Lanap.BotDetect.Persistence.CustomSessionIDManager, 
    Lanap.BotDetect" />

Sau khi thêm giá trị sessionIDManagerType vấn đề sẽ được giải quyết.

Giải thích

Vấn đề này là do Windows Media Player 11 (dùng trên Vista), tạo 2 yêu cầu liên tục cho mỗi lần nhấn biểu tượng cái loa (tất cả các chương trình khác - bào gồm Windows Media Player 9.0 và 10.0 - chỉ gửi một yêu cầu). Yêu cầu đầu tiên hoạt động đúng (mã đúng được đọc từ Session state...), nhưng yêu cầu thứ hai không có ASP.NET Session cookie, làm cho Session mới (và mã mới) được tạo ra.

Nếu bạn dùng phiên bản mới của .dll, mà thay đổi file web.config, Session ID sẽ được gửi dưới dạng tham số của chuỗi truy vấn. Sau đó Session ID Manager được sử dụng để nhận biết và tạo file âm thanh từ dữ liệu Session đúng.

Giải pháp khác là luôn luôn dùng cookieless Sessions. Nếu bạn thích cách này, chú ý là tất cả Urls trong ứng dụng sẽ bị thay đổi để bao gồm Session ID, trong khi sử dụng giải pháp đầu tiên chỉ thay đổi yêu cầu về âm thanh CAPTCHA trong Url.

Âm thanh CAPTCHA dường như sử dụng mã CAPTCHA khác với mã được hiển thị trên hình ảnh CAPTCHA. Lỗi này dường như chỉ xuất hiện trên Google Chrome.

Để giải quyết vấn đề này, bạn cần phải thực hiện một thay đổi nhỏ ở khai báo <sessionState> trong file web.config . Ví dụ, nếu bạn đang sử dụng khai báo như sau:

<sessionState mode="InProc" cookieless="AutoDetect" 
  timeout="20" />

Hãy đổi thành:

<sessionState mode="InProc" cookieless="AutoDetect" 
  timeout="20" sessionIDManagerType="
    Lanap.BotDetect.Persistence.CustomSessionIDManager, 
    Lanap.BotDetect" />

Sau khi thêm giá trị tự định nghĩa sessionIDManagerType vấn đề sẽ được giải quyết.

Giải thích

Theo điều tra của chúng tôi thì Chrome gửi yêu cầu âm thanh CAPTCHA tới Windows Media Player, vì một lý do nào đó yêu cầu âm thanh không có ASP.NET Session cookie, vì vậy Session mới (và mã mới) được tạo ra.

Nếu bạn thay đổi trong file web.config, Session ID (thường được lưu trong ASP.NET Session cookie, hoặc trong Url) cũng được gửi như là một thông số của chuỗi truy vấn. Sau đó Session ID Manager được sử dụng để nhận biết người dùng và tạo file âm thanh từ dữ liệu đúng của Session.

Giải pháp khác là luôn luôn dùng cookieless Sessions. Nếu bạn thích cách này, chú ý là tất cả Urls trong ứng dụng sẽ bị thay đổi để bao gồm Session ID, trong khi sử dụng giải pháp đầu tiên chỉ thay đổi yêu cầu về âm thanh CAPTCHA trong Url.

Chúng tôi đang thử sử dụng sản phẩm này với DotNetNuke 4.5.5, và gặp vài vấn đề bởi vì việc giao tiếp với URL viết lại HTTP module. Âm thanh và hình ảnh CAPTCHA được tạo ra dùng đường dẫn tương đối, đường dẫn này bị đọc sai bởi URL rewriter và không được chuyển đến HttpHandler. Bạn đã khắc phục lỗi này chưa?

Vấn đề có thể được giải quyết bằng cách loại bỏ đường dẫn của hình ảnh và âm thanh CAPTCHA trong cấu hình của DotNetNuke Url Rewriter. Chỉ một bước nữa cần thiết với người dùng DotNetNuke đó là thêm:

<RewriterRule>
  <LookFor>.*LanapCaptcha.aspx(.*)</LookFor>
  <SendTo>~/LanapCaptcha.aspx$1</SendTo>
</RewriterRule>

vào file SiteUrls.config trong thư mục của website của DotNetNuke và BotDetect CAPTCHA sẽ hoạt động đúng.

Chúng tôi đang gặp trục trặc với a) hình ảnh CAPTCHA không hiển thị b) xác thực CAPTCHA trả về false mặc dù nhập đúng mã c) âm thanh CAPTCHA đọc sai mã đang được hiển thị trên hình ảnh CAPTCHA. Dường như là người sử dụng AOL đang gặp những vấn đề này.

Vấn đề này chỉ gặp ở ứng dụng dùng nhiều máy chủ cân bằng tải sử dụng InProc ASP.NET Session State và sticky connections.

Vấn đề với người dùng AOL là do họ đang kết nối thông qua client proxies, và không nhất thiết có cùng địa chỉ IP cho tất cả các yêu cầu. Tuỳ thuộc vào thiết lập của máy chủ cân bằng tải, có thể làm cho sticky connections không làm việc trên máy chủ. Điều này làm cho yêu cầu vẽ hình ảnh CAPTCHA được gửi tới máy chủ khác, không có biến Session mà nó cần.

Bạn có thể tìm thấy giải thích thêm tại:

Tóm lại giải pháp là:

  • Sử dụng một máy chủ duy nhất để lưu Session State trên tất cả các máy chủ cân bằng tảiservers (sử dụng SQL hoặc StateServer ASP.NET Session State).
  • Hoặc, bạn có thể cấu hình máy chủ cân bằng tải để hiện thực sticky connections thậm chí cho cả người dùng AOL. Ví dụ, máy chủ cân bằng tải có thể thêm cookie của riêng nó... Xin hãy xem thêm hỏi đáp về cân bằng tải để biết thêm chi tiết.

Chúng tôi đang thử sử dụng BotDetect CAPTCHA trên trang được <iframe>-d thành trang khác trên domain khác. CAPTCHA chạy tốt trên Firefox, nhưng trên IE (phiên bản 6 hoặc 7) thì không. Bạn đã gặp vấn đề này bao giờ chưa?

CAPTCHA không hoạt động được trong trường hợp này vì ASP.NET Session state không được lưu đúng cách cho người dùng. Vấn đề xảy ra trên IE bởi vì những lý do sau:

  • Trên tất cả các yêu cầu sau yêu cầu đầu tiên, người dùng được trả về với Session state tương ứng sử dụng ASP.Net Session cookie
  • Session state cookie của bạn được thiết lập cho Domain #1 (chứa trang có sử dụng BotDetect CAPTCHA)
  • Trang chủ (chứa <iframe>) được đặt ở Domain #2
  • Cookies ở các domains khác nhau mà không cùng domain với trang chủ được gọi là 3rd party cookies; chúng là nguyên nhân của các vấn đề về bảo mật, và bị chặn bởi IE
  • Khi mở trang đó trên IE 7, bạn có thể xác nhận vấn đề này có thực sự gây lỗi bằng cách thay đổi thiết lập của IE cho phép 3rd party cookies ( Tools > Internet Options > Privacy > Advanced ). Sau khi bạn thay đổi như vậy, CAPTCHA sẽ hoạt động đúng

Giải pháp

Bạn phải thay đổi mã nguồn để sử dụng cross-domain cookies, vì rằng nhiều người sử dụng bị chặn bởi thiết lập mặc định, và vì lý do an toàn.

Cách đơn giản nhất là cấu hình ứng dụng của bạn (trang sử dụng CAPTCHA) để luôn luôn sử dụng cookieless ASP.NET Sessions - lưu SessionID hiện tại trong Url, thay vì cookie.

Bạn có thể làm điều này bằng cách thay đổi khai báo <sessionState> trong file web.config (phần chung với đăng ký BotDetect HttpHandler). Ví dụ, nếu bạn đang sử dụng khai báo như sau:

<sessionState mode="InProc" cookieless="AutoDetect" 
  timeout="20" />

Hãy thay đổi nó thành:

<sessionState mode="InProc" cookieless="true" 
  timeout="20" />

Chú ý rằng điều này sẽ thay đổi động Url của trang sử dụng BotDetect CAPTCHA để chứa SessionID (giống như /(S(vi1maxipelkbz2ahryodzirf))/), nhưng không ảnh hưởng đến Urls của trang chủ (trừ khi bạn thay đổi file web.config của trang đó).

Tôi đang gặp lỗi Key cannot be null. Parameter name: key trong file logs:

at System.Collections.Hashtable.ContainsKey(Object key) 

at Lanap.BotDetect.CaptchaCodeCollection.GetCode(
  CodeSetterDelegate codeSetter, String instanceTimestamp, 
  CodeGenerationPurpose purpose, CodeTypeEnum codeType, 
  Int32 codeLength) 

at Lanap.BotDetect.CaptchaHandler.DrawImage(HttpContext 
  context) 

Bạn có biết nguyên nhân nào dẫn đến hiện tượng này không?

Chúng tôi gặp lỗi này khi máy khách tạo yêu cầu âm thanh hoặc hình ảnh CAPTCHA không hợp lệ. Vấn đề này hay xảy ra khi bots cố gắng truy cập vào trang web.

Đặc biệt, nếu logs của máy chủ chỉ ra lỗi này xảy ra với User Agent giống với Mozilla/3.01 (compatible;), hoặc chuỗi truy vấn của yêu cầu hình ảnh giống như get=image&amp;c=default_ctl00_contentplaceholdermain_captcha1 &amp;t=3172526 2 - với &amp; thay vì &, bạn có thể chắc chắn nó là một loại bot nào đó. Tất cả các trình duyệt hiện đại đều phân tích XHMTL chính xác, vì vậy người dùng là con người sẽ không gặp vấn đề này.

Chúng tôi đã thêm sửa lỗi cho vấn đề này trong BotDetect ASP.NET v2.0.8v2.0.10, vì vậy những yêu cầu này sẽ không gây nên bất cứ ngoại lệ nào được ghi vào log. Nếu bạn đang sử dụng phiên bản cũ hơn, xin hãy liên hệ với chúng tôi để được cập nhật phiên bản mới.

Tôi đang kiểm tra BotDetect CAPTCHA trên trang ASP.NET. Vấn đề tôi gặp phải là Google Webmaster Tools thông báo nhiều lỗi crawl cho đường dẫn liên quan tới CAPTCHA:

www.xyz.com/(S(0v2gv2zl0nf1pd45y3k4itbx))/LanapCaptcha.aspx
  ?get=image&c=default_samplecaptcha
  &t=07855def910d4a8b8256975264967547
  &s=0v2gv2zl0nf1pd45y3k4itbx

Tôi gặp rất nhiều lỗi tương tự, với chút khác biệt về Urls, nên tôi không chắc là tôi có thể chặn chúng trong file robots.txt.

Đương dẫn yêu cầu BotDetect CAPTCHA rõ ràng là phải bị chặn trong file robots.txt.

Có nhiều Urls hơi khác nhau được báo cáo vì Googlebot duyệt trang mà không có cookies, và ASP.NET Cookieless Urls thay đổi mỗi lần ghé thăm (nó được viết lại để chứa Session ID).

Bạn có thể làm như sau để chặn các yêu cầu như vậy trong file robots.txt:

User-Agent: Googlebot
Disallow: /*/LanapCaptcha.aspx
Disallow: /*/WebResource.axd
# other googlebot restrictions go below
/forbidden.html
# ...

User-Agent: *
# other restrictions go below
/forbidden.html
# ...

Vì Urls của các yêu cầu đó thay đổi tự động, chúng có thể bị chặn từ Googlebot bằng file đặc biệt robots.txt hiện thực bởi Google. Tuy nhiên, các crawlers khác có thể không hiểu ký tự *, vì vậy khai báo này phải nằm trong phần dành riêng cho Googlebot của file robots.txt.

Hơn nữa, chú ý rằng file cấm chung (được trình bày trong file forbidden.html) phải được khai báo hai lần: trong cả phần Googlebot và phần chung của file robots.txt. Thật không may là đây là cách mà robots.txt hoạt động - Googlebot sẽ chỉ đọc phần User-Agent: Googlebot, và bỏ qua khai báo User-Agent: *.

Tôi đang sử dụng hình ảnh CAPTCHA với chiều cao chỉ 30 pixels, và biểu tượng reload được hiển thị dưới hình ảnh CAPTCHA - có cách nào để làm cho nó hiển thị bên phải của biểu tượng cái loa, thay vì hiển thị dưới nó?

Bạn có thể làm cho biểu tượng Reload hiển thị bên phải của biểu tượng cái loa bằng cách thêm khai báo sau đây trong CSS stylesheet của trang được bảo vệ bởi CAPTCHA:

BotDetect ASP.NET CAPTCHA v2.0.13 hoặc mới hơn

.LBD_CaptchaDiv
{
  width: 310px !important;
}

.LBD_CaptchaDiv .LBD_CaptchaIcons 
{
  width: 55px !important;
  height: 25px !important;
}

.LBD_CaptchaDiv .LBD_CaptchaIcons a 
{
  display: inline !important;
}

.LBD_CaptchaDiv .LBD_CaptchaIcons a img 
{
  display: inline !important;
  margin-right: 3px !important;
}

BotDetect ASP.NET CAPTCHA v2.0.12 hoặc mới hơn:

#LBD_CaptchaDiv{
  width: 310px !important;
}

#LBD_CaptchaDiv #LBD_CaptchaIcons {
  width: 55px !important;
  height: 25px;
}

#LBD_CaptchaDiv #LBD_CaptchaIcons img {
  padding-right: 4px !important;
}

Nếu hình ảnh CAPTCHA có độ rộng khác 250 pixels, thay đổi khai báo đầu tiên theo công thức sau:

<#LBD_CaptchaDiv width> = <CAPTCHA image width> + 60 px.

Nút reload của BotDetect ASP.NET CAPTCHA được hiển thị bên phải biểu tượng cái loa.

Các biểu tượng sẽ được hiển thị theo chiều ngang, như hình trên.

Tôi muốn xác thực CAPTCHA trên máy khách mà không phải gửi thông tin về máy chủ. Bạn có đề nghị nào không? Có thể lấy mã CAPTCHA hiện tại ở Page_Load, và gửi nó tới máy khách được không??

Nếu bạn muốn tránh phải gửi lại toàn trang, bạn có thể tham khảo BotDetect CAPTCHA Ajax Demo đi kèm với bộ cài đặt, sử dụng ASP.NET Ajax UpdatePanel để chỉ gửi và tải lại một phần của trang với CAPTCHA.

Mặt trái của việc xác thực CAPTCHA trên máy khách

Việc xác thực CAPTCHA hoàn toàn trên máy khách (mà không giao tiếp với máy chủ) không được hỗ trợ bởi BotDetect, vì nếu như vậy thì CAPTCHA đó rất dễ bị bẻ gãy. Ví dụ:

  • Nếu bạn muôn người dùng chỉ được gửi lời bình sau khi đã trả lời đúng CAPTCHA.
  • Nếu việc xác thực được thực hiện trên máy khách, điều này có nghĩa rằng mã JavaScript phải gửi lời bình lên máy chủ khi ký tự CAPTCHA được nhập chính xác.
  • Vì vậy spammer chỉ cần trả lời CAPTCHA một lần, và ghi nhớ bạn sử dụng kết quả như thế nào: ví dụ như gửi một câu truy vấn đặc biệt với tham số POST, hoặc chuyển sang một trang nào đó.
  • Sau đó, chúng có thể giả lập hành động tương tự trong chương trình tự động và hoàn toàn vượt qua CAPTCHA - bằng việc giả dạng đơn giản tham số POST , hoặc truy cập trực tiếp vào trang kết quả.
  • Bạn có thể trở lại việc xác thực CAPTCHA ở phía máy khách bằng việc xác thực cùng một câu trả lời trên máy chủ một khi gửi dữ liệu của trang và trước khi lưu lại lời bình.
  • Nhưng vì bạn giữ câu trả lời đúng của CAPTCHA trên máy khách, bots có thể dễ dàng truy cập vào câu trả lời đó và luôn luôn trả lời đúng CAPTCHA.

Chi tiết chính xác tuỳ thuộc vào cách sử dụng CAPTCHA của bạn. Nhưng cần thiết là, tất cả các đoạn mã ở phía máy khách là không bảo mật và có thể bị giả danh bởi chương trình tự động. Kết quả là, ký tự CAPTCHA chỉ được lưu trên máy chủ, và tất cả việc xác thực CAPTCHA cũng phải được thực hiện trên máy chủ.

Xác thực CAPTCHA trên máy khách - giải pháp

Bạn có thể tránh việc gửi lại toàn bộ trang web bằng việc sử dụng jQuery hoặc một thư viện Ajax khác để tạo yêu cầu xác thực CAPTCHA tới máy chủ, và xử lý kết quả trên máy khách:

  • Khi việc xác thực Ajax CAPTCHA trả về kết quả sai, bạn có thể hiển thị hình ảnh CAPTCHA mới mà không ảnh hưởng đến phần còn lại của trang web, vì vậy có thể tăng tính dễ dàng sử dụng cho trang web đó.
  • Bạn nên luôn luôn thay đổi ký tự CAPTCHA trong những trường hợp đó, vì cho phép trả lời nhiều lần cho cùng một ký tự CAPTCHA sẽ làm cho OCR dễ đoán được câu trả lời.
  • Khi việc xác thực Ajax CAPTCHA thành công, bạn nên gửi dữ liệu lên máy chủ và xác thực lại câu trả lời.
  • Chỉ sau khi việc xác thực CAPTCHA trên phía máy chủ thành công, bạn mới cho phép thực hiện các hành động được bảo vệ (ví dụ như lưu lời bình) trên máy chủ.

Sau khi thêm BotDetect CAPTCHA vào trang của tôi, tôi nhận thấy rằng lần đầu tiên tôi vào trang này thì URL tự động thay đổi, bằng cách thêm chuỗi truy vấn: ?AspxAutoDetectCookieSupport=1. Chuỗi truy vấn này biến mất trong lần yêu cầu tiếp theo, nhưng tôi đang tự hỏi không biết có thểt ẩn nó đi được không?

Chuỗi truy vấn AspxAutoDetectCookieSupport=1 được tự động thêm vào bởi ASP.NET trong giai đoạn kiểm tra trình duyệt có hỗ trợ cookie hay không. Vì rằng thuộc tính <sessionState> cookieless trong file web.config được gán giá trị "AutoDetect", ASP.NET sẽ cố gắng kiểm tra xem trình duyệt có hỗ trợ cookies hay không, và tham số của chuỗi truy vấn được thêm vào trong quá trình đó. Nếu cookies được hỗ trợ, Session ID sẽ được lưu trong cookie, ngược lại Session ID được gửi kèm với Url.

Cách duy nhất để xoá chuỗi truy vấn là gán thuộc tính cookieless bằng "true" hoặc "false" trong file web.config. Nhưng trong trường hợp đó, tất cả các Urls sẽ tự động thay đổi để bao gôm ASP.NET Session identifier (cookieless="true"), hoặc xác thực CAPTCHA sẽ luôn thất bại cho những người dùng không hỗ trợ cookie (cookieless="false").

Vì đây là hành xử mặc định của ASP.NET, bạn phải quyết định giá trị cookieless nào phù hợp nhất với ứng dụng của bạn. Bạn có thể đọc thêm về cookieless Sessions tại http://msdn.microsoft.com/en-us/library/aa479314.aspx.

Tôi đang sử dụng phiên bản BotDetect CAPTCHA mới nhất và âm thanh đôi khi không đồng nhất với hình ảnh CAPTCHA. Tôi thấy lỗi tương tự trên bản demo của các bạn nếu tôi để 20 phút hoặc hơn trước khi nhấn nút "play audio"..

Hoạt động của trang trình diễn trực tuyến của chúng tôi liên quan đến ASP.NET Session timeout - vì mã CAPTCHA được lưu trong ASP.NET Session state, và chúng tôi sử dụng Session state mặc định timeout trong vòng 20 phút, hoạt động này là do nó được thiết kế như vậy.

Nếu trang của bạn đòi hỏi mã CAPTCHA tồn tại lâu hơn bạn có thể:

  • Tăng Session timeout bằng cách thay đổi thuộc tính timeout của phần <sessionState> trong file web.config. Tuy nhiên, điều này sẽ làm tăng dung lượng bộ nhớ cho IIS. Và nếu người dùng nào đó lưu lại trên trang của bạn lâu hơn thời gian timeout, họ vẫn gặp phải vấn đề này.
  • Giải pháp tốt hơn là giữ thời gian timeout ngắn (20 phút), và có thêm "heartbeat" script để kéo dài Session cho những người dùng lưu lại lâu trên trang web. Ví dụ, vì thời gian timeout mặc định là 20 phút, mã Javascript sẽ tạo yêu cầu (Ajax) tới ứng dụng trong mỗi 15 phút, giữ cho Session tồn tại nếu người sử dụng mở trang web lâu hơn.

Nếu âm thanh CAPTCHA trong dự án của bạn khác với mã được hiển thị trên hình ảnh CAPTCHA và chưa hết thời gian timeout, bạn nên điều tra thêm các thiết lập khác. Ví dụ, nếu bạn sử dụng InProc ASP.NET Session state, dữ liệu có thể vẫn bị mất với heartbeat script nếu IIS worker process thay đổi chu kỳ. Hoặc, nếu bạn có nhiều hơn một worker process trên cùng một máy chủ (một web garden), các tiến trình khác nhau sẽ có các Session khác nhau.

In such cases you should switch your project to either StateServer or SQLServer ASP.NET Session state modes, which are not dependent on the IIS worker process life-cycle.

Bạn có ví dụ mẫu nào về sử dụng BotDetect CAPTCHA với ASP.NET CreateUserWizard control hay không?

Dưới đây là ví dụ hướng dẫn xác thực BotDetect CAPTCHA trong CreateUserWizard.

Mã nguồn của Form .aspx

Giả sử bạn có khai báo CreateUserWizard trong file .aspx sau đây:

<asp:CreateUserWizard ID="CreateUserWizard1" runat="server" 
  OnNextButtonClick="CreateUserWizard1_NextButtonClick">

và bạn thay đổi

<WizardSteps>
  <asp:CreateUserWizardStep runat="server">
    <ContentTemplate>

để bao gồm Captcha sau:

<BotDetect:Captcha ID="Captcha1" runat="server" />
<asp:TextBox ID="CodeTextBox" runat="server"></asp:TextBox>
<asp:Label ID="CodeIncorrectLabel" runat="server" 
  Text="Incorrect code!" Visible="false"></asp:Label>

Mã nguồn Form

Bạn có thể thêm phần xác thực Captcha như sau trong hàm NextButtonClick:


[C#]

protected void CreateUserWizard1_NextButtonClick(object sender, 
  WizardNavigationEventArgs e)
{
    if (e.CurrentStepIndex == 0)
    {
        Captcha Captcha1 = (Captcha) CreateUserWizard1.
          CreateUserStep.ContentTemplateContainer.
          FindControl("Captcha1");
					
        TextBox CodeTextBox = (TextBox) CreateUserWizard1.
          CreateUserStep.ContentTemplateContainer.
          FindControl("CodeTextBox");
				
        Label CodeIncorrectLabel = (Label) CreateUserWizard1.
          CreateUserStep.ContentTemplateContainer.
          FindControl("CodeIncorrectLabel");

        string userInput = CodeTextBox.Text;
        if (!Captcha1.Validate(userInput))
        {
            CodeIncorrectLabel.Visible = true;
            e.Cancel = true;
        }
        else
        {
            CodeIncorrectLabel.Visible = false;
            e.Cancel = false;
        }
    }
}


[VB.Net]

Protected Sub CreateUserWizard1_NextButtonClick(ByVal sender 
  As Object, ByVal e As WizardNavigationEventArgs)

    If e.CurrentStepIndex = 0 Then

        Dim Captcha1 As Lanap.BotDetect.Captcha = _ 
          CType(CreateUserWizard1.CreateUserStep. _
          ContentTemplateContainer.FindControl("Captcha1"), _
          Lanap.BotDetect.Captcha)
					
        Dim CodeTextBox As TextBox = _ 
          CType(CreateUserWizard1.CreateUserStep. _ 
          ContentTemplateContainer.FindControl("CodeTextBox"), _
          TextBox)
				
        Dim CodeIncorrectLabel As Label = _ 
          CType(CreateUserWizard1.CreateUserStep.
          ContentTemplateContainer.FindControl( _ 
          "CodeIncorrectLabel"), Label)

        Dim userInput As String = CodeTextBox.Text
        If (Not Captcha1.Validate(userInput)) Then
            CodeIncorrectLabel.Visible = True
            e.Cancel = True
        Else
            CodeIncorrectLabel.Visible = False
            e.Cancel = False
        End If

    End If

End Sub

Trang web của tôi có rất nhiều trường được bảo vệ bởi BotDetect CAPTCHA, và khi người dùng nhập đúng mã CAPTCHA nhưng xác thực phía máy chủ cho các trường khác không thành công, hình ảnh CAPTCHA được hiển thị với mã khác. Có cách nào hiển thị hình ảnh CAPTCHA trước đó và giữ lại mã đã được nhập hay không, như vậy người dùng không phải trả lời nhiều CAPTCHA chỉ vì họ nhập sai các trường khác?

Nếu người dùng trả lời đúng ký tự CAPTCHA nhưng sai username, rõ ràng là họ không cần phải trả lời CAPTCHA khác. Mục đích của CAPTCHA là đảm bảo người dùng là con người, và khi họ đã trả lời đúng vào lần đầu tiên, họ đã vượt qua phép thử.

Nếu bạn phải đưa họ quay lại trang vì họ nhập sai các trường khác, tốt nhất là không nên hiển thị CAPTCHA nữa, vì mục đích sử dụng nó đã đạt được. Cách dễ nhất để nhớ là người dùng đã trả lời CAPTCHA thành công là lưu trên máy chủ, ví dụ:

bool isHuman = SampleCaptcha.Validate(userInput);
Session["IsHuman"] = isHuman;
	
if (Page.IsValid && isHuman)
{
  // the protected code, e.g. account registration or comment post 
}

Then, the stored value is checked before displaying the CAPTCHA to the user, and the CAPTCHA is only displayed if it hasn't already been solved:

protected void Page_PreRender(object sender, EventArgs e)
{
  bool isHuman = false;
  if (null != Session["IsHuman"])
  {
    try 
    {
      isHuman = (bool) Session["IsHuman"];
    }
    catch { // ignore errors
    }
  }
	
  
  // don't show the CAPTCHA if already solved
  if (isHuman) 
  {
    SampleCaptcha.Visible = false;
    CodeTextBox.Visible = false;
  }
}

Vì lý do bảo mật, không thể thấy hai hình ảnh BotDetect CAPTCHA giống hệt nhau trong hai lần tải khác nhau, cũng không sử dụng cùng một mã cho nhiều hơn một hình ảnh CAPTCHA.

Phiên bản hiện tại của BotDetect

Xin lưu ý

Trang này là bản dịch tiếng Việt không chính thức của trang gốc tiếng Anh: BotDetect CAPTCHA ASP.NET FAQ và có thể không chính xác, không đầy đủ hoặc không cập nhật.

Cập nhật ngày 2009-11-30. Áp dụng cho BotDetect ASP.NET CAPTCHA v2.0.15 và BotDetect ASP CAPTCHA v2.0.9.

language: English Español Tiếng Việt