BotDetect ASP Classic CAPTCHA Web API Reference (BotDetect v3.0; deprecated)
To make Captcha integration into ASP Classic applications easy, the BotDetect ASP Captcha component wraps the basic Captcha functionality implemented in the Captcha COM component with a simple ASP Classic Captcha library. This library is focused on ease of use from Classic ASP applications, and includes a number of .asp files with VbScript class and helper declarations.
BotDetect\CaptchaClass.asp
The BotDetect\CaptchaClass.asp
file includes the VbScript Captcha
and CaptchaCode
class declarations, and some helper functions. These classes and functions are at the core of the BotDetect ASP Captcha Library.
Instances of the Captcha
type can be created on your ASP forms and will take care of Captcha display and validation.
BotDetect\CaptchaClass.asp Captcha Class Reference | ||
---|---|---|
Default Function Init
|
Instead of using the constructor, Captcha objects should always be created using the default Init function, which takes the Captcha identifier (a string) as parameter and automatically initializes the instance identifier. |
|
Default Function Init
|
The same function can also be used to create a This is used to reference data for a previous object instance, for example when generating Captcha images and sounds in the This "overload" of the |
|
Property Get CaptchaID | Unique identifier of the Captcha object within the application (for example, if you placed one Captcha object on the Registration page and another on the Contact Us page, they would have distinct CaptchaId values). | |
Property Get InstanceID | Globally unique identifier of the current Captcha object instance, used to ensure each page load keeps separate Captcha codes, for example when opening the same form in multiple browser tabs. | |
Property Get/Let Locale | Locale string, affects the character set used for Captcha code generation and the pronunciation language used for Captcha sound generation | |
Function IsLocaleValid
|
Validates the given Locale string, checking it's not empty or too short to be a valid locale specification. Since the locale strings supported by BotDetect will change depending on the underlying COM component version and sound package files available, this function doesn't perform any comprehensive locale checks. |
|
Property Get/Let CodeLength | Length (number of characters) of the Captcha code rendered; the default value is 5. | |
Function IsCodeLengthValid
|
Validates the given code length, checking that it's a number between 1 and 15. |
|
Property Get/Let CodeStyle | Numeric representation of the Captcha code style, i.e. the algorithm used to generate Captcha codes from default pre-defined locale character sets; the default value is 0. This value is persisted if needed and directly propagated to the COM Captcha component interface. |
|
Property Get/Let CodeStyleName | String representation of the Captcha This value is converted to its numerical representation before it's actually used, so the string property is just a helper to make your ASP code more readable. |
|
Function IsCodeStyleValid
|
Validates the given numeric code style value, checking that it's a number between 0 and 2. |
|
Property Get/Let CodeTimeout | Period (in seconds) during which each generated Captcha code can be validated after generation; the default value is 1200 seconds (20 minutes). | |
Function IsCodeTimeoutValid
|
Validates the given code timeout, checking that it's a number between 30 and 1200. Code timeouts longer than 20 minutes are considered invalid since the default Classic ASP Session timeout is 20 minutes, and setting a longer code timeout wouldn't work without increasing the Session timeout first. If you increase your server's ASP Session state timeout, you can also change the validation function upper bound. |
|
Property Get/Let ImageStyle | Numeric representation of the Captcha image style, i.e. the algorithm used to render Captcha codes in images; the default image style is 31. This value is persisted if needed and directly propagated to the COM Captcha component interface. |
|
Property Get/Let ImageStyleName | String representation of the Captcha image style, i.e. the algorithm used to render Captcha codes in images. This value is converted to its numerical representation before it's actually used, so the string property is just a helper to make your ASP code more readable. |
|
Function IsImageStyleValid
|
Validates the given numeric image style value, checking that it's a number between 0 and 49. |
|
Property Get/Let ImageWidth | Width of the generate Captcha image, in pixels; the default Captcha image width is 250 px. | |
Function IsImageWidthValid
|
Validates the given image width value, checking that it's a number between 20 and 1000. Captcha images smaller than 20 x 20 pixels are simply not supported, and the larger the image, the longer it takes to generate it and transfer it to the client. |
|
Property Get/Let ImageHeight | Height of the generate Captcha image, in pixels; the default Captcha image height is 50 px. | |
Function IsImageHeightValid
|
Validates the given image height value, checking that it's a number between 20 and 1000. Captcha images smaller than 20 x 20 pixels are simply not supported, and the larger the image, the longer it takes to generate it and transfer it to the client. |
|
Property Get/Let ImageFormat | Numeric representation of the image format in which the Captcha image will be generated; the default format is 0. This value is persisted if needed and directly propagated to the COM Captcha component interface. |
|
Property Get/Let ImageFormatName | String representation of the This value is converted to its numerical representation before it's actually used, so the string property is just a helper to make your ASP code more readable. |
|
Function IsImageFormatValid
|
Validates the given numeric code style value, checking that it's a number between 0 and 3. |
|
Property Get/Let CustomDarkColor | Optional custom dark color point, modifies the color palette used for Captcha image drawing. Should be a Html color, i.e. specified either by name ("Red" ) or hex value ("#f00" or "#ff0000" ) |
|
Function IsCustomDarkColorValid
|
Validates the given string custom dark color value, checking that it's not an empty string. The Classic ASP Captcha library doesn't check that the given value is a valid Html color value, but the underlying COM implementation will throw an error if an invalid value is specified. |
|
Property Get/Let CustomLightColor | Optional custom light color point, modifies the color palette used for Captcha image drawing. Should be a Html color, i.e. specified either by name ("Red" ) or hex value ("#f00" or "#ff0000" ) |
|
Function IsCustomLightColorValid
|
Validates the given string custom light color value, checking that it's not an empty string. The Classic ASP Captcha library doesn't check that the given value is a valid Html color value, but the underlying COM implementation will throw an error if an invalid value is specified. |
|
Property Get/Let SoundStyle | Numeric representation of the Captcha sound style, i.e. the algorithm used to pronounce Captcha codes in sounds; the default sound style is 0. This value is persisted if needed and directly propagated to the COM Captcha component interface. |
|
Property Get/Let SoundStyleName | String representation of the Captcha This value is converted to its numerical representation before it's actually used, so the string property is just a helper to make your ASP code more readable. |
|
Function IsSoundStyleValid
|
Validates the given numeric sound style value, checking that it's a number between 0 and 9. |
|
Property Get/Let SoundFormat | Numeric representation of the audio format in which the Captcha sound file will be generated; the default format is 0 This value is persisted if needed and directly propagated to the COM Captcha component interface. |
|
Property Get/Let SoundFormatName | String representation of the This value is converted to its numerical representation before it's actually used, so the string property is just a helper to make your ASP code more readable. |
|
Function IsSoundFormatValid
|
Validates the given numeric sound format value, checking that it's a number between 0 and 1. |
|
Property Get/Let SoundRegenerationMode | Numeric representation of the sound regeneration mode determining how will multiple consecutive requests for audio Captcha with the same Captcha code be handled by BotDetect; the default mode is 1. This value is persisted if needed and directly propagated to the COM Captcha component interface. |
|
Property Get/Let SoundRegenerationModeName | String representation of the This value is converted to its numerical representation before it's actually used, so the string property is just a helper to make your ASP code more readable. |
|
Function IsSoundRegenerationModeValid
|
Validates the given numeric sound regeneration mode value, checking that it's a number between 0 and 2. |
|
Property Get/Let UserInputID | User input textbox client-side identifier, used for Captcha validation and all client-side user input processing, e.g. automatic user input lowercasing and focusing. | |
Property Get/Let TabIndex | Starting tabindex for the Captcha control Html output. The keyboard-selectable Captcha markup elements are: the Captcha reload icon, the Captcha sound icon, and (only in the Free version of BotDetect) the BotDetect website link. Depending on your settings (is Captcha reloading enabled, are Captcha sounds enabled) and the version of BotDetect you are using (free or paid), the next available tabindex on the page can be from 0 to 3 greater than this value. |
|
Property Get/Let SoundEnabled | Are Captcha sounds enabled. |
|
Property Get/Let SoundTooltip | Tooltip of the Captcha sound icon. |
|
Property Get/Let SoundIconUrl | Url of the icon used for Captcha sound playback. |
|
Property Get/Let ReloadEnabled | Is Captcha reloading enabled. |
|
Property Get/Let ReloadTooltip | Tooltip of the Captcha reload icon. |
|
Property Get/Let ReloadIconUrl | Url of the icon used for Captcha reloading. |
|
Sub Save | This subroutine saves the Captcha object instance state into ASP Session state, if needed (if the instance data is different from the application defaults defined in the BotDetect\CaptchaConfig.asp file). |
|
Sub SaveCaptchaCode
|
Saves the given Captcha code value in ASP Session state. | |
Sub DeleteCaptchaCode
|
Deletes the Captcha code associated with the given instance identifier. | |
Function LoadCaptchaCode
|
Loads the saved Captcha code associated with the given instance identifier. | |
Function Validate | Validate the Captcha code user input, relying on automatic instance identifier propagation through a hidden field, and the user input identifier set through the Used by default, if you're simply using the out-of-the-box |
|
Function ValidateInstance
|
Validate the Captcha code user input for the explicitly stated instance identifier and user input value. Used for Classic ASP Captcha customizations you might make. | |
Function AjaxValidate
|
Validate the Captcha code user input for the explicitly stated instance identifier and user input value. Used for BotDetect built-in Ajax Captcha validation. | |
Property Get IsSolved | Has the current |
|
Sub Reset | Resets the IsSolved status of the current Captcha object instance. |
|
Function GenerateImage | Generate the Captcha image, using the settings configured in the current Captcha object instance. |
|
Function GenerateSound | Generate the Captcha sound, using the settings configured in the current Captcha object instance. |
|
Property Get ImageMimeType | Image format MIME type for the currently configured image format. |
|
Property Get SoundMimeType | Sound format MIME type for the currently configured sound format. |
|
Property Get SoundFilename | Sound file name for the current sound format and instance identifier. |
|
Property Get IsFree | License helper, telling whether the Captcha COM component instance is created by the free BotDetect version. Used to check whether to display the code sample Free version information or not. |
|
Property Get IsSoundAvailable | Is the BotDetect pronunciation sound package for the currently used locale available in the specified sound packages folder. |
|
Function Html | Generates the Html markup needed to add the current Captcha object instance to an ASP form. |
|
Function Info | Generates debugging info about the current Captcha object instance. |
Instances of the CaptchaCode
type are used internally by the BotDetect Classic ASP Captcha Library.
BotDetect\CaptchaClass.asp CaptchaCode Class Reference | ||
---|---|---|
Default Function Init
|
Instead of using the constructor, CaptchaCode objects should always be created using the default Init function, which takes the Captcha code string and initializes the object fields. |
|
Property Get Code | Returns the contained Captcha code string. |
|
Property Get ElapsedSeconds | Calculates how many seconds have elapsed since the |
|
Property Get/Let GenerationTime | The |
The CaptchaClass.asp
file also includes some helper functions related to the Captcha randomization functionality.
BotDetect\CaptchaClass.asp Randomization Functions Reference | ||
---|---|---|
Function LBD_RandomCodeStyle | Returns a Captcha |
|
Function LBD_RandomCodeStyleFrom
|
Returns a Captcha |
|
Function LBD_RandomImageStyle | Returns a Captcha |
|
Function LBD_RandomImageStyleFrom
|
Returns a Captcha |
|
Function LBD_RandomSoundStyle | Returns a Captcha |
|
Function LBD_RandomSoundStyleFrom
|
Returns a Captcha |
BotDetect\CaptchaConfig.asp
The BotDetect\CaptchaConfig.asp
file contains the application default values used by the ASP Captcha library. You can modify various Captcha parameters simply by editing the values from this file in your Classic ASP websites.
You can see how some non-default values were set in this file in the Captcha customization classic ASP code sample.
LBD_Configuration_CodeLength = 5 | Captcha code length, in characters. |
|
LBD_Configuration_CodeStyle = LBD_CodeStyles("Alphanumeric") | Captcha code style (alphanumeric, alpha, or numeric). |
|
LBD_Configuration_ CodeTimeout = 1200 | Captcha code timeout in seconds - the Captcha can only be successfully solved within the specified time after generation. This is an optional security improvement that narrows the window of opportunity for attacks based on re-using the Captcha image on another site controlled by the attacker, or similar human-solver-based attacks on Captcha-protected forms. |
|
LBD_Configuration_Locale = "en-US" | Captcha locale string, affecting the charset used for Captcha code generation, and the pronunciation language used for sound Captchas. |
|
LBD_Configuration_ CustomCharset = "" | Defines a custom character set for Captcha code generation, specifying the alphanumeric characters which will be used for all Captcha codes regardless of the code style value set. |
|
LBD_Configuration_ BannedSequences = "" | Defines rules about character sequences you want to avoid using in randomly generated CAPTCHA codes. Must be a CSV string. |
|
LBD_Configuration_ImageStyle = 31 | Captcha image style - can be a fixed or a randomized value selected from the 50 BotDetect image drawing algorithms. |
|
LBD_Configuration_ImageWidth = 250 | Captcha image width, in pixels. |
|
LBD_Configuration_ImageHeight = 50 | Captcha image height, in pixels. |
|
LBD_Configuration_ ImageFormat = LBD_ImageFormats("JPEG") | Captcha image output format (JPG, GIF, PNG or BMP). |
|
LBD_Configuration_ CustomDarkColor = "" | Used to override the default Captcha image color scheme. Html named or hex color value of the dark color used in Captcha images. |
|
LBD_Configuration_ CustomLightColor = "" | Used to override the default Captcha image color scheme. Html named or hex color value of the light color used in Captcha images. |
|
LBD_Configuration_ ImageTooltip = "CAPTCHA" | Custom Captcha image alt text / title. |
|
LBD_Configuration_ HelpLinkEnabled = True | Is the Captcha help link enabled or not. |
|
LBD_Configuration_HelpLinkMode = LBD_HelpLinkModes("Text") | Controls how the Captcha help link is displayed; supported modes are |
|
LBD_Configuration_HelpLinkUrl = "https://captcha.com/asp-captcha-info.html" | Url to which the Captcha help link points to. |
|
LBD_Configuration_HelpLinkText = "" | Text used in the Captcha help link; leave empty for default image width-dependent text. |
|
LBD_Configuration_ SoundEnabled = True | Is Captcha sound enabled. |
|
LBD_Configuration_SoundStyle = 0 | Captcha sound style - can be a fixed or a randomized value selected from the 10 BotDetect sound generation algorithms. |
|
LBD_Configuration_ SoundFormat = LBD_SoundFormats( "WavPcm16bit8kHzMono") | Captcha sound output format (WavPcm16bit8KhzMono or WavPcm8bit8KhzMono). |
|
LBD_Configuration_ SoundTooltip = "Speak the CAPTCHA code" | Custom sound Captcha icon alt text / title. |
|
LBD_Configuration_ SoundIconUrl = "BotDetect/SoundIcon.gif" | Custom sound Captcha icon. You can use standard BotDetect icons ("BotDetect\SoundIcon.gif" and "BotDetect\SmallSoundIcon.gif") or an icon of your own. |
|
LBD_Configuration_ SoundPackageFolder = "C:\Program Files\Lanapsoft\BotDetect 3 CAPTCHA Component\Asp\ Redistribute\ BotDetectSounds" | Custom sound packages folder. You can reuse a single location for all ASP applications using BotDetect Captcha on the same server, as long as the IIS worker process running them had Read permissions to the location. |
|
LBD_Configuration_ WarnAboutMissingSound Packages = True | If the required SoundPackage in not deployed, the sound icon is not clickable and displays a warning tooltip by default. If you want to disable this warning and simply not display the sound Captcha icon at all for locales whose pronunciations are not deployed with the application, set this property to "False". |
|
LBD_Configuration_SoundStartDelay = 0 | Captcha sound JavaScript playback starting delay, in milliseconds. |
|
LBD_Configuration_ SoundRegenerationMode = LBD_SoundRegenerationModes("Limited") | How will multiple consecutive requests for audio Captcha with the same Captcha code ("sound regeneration") be handled by BotDetect - a trade-off of security, usability, and storage requirements. |
|
LBD_Configuration_ ReloadEnabled = True | Is Captcha reloading enabled. |
|
LBD_Configuration_ ReloadTooltip = "Change the CAPTCHA code" | Custom reload Captcha icon alt text / title. |
|
LBD_Configuration_ ReloadIconUrl = "BotDetect/ReloadIcon.gif" | Custom reload Captcha icon. You can use standard BotDetect icons ("BotDetect\ReloadIcon.gif" and "BotDetect\SmallReloadIcon.gif") or an icon of your own. |
|
LBD_Configuration_ AutoReloadExpiredCaptchas = True | Captcha images are automatically reloaded when the Captcha code expires (as set in the LBD_Configuration_CodeTimeout element, or the ASP Session timeout), but only within a certain interval from their first generation. This allows you to have a short Captcha code timeout (e.g. 2 minutes) to narrow the window of opportunity for Captcha reusing on other sites or human-solver-powered bots, and actual visitors can still fill out your form at their own pace and without rushing (since the Captcha image will be reloaded automatically when it is no longer valid). |
|
LBD_Configuration_ AutoReloadTimeout = 7200 | Since we don't want infinite sessions when the user leaves the form open in a background browser tab over the weekend (for example), we set a reasonable upper limit on the auto-reload period (e.g. 2 hours = 7200 seconds). |
|
LBD_Configuration_ AutoFocusInput = True | The input textbox will be assigned focus on all Captcha Sound and Captcha Reload icon clicks, allowing the users to more easily type in the code as they hear it or as the new image loads. This does not apply to auto-reloading of expired Captchas, since the user might be filling out another field on the form when the auto-reload starts and shouldn't be distracted. |
|
LBD_Configuration_ AutoClearInput = True | The input textbox will be cleared on all Reload icon clicks and auto-reloads, since any previous input in the textbox will be invalidated by Captcha reloading. This is a small usability improvement that helps users avoid having to delete the previous input themselves. |
|
LBD_Configuration_ AutoUppercaseInput = True | Anything the users type in the input textbox will be uppercased on the fly, since Captcha validation is not and should not be case-sensitive. This is a small usability improvement that helps communicate that fact to the users clearly. |
|
LBD_Configuration_ RemoteScriptEnabled = True | By default, BotDetect also adds a remote JavaScript include loaded from the captcha.com server, which is currently used only for stats, but is planned to develop into additional Captcha functionality. This include can be disabled using this configuration property. |
|
Dim LBD_Persistence : Set LBD_Persistence = Session | By default, BotDetect stores generated Captcha codes and per-instance set values in ASP Session state. If you want to change the persistence medium and use your own dictionary-type object, this is the setting to use. |
|
LBD_Configuration_ UseApplicationFallback = True | Controls whether data required for sound Captcha playback will also be saved in ASP Application state, as a fallback for ASP Session state problems. Several browser/sound player combinations cause sound problems since they misplace ASP Session cookies when transferring the sound Url to the sound player (IE 7.0 + WMP 11, Safari 4 + QuickTime, etc.). Keeping this option set to |
BotDetect\Utils.asp
The BotDetect\Utils.asp
file from the BotDetect Classic ASP Captcha library contains some helper functions and values, which you can also use in your ASP applications if you need them. Some helpers are BotDetect- and Captcha-specific, while others are general-purpose ASP utilities.
LBD_CodeStyleNames | A VbScript Array, containing all BotDetect code style names. String values are mapped by their numeric equivalents as indexes, so you can get a code style name by passing the numeric value as array index. E.g. LBD_CodeStyleNames(0) = "Alphanumeric". |
|
LBD_CodeStyles | A VbScript Dictionary, containing all BotDetect code style numeric values. Numeric values are mapped by their (case-insensitive) string equivalents as keys, so you can get a code style numeric value by passing the string name as dictionary key. E.g. LBD_CodeStyles("Alphanumeric") = 0. |
|
LBD_ImageStyleNames | A VbScript Array, containing all BotDetect image style names. String values are mapped by their numeric equivalents as indexes, so you can get an image style name by passing the numeric value as array index. E.g. LBD_ImageStyleNames(31) = "Chess". |
|
LBD_ImageStyles | A VbScript Dictionary, containing all BotDetect image style numeric values. Numeric values are mapped by their (case-insensitive) string equivalents as keys, so you can get an image style numeric value by passing the string name as dictionary key. E.g. LBD_ImageStyles("Chalkboard") = 31. |
|
LBD_ImageFormatNames | A VbScript Array, containing all BotDetect image format names. String values are mapped by their numeric equivalents as indexes, so you can get an image format name by passing the numeric value as array index. E.g. LBD_ImageFormatNames(0) = "JPEG". |
|
LBD_ImageFormats | A VbScript Dictionary, containing all BotDetect image format numeric values. Numeric values are mapped by their (case-insensitive) string equivalents as keys, so you can get an image format numeric value by passing the string name as dictionary key. E.g. LBD_ImageFormats("Jpeg") = 0. |
|
LBD_SoundStyleNames | A VbScript Array, containing all BotDetect sound style names. String values are mapped by their numeric equivalents as indexes, so you can get a sound style name by passing the numeric value as array index. E.g. LBD_SoundStyleNames(0) = "Dispatch". |
|
LBD_SoundStyles | A VbScript Dictionary, containing all BotDetect sound style numeric values. Numeric values are mapped by their (case-insensitive) string equivalents as keys, so you can get a sound style numeric value by passing the string name as dictionary key. E.g. LBD_SoundStyles("Dispatch") = 0. |
|
LBD_SoundFormatNames | A VbScript Array, containing all BotDetect sound format names. String values are mapped by their numeric equivalents as indexes, so you can get a sound format name by passing the numeric value as array index. E.g. LBD_SoundFormatNames(0) = "WavPcm16bit8kHzMono". |
|
LBD_SoundRegenerationModes | A VbScript Dictionary, containing all BotDetect sound regeneration mode numeric values. Numeric values are mapped by their (case-insensitive) string equivalents as keys, so you can get a sound regeneration mode numeric value by passing the string name as dictionary key. E.g. LBD_SoundRegenerationModes( "None") = 0. |
|
LBD_SoundRegenerationModeNames | A VbScript Array, containing all BotDetect sound regeneration mode names. String values are mapped by their numeric equivalents as indexes, so you can get a sound regeneration mode name by passing the numeric value as array index. E.g. LBD_SoundRegenerationModeNames(0) = "None". |
|
LBD_SoundFormats | A VbScript Dictionary, containing all BotDetect sound format numeric values. Numeric values are mapped by their (case-insensitive) string equivalents as keys, so you can get a sound format numeric value by passing the string name as dictionary key. E.g. LBD_SoundFormats( "WavPcm16bit8kHzMono") = 0. |
|
LBD_HelpLinkModeNames | A VbScript Array, containing all BotDetect help link mode names. String values are mapped by their numeric equivalents as indexes, so you can get a sound format name by passing the numeric value as array index. E.g. LBD_HelpLinkModeNames(0) = "Image". |
|
LBD_HelpLinkModes | A VbScript Dictionary, containing all BotDetect help link mode numeric values. Numeric values are mapped by their (case-insensitive) string equivalents as keys, so you can get a sound format numeric value by passing the string name as dictionary key. E.g. LBD_HelpLinkModes("Image") = 0. |
|
Function LBD_Timestamp | Creates a simple timestamp string based on the current date and time, e.g. on the 21st of September at 13:45:27 it would return |
|
Function LBD_FormattedDate
|
Formats the given date/time value in the |
|
Function LBD_Now | Automatically uses the |
|
Function LBD_Asciify
|
Replaces all non-Ascii characters in the given string with |
|
Function LBD_Normalize
|
Removes all non-word (word characters = alphanumeric Ascii + underscore) characters from the given string. |
|
Function LBD_CreateGuid | Creates a new GUID value, formatted as a continuous string (e.g. |
|
Function LBD_DictionaryFromArray
|
Given an array of values, converts it to a VbScript Dictionary, with the array values becoming dictionary keys and array indexes becoming dictionary values. In other words, it reverses the array |
|
Function LBD_RandomFromRange
|
Returns a random integer from the numeric range defined by the given (inclusive) lower and upper bound. E.g. |
|
Function LBD_RandomFromValues
|
Returns a random value from the given VbScript Array. E.g. |
|
Function LBD_ScriptName | Name of the currently executing script file, e.g. returns |
|
Function LBD_AppName | Name of the next-to-last path fragment for the currently executing script file, e.g. returns |
Please Note
The information on this page is out of date and applies to a deprecated version of BotDetect™ CAPTCHA (v3.0).
An up-to-date equivalent page for the latest BotDetect Captcha release (v4) is BotDetect v4 Captcha documentation index.
General information about the major improvements in the current BotDetect release can be found at the What's New in BotDetect v4.0 page.
Current BotDetect Versions
-
BotDetect ASP.NET CAPTCHA
2019-07-22v4.4.2 -
BotDetect Java CAPTCHA
2019-07-22v4.0.Beta3.7 -
BotDetect PHP CAPTCHA
2019-07-22v4.2.5