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

Trang này liệt kê các vấn đề đã biết của BotDetect ASP 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ủ

Issue ID

#4220852

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

BotDetect ASP CAPTCHA v2.0.*

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.

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

Issue ID

#4220851

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

BotDetect ASP CAPTCHA v2.0.*

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 .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.

Âm thanh CAPTCHA đọc sai ký tự trên Google Chrome

Issue ID

#4220862

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

BotDetect ASP CAPTCHA v2.0.1 - v2.0.8

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

Google Chrome 0.2.149.27, 0.2.149.29

Trạng thái

Đã được sửa trong phiên bản v2.0.9

Mô tả

Trong phiên bản beta của Google Chrome, Âm thanh CAPTCHA luôn đọc sai ký tự so với ký tự hiển thị trên hình ảnh CAPTCHA.

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

  • Mở trang có sử dụng BotDetect ASP CAPTCHA trên Google Chrome
  • 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

Nguyên nhân của vấn đề này có thể thấy khi ta đọc file log của IIS dưới đây (đã thay đổi chút ít cho dễ đọc):

05:19:21 GET /LanapBotDetectHandler.asp 
  Command=CreateImage 
  Chrome 0.2.149.29
  -

05:19:26 GET /LanapBotDetectHandler.asp 
  Command=CreateImage&d=1221085161052 
  Chrome 0.2.149.29
  +ASPSESSIONIDQAQCSDRR=IBCNCFFAPJBKGFDNLIBFIBLO 

05:19:28 GET /LanapBotDetectHandler.asp 
  Command=CreateSound&d=1221085163229 
  Windows-Media-Player/10.00.00.4051 
  ASPSESSIONIDQAQCSCQQ=KNGDHDFAGDIFBPCPMBDAPIGC;
  +ASPSESSIONIDSCRBSCQR=GELBCEFAJEMMHGEGHOICCBEN 

05:19:28 GET /LanapBotDetectHandler.asp 
  Command=CreateSound&d=1221085163229 
  IE 6.0 
  ASPSESSIONIDQAQCSCQQ=KNGDHDFAGDIFBPCPMBDAPIGC;
  +ASPSESSIONIDSCRBSCQR=GELBCEFAJEMMHGEGHOICCBEN;
  +ASPSESSIONIDQAQCSDRR=JBCNCFFAIMEHBAPPIPAEAEFH 

Đó là file log được sinh ra sau những thao tác dưới đây:

  1. Mở trang có chứa CAPTCHA trên Google Chrome
  2. Click vào nút Reload để tạo hình mới (bằng cách này ta có thể thấy ASP Session cookie được sử dụng cho Chrome session)
  3. Click vào biểu tượng cái loa để phát âm thanh CAPTCHA

Như logfile chỉ ra, Chrome gửi yêu cầu đọc âm thanh CAPTCHA cho Windows Media Player, vì lý do nào đó yêu cầu âm thanh được gửi đi với ASP Session cookie sai (một vài trường hợp thậm chí không có cookie). Điều này lặp lại trong cả 10 lần thử mà chúng tôi đã tiến hành, và nếu bạn nhìn vào log của IIS, bạn cũng có thể thấy hiện tượng tương tự.

Vì rằng trạng thái của ASP Session phụ thuộc vào giá trị của cookie, và không cách nào thay đổi được nó, và vì chúng ta không biết tại sao Windows Media Player lại gửi yêu cầu với giá trị cookie không hợp lệ, không có nhiều giải pháp cho chúng ta trong trường hợp này.

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ó đã được thêm vào giải pháp để giải quyết vấn đề này, lưu một bản copy của ký tự CAPTCHA vào Application state khi trình duyệt là Chrome, cho phép âm thanh CAPTCHA có thể được sinh ra khi không thể truy cập được vào trạng thái Session như đã giải thích ở trên. Những phần ghi dưới đây chỉ áp dụng cho các phiên bản cũ hơn của Captcha component.

Chú ý rằng phiên bản ASP.NET của BotDetect không bị vấn đề này (bạn có thể thử trên bản Demo trực tuyến của chúng tôi), vì rằng nó đã bao gồm giải pháp cho một vấn đề tương tự với Windows Media Player (chi tiết bạn có thể xem tại Hỏi đáp). Không may là chúng tôi không thể dùng giải pháp tương tự cho phiên bản ASP - vì phiên bản ASP.NET sửa lỗi này bằng cách thay đổi trạng thái Session không phụ thuộc vào cookies, và trạng thái của ASP Session không cho phép làm điều tương tự.

Một cách bạn có thể thử là thay đổi đường dẫn đến âm thanh CAPTCHA trong trang của bạn từ:

<a href="LanapBotDetectHandler.asp?Command=CreateSound"
  onclick='LBD_LoadSound("SampleForm_SoundPlaceholder",
    "LanapBotDetectHandler.asp?Command=CreateSound");return false;'
  title="Speak the code">
    <img src="speaker.gif" alt="Speak the code"/>
</a>

thành

<a href="LanapBotDetectHandler.asp?Command=CreateSound" 
  title="Speak the code">
    <img src="speaker.gif" alt="Speak the code" />
</a>

Điều này sẽ không cho phép JavaScript tự động phát âm thanh và hiện ra hộp thoại để tải file âm thanh; vì trong trường hợp đó file âm thanh đầu tiên sẽ được tải về (sử dụng cookie đúng) và sau đó mở bằng Windows Media Player, ký tự CAPTCHA sẽ được đọc đúng như đã hiển thị. Điều này làm cho việc sử dụng sẽ không thuận lợi, nhưng nếu khách hàng của bạn đa số dùng Chrome thì cũng đáng để trả giá như vậy. Hoặc nếu bạn muốn hỗ trợ đầy đủ tính năng cho tất cả các trình duyệt mới nhất, bạn cũng có thể cân nhắc chuyển từ ASP sang ASP.NET.

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

Issue ID

#4220861

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

BotDetect ASP CAPTCHA v2.0.1 - v2.0.8

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

IE 6.0, IE 7.0

Trạng thái

Đã được sửa trong phiên bản v2.0.9

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 (Request.ServerVariables("HTTPS")="off") Then
  Response.CacheControl = "no-cache"
  Response.AddHeader "Pragma", "no-cache"
  Response.Expires = -1
End If

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 Request.ServerVariables("HTTPS") trong ASP 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. bạn có thể thay đổi trong file LanapBotDetectHandler.asp.

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 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