Các vấn đề đã biết của BotDetect ASP.NET CAPTCHA

Trang này liệt kê các vấn đề đã biết của BotDetect ASP.NET CAPTCHA, với giải thích tại sao chúng xuất hiện và giải pháp.

Không nghe được âm thanh CAPTCHA trên IE 6.0 khi sử dụng nén ở phía máy chủ

ID của vấn đề

#4120852

Sản phẩm bị ảnh hưởng

BotDetect ASP.NET CAPTCHA v2.0.*

Máy chủ bị ảnh hưởng

.NET Framework 1.1, 2.0, 3.0, 3.5

Trình duyệt bị ảnh hưởng

IE 6.0

Trạng thái

Không thể giải quyết được do đây là vấn đề của nhà cung cấp thứ ba

Mô tả

Nếu bạn thiết lập cho phép nén nội dung động trên IIS của máy chủ cho đường dẫn của BotDetect CAPTCHA, âm thanh CAPTCHA sẽ không được phát ra trên IE 6.0.

Các bước tái hiện

  • Mở trang có sử dụng BotDetect ASP CAPTCHA trên IE 6.0
  • Click vào biểu tượng cái loa - âm thanh CAPTCHA sẽ không được phát
  • Click phải vào biểu tượng cái loa và chọn "Save target as..." - file âm thanh được lưu chứa đầy đủ các ký tự CAPTCHA

Giải thích

Vấn đề này chỉ xảy ra khi bạn cho phép nội dung động được nén trên IIS cho đường dẫn đến file .asp trên máy chủ của bạn.

Vì nếu bạn tải về file âm thanh (bằng cách Click phải vào biểu tượng cái loa và chọn "Save target as...") và mở file đó bằng Winamp thì nó phát đúng, có thể là có vấn đề trong việc giao tiếp giữa IE 6.0 và plug-in (Windows Media Player). Có thể là độ dài nội dung file đã nén được gửi cho plug-in thay vì độ dài của file chưa nén, điều này làm cho âm thanh không được phát.

Giải pháp

Vấn đề có thể được giải quyết bằng cách không cho phép nén bằng gzip cho âm thanh CAPTCHA. Cách dễ nhất là thiết lập thuộc tính metabase của IIS:

cscript c:\Inetpub\AdminScripts\adsutil.vbs SET 
  W3SVC/Filters/Compression/gzip/HcDoDynamicCompression "FALSE"
	
iisreset

Chú ý rằng việc này sẽ không cho phép nén cho tất cả các loại nội dung được xác định trong thuộc tính HcScriptFileExtensions.

Nếu bạn muốn tiếp tục nén các trang .asp và các nội dung động khác, nhưng không nén cho BotDetect, bạn có thể thay đổi phần mở rộng của file LanapBotDetectHandler.asp sang những đuôi mà không bao gồm trong thuộc tính HcScriptFileExtensions.

Nếu làm như vậy, bạn phải chắc chắn rằng phần mở rộng mới được gán cho chương trình thực thi ASP trong IIS.

Chú ý rằng việc này sẽ không cho phép nén cho tất cả các loại nội dung được xác định trong thuộc tính HcScriptFileExtensions.

Nếu bạn muốn tiếp tục nén các trang .aspx và các nội dung động khác, nhưng không nén cho BotDetect – và nếu bạn đang sử dụng .NET framework 2.0 hoặc mới hơn – bạn có thể thay đổi phần mở rộng thành .ashx. Để thay đổi đường dẫn của BotDetect CAPTCHA HttpHandler thành LanapCaptchaHandler.ashx:

1) Thêm những dòng sau đây vào phần <appSettings> của file web.config:

<appSettings>
  <add key="LBD_RequestPath" value="LanapCaptchaHandler.ashx" />
</appSettings>

2) Cập nhật đăng ký HttpHandler trong phần <system.web> của file web.config:

<httpHandlers>
  <add verb="*" path="LanapCaptchaHandler.ashx" 
    type="Lanap.BotDetect.CaptchaHandler, Lanap.BotDetect"/>
</httpHandlers>

Giả định rằng phần mở rộng .ashx không bao gồm trong thuộc tính metabase HcScriptFileExtensions của IIS để nén với gzip, bạn có thể giữ nén cho các nội dung động, trong khi không nén cho âm thanh CAPTCHA, điều này sẽ giải quyết được vấn đề.

Âm thanh CAPTCHA bị cắt ngắn trên Firefox khi sử dụng nén ở phía máy chủ

ID của vấn đề

#4120851

Sản phẩm bị ảnh hưởng

BotDetect ASP.NET CAPTCHA v2.0.*

Máy chủ bị ảnh hưởng

.NET Framework 1.1, 2.0, 3.0, 3.5

Trình duyệt bị ảnh hưởng

Firefox 2.0.x, 3.0.x

Trạng thái

Không thể giải quyết được do đây là vấn đề của nhà cung cấp thứ ba

Mô tả

Nếu bạn thiết lập cho phép nén nội dung động trên IIS của máy chủ cho đường dẫn của BotDetect CAPTCHA, âm thanh CAPTCHA chỉ được phát cho vài ký tự đầu tiên trên Firefox.

Các bước tái hiện

  • Mở trang có sử dụng BotDetect ASP CAPTCHA trên Firefox 2.0 hoặc 3.0
  • Click vào biểu tượng cái loa - chỉ một vài ký tự đầu tiên được phát (ví dụ: chỉ 3 ký tự đầu của toàn bộ 5 ký tự CAPTCHA)
  • Click phải vào biểu tượng cái loa và chọn "Open link in new tab" - file âm thanh chứa đầy đủ các ký tự CAPTCHA

Giải thích

Vấn đề này chỉ xảy ra khi bạn cho phép nội dung động được nén trên IIS cho đường dẫn đến file .asp trên máy chủ của bạn

Vì nếu bạn tải về file âm thanh (bằng cách Click phải vào biểu tượng cái loa và chọn "Save target as...") và mở file đó bằng Winamp thì nó phát đúng, có thể là có vấn đề trong việc giao tiếp giữa FireFox và plug-in (QuickTime trong trường hợp của chúng tôi). Có thể là độ dài nội dung file đã nén được gửi cho plug-in thay vì độ dài của file chưa nén, điều này làm cho âm thanh không được phát.

Giải pháp

Vấn đề có thể được giải quyết bằng cách không cho phép nén bằng gzip cho âm thanh CAPTCHA. Cách dễ nhất là thiết lập thuộc tính metabase của IIS:

cscript c:\Inetpub\AdminScripts\adsutil.vbs SET 
  W3SVC/Filters/Compression/gzip/HcDoDynamicCompression "FALSE"
	
iisreset

Chú ý rằng việc này sẽ không cho phép nén cho tất cả các loại nội dung được xác định trong thuộc tính HcScriptFileExtensions.

Nếu bạn muốn tiếp tục nén các trang .aspx và các nội dung động khác, nhưng không nén cho BotDetect, – và nếu bạn đang sử dụng .NET framework 2.0 hoặc mới hơn – bạn có thể thay đổi phần mở rộng của file thành .ashx. Để thay đổi đường dẫn của BotDetect CAPTCHA HttpHandler thành LanapCaptchaHandler.ashx:

1) Thêm những dòng sau đây vào phần <appSettings> của file web.config:

<appSettings>
  <add key="LBD_RequestPath" value="LanapCaptchaHandler.ashx" />
</appSettings>

2) Cập nhật đăng ký HttpHandler trong phần <system.web> của file web.config:

<httpHandlers>
  <add verb="*" path="LanapCaptchaHandler.ashx" 
    type="Lanap.BotDetect.CaptchaHandler, Lanap.BotDetect"/>
</httpHandlers>

Giả định rằng phần mở rộng .ashx không bao gồm trong thuộc tính metabase HcScriptFileExtensions của IIS để nén với gzip, bạn có thể giữ nén cho các nội dung động, trong khi không nén cho âm thanh CAPTCHA, điều này sẽ giải quyết được vấn đề.

Không nghe được âm thanh CAPTCHA trên IE khi sử dụng global no-cache headers and SSL

ID của vấn đề

#4120863

Sản phẩm bị ảnh hưởng

BotDetect ASP.NET CAPTCHA v2.0.*

Máy chủ bị ảnh hưởng

.NET Framework 1.1, 2.0, 3.0, 3.5

Trình duyệt bị ảnh hưởng

IE 6.0, IE 7.0

Trạng thái

Không thể giải quyết được do đây là vấn đề của nhà cung cấp thứ ba

Mô tả

Nếu bạn thiết lập máy chủ để gửi no-cache headers với mọi Http response trên site được truy cập bằng SSL, người sử dụng IE sẽ không thể sử dụng âm thanh CAPTCHA.

Các bước tái hiện

  • Thay đổi thiết lập của IIS cho Http Headers, thêm phần sau cho toàn website / thư mục ảo: 'Pragma: no-cache' hay 'Cache-Control: no-cache'.
  • Mở một trang với các thiết lập này và sử dụng BotDetect CAPTCHA thông qua Https
  • Click vào biểu tượng cái loa - không có âm thanh nào được phát ra
  • Click phải vào biểu tượng cái loa và chọn "Save target as..." - khi bạn cố gắng tải về file .wav nó sẽ báo lỗi: 'Internet Explorer cannot download LanapCaptcha.aspx from localhost. Internet Explorer was not able to open this Internet site. The requested site is either unavailable or cannot be found. Please try again later.'

Giải thích

Vấn đề này là do IE xem no-cache headers như việc câm lưu file khi sử dụng SSL. Vì file .wav không thể được lưu trên máy khách, nó không thể được phát. BotDetect CAPTCHA tự động kiểm tra SSL và tránh không gửi no-cache headers trong các trường hợp như vậy, nhưng nếu bạn dùng server-wide hay site-wide Http header bằng cách thay đổi thiết lập IIS, bạn có thể vượt qua nguyên tắc này và vấn đề sẽ được giải quyết.

Giải pháp

Thay đổi thiết lập IIS, loại trừ đường dẫn BotDetect CAPTCHA ra khỏi khai báo Http header.

Không nghe được âm thanh CAPTCHA trên IE khi sử dụng SSL Offloading proxies

ID của vấn đề

#4120861

Sản phẩm bị ảnh hưởng

BotDetect ASP.NET CAPTCHA v2.0.1 - v2.0.12

Máy chủ bị ảnh hưởng

.NET Framework 1.1, 2.0, 3.0, 3.5

Trình duyệt bị ảnh hưởng

IE 6.0, IE 7.0

Trạng thái

Fixed in v2.0.13

Mô tả

Nếu bạn sử dụng SSL offloading, ví dụ yêu cầu HTTPS tới trang của bạn được giải mã bởi một proxy nào đó và gửi đến máy chủ bằng HTTP , người sử dụng IE sẽ không thể sử dụng âm thanh CAPTCHA.

Các bước tái hiện

  • Mở một trong có chứa BotDetect ASP CAPTCHA qua HTTPS trên Internet Explorer 6.0 hoặc 7.0
  • Click vào biểu tượng cái loa - không có âm thanh nào được phát ra
  • Click phải vào biểu tượng cái loa và chọn "Open link in new tab" - lỗi sẽ xuất hiện, thông báo rằng IE không thể tải file về

Giải thích

Nguyên nhân của vấn đề là do việc tải về trên IE không làm việc nếu máy chủ gửi file thông qua SSL với tiêu đề no-cache. IE hiểu tiêu đề là cấm lưu file, nghĩa là file âm thanh không thể tải về máy khách. Vì file âm thanh phải được tải về trước khi phát, điều này có nghĩa là âm thanh CAPTCHA không bao giờ được phát.

Chúng tôi kiểm tra lại vấn đề này trên nhiều trình duyệt khác (Firefox, Opera, Safari), tiêu đề này được hiểu khác nhau, có nghĩa rằng file âm thanh có thể được tải về và phát. IE cũng chạy đúng khi không dùng SSL. Nói cách khác, vấn đề xảy ra là do cả ba yếu tố no-cache + SSL + IE.

Khi không dùng SSL, phải có tiêu đề no-cache, nếu không sẽ có trường hợp khi thay đổi hình ảnh CAPTCHA âm thanh sẽ không thay đổi tương ứng, vì trình duyệt sử dụng lại file âm thanh cũ.

Vì vậy giải pháp của chúng tôi trong phiên bản mới nhất của BotDetect là gửi tiêu đề no-cache chỉ khi không sử dụng SSL. Nói cách khác, mã nguồn tương tự như sau:

if (!context.Request.IsSecureConnection)
{
   context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
}

Vì rõ ràng rằng đoạn mã này sẽ được thực thi trên máy chủ, vấn đề chỉ được giải quyết nếu yêu cầu được gửi qua SSL. Nhưng nếu SSL offloading có nghĩa rằng yêu cầu SSL được tạo bởi một thiết bị mạng đặc biệt nào đó, sau đó được giải mã và gửi bằng HTTP tới máy chủ web, máy chủ web sẽ không biết yêu cầu hiện tại được gửi qua SSL.

Nói cách khác, Request.ServerVariables("HTTPS") sẽ được thiết lập "off" tại thời điểm thực thi cho dù yêu cầu trước đó được tạo qua SSL. Đến lượt điều này dẫn đến tiêu đề no-cache được gửi đến máy khách IE, quay lại vấn đề đầu tiên.

Giải pháp

Nếu bạn gặp vấn đề này, xin hãy nâng cấp lên phiên bản BotDetect ASP CAPTCHA v2.0.9 hoặc mới hơn - nó đã bao gồm giải pháp cho vấn đề này, sử dụng kiểm tra SSL phí máy khách để xử lý trường hợp việc kiểm tra SSL phía máy chủ không giải quyết được. Thông báo sau chỉ áp dụng cho các phiên bản cũ hơn của Captcha component.

Sản phẩm của chúng cần phải tương thích với nhiều nhất các trình duyệt có thể được và chạy đúng với tất cả các trường hợp, vì vậy giải pháp tổng quát là quan trọng - mặc dù sử dụng SSL offloading, máy chủ web vẫn cần biết yêu cầu đầu tiên được gửi qua SSL, và gửi tiêu đề thích hợp. Điều này có thể thực hiện bằng cách gửi một tham số đặc biệt trong yêu cầu âm thanh CAPTCHA, được thiết lập trong hàm JavaScript để phát âm thanh, phụ thuộc vào máy khách hiểu trang web như thế nào (HTTPS hoặc đơn thuần HTTP). Chúng tôi sẽ tìm hiểu giải pháp này trong các phiên bản tiếp theo của BotDetect.

Bạn có thể xem thiết lập SSL offloading, có thể có giải pháp nào đó cho trường hợp máy chủ cần biết nó được truy cập thông qua SSL cho dù là offloaded. Nếu thuộc tính có sẵn HttpContext.Current.Request.IsSecureConnection trong ASP.NET có thể chạy đúng, nó có thể giải quyết được vấn đề.

Hơn nữa nếu bạn chỉ dùng CAPTCHA trên trang được truy cập qua SSL, bạn không phải xử lý cho trường hợp truy cập qua HTTP – có nghĩa là bạ có thể xoá đoạn mã kiểm tra SSL từ mã nguồn và chỉ giả định SSL luôn được sử dụng. Bạn có thể thực hiện thay đổi này trong mã nguồn nếu bạn Mua nó.

.NET 1.1 Âm thanh CAPTCHA đọc sai ký tự trên các trình duyệt mới (Google Chrome, IE 7.0 on Vista)

ID của vấn đề

#4120862

Sản phẩm bị ảnh hưởng

BotDetect ASP.NET CAPTCHA v2.0.*

Máy chủ bị ảnh hưởng

.NET Framework 1.1

Trình duyệt bị ảnh hưởng

IE 7.0 + Vista + Windows Media Player 11, Google Chrome

Trạng thái

Không thể giải quyết được do đây là vấn đề của nhà cung cấp thứ ba

Mô tả

Nếu bạn dùng ASP.NET 1.1, những người dùng các trình duyệt nêu trên sẽ gặp vấn đề với âm thanh CAPTCHA.

Các bước tái hiện

  • Mở trang có sử dụng BotDetect ASP.NET 1.1 CAPTCHA trên các trình duyệt bị ảnh hưởng
  • Click vào biểu tượng cái loa - âm thanh đọc sai ký tự
  • Nếu thử xác thực bằng các ký tự được đọc - việc xác thực sẽ thất bại
  • Nếu thử xác thực bằng các ký tự được hiển thị - việc xác thực sẽ thành công
  • Click phải vào biểu tượng cái loa và chọn "Open link in new tab", sau đó click vào file captcha.wav - các ký tự được đọc là đúng

Giải thích

Vấn đề này được giải thích chi tiết trong hỏi đáp về IE 7.0 VistaGoogle Chrome. Vì ASP.NET 1.1 không hỗ trợ cookieless Session State hay không cho phép thay đổi SessionIDManager, giải pháp được mô tả trong FAQ không thể sử dụng.

Giải pháp

Nâng cấp lên ASP.NET 2.0, và áp dụng giải pháp được mô tả trong mục hỏi đáp.

Cookieless ASP.NET Session State gây ra vấn đề với việc index của các bộ máy tìm kiếm

ID của vấn đề

#4120741

Sản phẩm bị ảnh hưởng

BotDetect ASP.NET CAPTCHA v2.0.*

Máy chủ bị ảnh hưởng

.NET Framework 2.0, 3.0, 3.5

Trình duyệt bị ảnh hưởng

Googlebot, Yahoo! Slurp, msnbot, other crawlers

Trạng thái

Không thể giải quyết được do đây là vấn đề của nhà cung cấp thứ ba

Mô tả

Nếu bạn cho phép cookieless ASP.NET Session state trong ứng dụng của bạn (phần <sessionState> của thuộc tính cookieless được gán bằng "true" hay "AutoDetect" trong file web.config), trang ASP.NET và đường dẫn BotDetect CAPTCHA có thể bị index nhiều lần trong các bộ máy tìm kiếm khác nhau với URL khác nhau.

Các bước tái hiện

  • Kiểm tra rằng Google, Yahoo hay Live index của trang web chứa ít nhất một trang ASP.NET (sử dụng toán tử site:) - for example, test/default.aspx
  • Thiết lập thuộc tính cookieless bằng "true" hay "AutoDetect" trong file web.config
  • Kiểm tra lại Google, Yahoo hay Live index của trang web thường xuyên - vì crawlers sẽ ghé trang ASP.NET của bạn, chúng sẽ thêm vào nhiều bản copy khác nhau của cùng một trang với nhiều URLs khác nhau - ví dụ, test/(S(xihahl55btbse4qpvz45qj55))/default.aspx, test/(S(upoy35555j25grr4dacr1bz1))/default.aspx, test/(S(3aebky5512wexi45oylubwud))/default.aspx...

Giải thích

ASP.NET cookieless Session State có ý nghĩa để đảm bảo trang ASP.NET làm việc chính xác cho cả những người dùng cấm cookies trong trình duyệt của họ. Thay vì dùng Session state lưu SessionID trong cookie, nó ghi đè URL của trang chứa SessionID. Điều này có ích cho người dùng nhưng ảnh hưởng đến việc index trang ASP.NET của bạn trong các bộ máy tìm kiếm.

Vì các crawlers (Googlebot, Yahoo! Slurp, msnbot, ...) đều ghé trang của bạn mà không có cookie, ASP.NET runtime sẽ ghi đè URL của trang chứa SessionID. Và vì SessionID rất động và thay đổi mỗi lần crawler ghé, trang của bạn luôn có URL khác nhau, làm cho chúng hiểu nhầm các URL này là các trang mới và index chúng riêng biệt. Qua thời gian, website của bạn sẽ có một số lượng lớn các URL cho cùng một trang. Điều này làm cho bộ máy tìm kiếm xem như trùng lặp nội dung và di chuyển trang của bạn vào kết quả phụ khiến cho người dùng không thấy trang của bạn khi tìm kiếm.

Giải pháp

Đầu tiên, BotDetect CAPTCHA request paths should always be blocked in the robots.txt file, since they shouldn't be indexed by search engines at all:

User-Agent: Googlebot
Disallow: /*/LanapCaptcha.aspx
Disallow: /*/WebResource.axd

User-Agent: Yahoo! Slurp
Disallow: /*/LanapCaptcha.aspx
Disallow: /*/WebResource.axd

User-Agent: msnbot
Disallow: /*/LanapCaptcha.aspx
Disallow: /*/WebResource.axd

User-Agent: *
# other restrictions go below

Thêm nữa, bạn có thể ngăn ASP.NET tránh không sử dụng cookieless Session Urls cho Googlebot, Yahoo! Slurp, msnbot và các bộ máy tìm kiếm khác. Điều này là quan trọng nếu bạn muốn trang ASP.NET của mình được đánh chỉ mục chính xác bởi các bộ máy tìm kiếm.

Theo như bài viết này, chỉ cần tạo thư mục App_Browsers trong thư mục gốc của dự án và làm theo hướng dẫn để tạo file genericmozilla5.browser tại đó. Điều này sẽ làm cho bots lấy cùng một Url, cho dù chúng không được hỗ trợ cookie.

Nếu điều này không làm cho các bộ máy tìm kiếm đánh chỉ mục trang của bạn với dúng URLs, và việc đánh chỉ mục và xếp hạng là quan trọng với bạn, bạn nên xem xét việc không cho phép cookieless ASP.NET Session State. Để làm điều này, thiết lập thuộc tính cookieless trong phần <sessionState> bằng giá trị "false" trong file web.config trong ứng dụng của bạn.

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 ASP.NET CAPTCHA Known Issues 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