Ramblings & Controls from a .NET Addicted Freak!

Kevin Gearing's Blog

New Control - FormShield - Dynamically Generates CAPTCHA™ Style Images

FormShield started out as a simple project with just one aim - to prevent automated form submission using dynamically generated images.

Not exactly a new idea - dynamically generated images requiring the user to enter the text found on the image have been around for quite a while (see, preventing automated sign-ups to free e-mail services such as HotMail and Yahoo, and automated whois lookups on domain names on sites such as Network Solutions.

Whilst some code exists on Code Project (, there didn't however seem to be a free, easy-to-use and customisable control for ASP.NET with full designer integration that could generate the relevant images. So, looking for an excuse to delve into GDI+, FormShield was born and my idea of a 'simple' control was dropped...


  • Generates BMP, GIF, JPEG, PNG or TIFF images.
  • Choose the pixel format and smoothing mode used to render the image.
  • Set the height, width and alignment of the image as well as the alternate text displayed.
  • Image is built using 3 layers - Background, foreground and noise.
  • Provides 6 fill styles, 4 gradient styles, 53 hatch styles and 2 colors for each layer.
  • Set the length and case (lower, mixed or upper) of the automatically generated text.
  • Choose the type of characters you want to use to generate the text (alpha, numeric, symbols or a combination).
  • Choose the fonts you want to use to draw the text as well as the font style (4 combinable styles, 16 in total).
  • Pick a text effect (5 combinable effects, 23 in total) and decrease the noise level to decrease readability.
  • Draw a border on the image using one of 5 styles and your choice of color.
  • Randomise the fill style, gradient style, hatch style, font style, text case, text style, text effect and border style.
  • 6 Presets included; Default, Fire, Forest, Sand, Sea, ChessBoard.
  • Supports 3 persistent methods; ViewState, SessionState or FormField (hidden input field) - ideal if ViewState and/or SessionState isn't available to persist property values on postback.
  • Values stored using any of the persistent methods are automatically encrypted for additional security.
  • Image is rendered on demand (either inline or using an Image Provider), and not saved as a file.
  • Encrypts the querystring to prevent deciphering by reading the HTML source.
  • Works with existing ASP.NET validation controls as well as StringCompareValidator.
  • Can be used on standalone WebForms as well as UserControls.
  • Supports .Text Blogging Engine (no compile needed) to prevent spam on blogs.
  • Full Visual Studio .NET designer integration, including optional rendering whilst in design mode.



Visual Studio .NET Design Time Notes:

  1. To get the image to appear when you first drag 'n' drop FormShield to your page, save the file and then click 'Refresh' from the 'View' menu or visit the page in a Web browser. If that doesn't work, build the project and try again.

  2. On occasion the image doesn't reflect property changes made within the property grid. This seems to be either an issue with Visual Studio, or caching. The easiest way to solve the problem (if it happens in the first place) is to save the file and then click 'Refresh' from the 'View' menu.


Simply download, add to your toolbox, drag 'n' drop to your page and set the relevant properties using the property grid.

To combine with a validation control (e.g. StringCompareValidator), add the validation control as well as a textbox to your page, set the StringCompareValidators 'ControlToCompare' property to point to the textbox control and the 'ControlToValidate' property to point to the FormShield control.

To use an Image Provider to decrease rendering times, create a new page and set it to inherit from dotNetFreak.WebControls.FormShieldImageProvider. Then update the ImageProviderUrl property to point to the new page.

Licensing & Download:

Free for both personal and commercial use, however please consider donating!

You may also redistribute the control royalty free, providing that you don't charge for it. Also, if you intend to distribute the control as part of an application which is publicly available it would be nice to know, although this isn't a requirement.

Got a good image design? Drop me a line using the contact link and I'll look to include it as a preset. 

To download, please visit the 'Downloads' area.


Help & Support:

Please post in the forum.

Integrating with the .Text Blogging Engine:

A quick guide by Davide Mauri on integrating FormShield with .Text to prevent spam on your blog is also available in the downloads area.


Revision History: 

Updated 13/07/2007 (v2.0.0):

Click here for details.

Updated 28/06/2005 (v1.1.2):

A new method has been added (DrawNewText) which will force FormShield to redraw the image with a new text value. This can be used on postback to change the text that appears on the image if the user enters an incorrect value.

Thanks to Amrinder Sandhu for suggesting this.

Updated 01/06/2005 (v1.1.1):

The encrypted properties value that is passed in the query string is now UrlEncoded to prevent issues with ISAPI filters mis-interpreting it. This should also mean that ValidateRequest="false" is no longer required to be in the Page directive.

Thanks to Mario Vargas for suggesting this.

Updated 18/05/2005 (v1.1.0):

  • New PersistenceMethod property - Allows you to use either ViewState, SessionState or a hidden input field (FormField) to persist property values. Ideal for use when ViewState and/or SessionState isn't available.
  • .Text Blogging Engine compatible - Stop spammers from hijacking your blog - No compile needed!
  • Values stored in ViewState, SessionState or in a hidden input field (FormField) are now encrypted.
  • Only required property values are now persisted, reducing the amount of data stored.
  • Encryption keys strengthened - control name no longer used for improved security.
  • Missing text value and other problems when used on UserControls - Fixed.
  • Random FontStyle, GradientStyle, HatchStyle, TextCase and TextStyle were still throwing exceptions under certain conditions - Fixed - Thanks to David Waters for pointing this out.

Thanks to Davide Mauri for making me ensure FormShield worked properly with .Text :-) and also for writing the guide on how to impliment it (see above).

Updated 06/01/2005 (v1.0.2):

Random FontStyles on occasion would thrown an exception - Fixed.

Updated 22/11/2004 (v1.0.1):

On occasion when using a random FontStyle, GradientStyle, HatchStyle or TextCase an exception would be thrown e.g. 'ArgumentException: Requested value Random was not found.'

This has now been fixed - Thanks to Minh Tran for pointing this out.

Published Nov 06 2004, 06:41 PM by dotNetFreak
Filed under: ,



Minh Tran said:

First of all thank you very much for the great control. It is simple and easy to implement. I have however found a minor bug in it. If one of the look-and-feel property set to Random, it throw exception every once in a while. It seems that the Random function you are using does not fall in to the correct range. If I set them to non-random then all is fine.

[ArgumentException: Requested value Random was not found.]
System.Enum.Parse(Type enumType, String value, Boolean ignoreCase) +906
dotNetFreak.WebControls.FormShield.ConvertGradientStyle(GradientStyle gradientStyle) +66
dotNetFreak.WebControls.FormShield.DrawBackground(Graphics graphics, RectangleF rectangle) +52
dotNetFreak.WebControls.FormShield.GenerateImage() +296
dotNetFreak.WebControls.FormShield.OnInit(EventArgs e) +146
System.Web.UI.Control.InitRecursive(Control namingContainer) +241
System.Web.UI.Control.AddedControl(Control control, Int32 index) +185
System.Web.UI.ControlCollection.Add(Control child) +153
dotNetFreak.WebControls.FormShieldImageProvider.OnInit(EventArgs e) +123

One other question: Do you keep the secret key in session or application variable to decode the encrypted the image query string? If you hardcode the key, hackers may use your same control in their site to decode the image from query string, and thus will defeat the purpose of this.
November 22, 2004 4:18 PM

Kevin Gearing said:


Thanks for the feedback. I will take a look at the bug tommorrow for you and post a fix.

With regards to encryption/decryption, it uses two different keys to encrypt and decrypt. One is hard-coded, the other isn't. This should make it fairly difficult for someone to crack it.
November 22, 2004 4:45 PM

Kevin Gearing said:

The fix for the above problem has now been posted.
November 22, 2004 5:13 PM

Davide Mauri said:

Hi Kevin you did a really good work! It would been even more interesting if you had realeased the source code. Anyway i'd like you to know that i'm good to speak about your FormShield in the next issue of the italian version of Visual Basic Journal, in the .NET Tools section.
November 28, 2004 9:38 AM

Stephen Bell said:

Great tool!

Am having a couple of small problems though....

FWIW, I'm still experiencing the Random problem described by Minh Tran above. Does the link

point to the updated component?

Also, periodically, the control seems to not render any image at all - suggestions?

- Stephen
December 23, 2004 8:12 PM

DDW said:

Same here regarding the random problem and periodic empty image.
December 28, 2004 6:03 AM

Kevin Gearing said:


Thanks for the feedback. The control available for download is the latest version. I'll take another look at the random issue in the next couple of days and post my findings and a fixed version.

With the empty image problem, is this within Visual Studio or when viewed via the Web?
December 31, 2004 11:28 AM

Kevin Gearing said:

I have found one problem with random FontStyles that I have now fixed and the updated version has been uploaded.

If this doesn't cure the problem could you send me an e-mail using the 'Contact' link above with the exception details and I'll dig a bit deeper and cure the problem once and for all.

With regards to the empty image, can you provide me with some more details please? I believe it could be something to do with the encryption algorithm but I need more info.
January 6, 2005 11:08 AM

Ben Strackany said:

Good I don't have to write my own. Which woulda been fun, but oh well. :)
January 10, 2005 7:26 PM

.NET Tools Blog said:

January 11, 2005 1:05 PM

.NET Tools Blog said:

January 11, 2005 1:31 PM

.NET Tools Blog said:

February 20, 2005 7:44 PM

smith288 said:

Perhaps you could use your own control for this blog
March 31, 2005 1:42 AM

Kevin Gearing said:

Yep you're right. Unfortunately I've been away and extremely busy for the last month or so and haven't had chance.

I'm back now and will be finishing FormShield v1.1 next week which works with .Text and will then add it to my own blog!
April 14, 2005 1:58 PM

.NET Tools Blog said:

May 18, 2005 2:14 PM

.NET Tools Blog said:

May 18, 2005 2:14 PM

Davide Mauri said:

Ultracool :-D
May 18, 2005 2:19 PM

Pencil Bros. Geology, Inc. said:

May 21, 2005 2:39 AM

Mario Vargas said:

Kevin, I like the control very much and I'm using it for one of my projects. I did find one problem with the control. Once in a while it will yield an empty image. When I try to view the image in my web browser by copying the URL in its SRC attribute, I get "System.FormatException: Invalid character in a Base-64 string."

I created an ImageProvider by deriving from the FormShieldImageProvider class. I am also using the default settings and creating a JPEG graphic instead of a PNG or GIF. Below is the stack trace.

[FormatException: Invalid character in a Base-64 string.]
System.Convert.FromBase64String(String s) +0
dotNetFreak.WebControls.FormShield.Decrypt(String encryptedString) +63
dotNetFreak.WebControls.FormShield.ParseQueryString() +149
dotNetFreak.WebControls.FormShield.OnInit(EventArgs e) +136
System.Web.UI.Control.InitRecursive(Control namingContainer) +241
System.Web.UI.Control.AddedControl(Control control, Int32 index) +185
System.Web.UI.ControlCollection.Add(Control child) +153
dotNetFreak.WebControls.FormShieldImageProvider.OnInit(EventArgs e) +123
ASPNET.StarterKit.Commerce.CaptchaImageProvider.OnInit(EventArgs e) in C:\Inetpub\wwwroot\[FOLDER]\OnlineStore\CaptchaImageProvider.aspx.cs:30
System.Web.UI.Control.InitRecursive(Control namingContainer) +241
System.Web.UI.Page.ProcessRequestMain() +196

May 26, 2005 5:04 PM

Kevin Gearing said:

Hi Mario,

Hmm, looks like there's obviously an issue with the encoding in the encryption and decryption methods. I'll take a look as soon as I have 5 minutes. If you drop me an e-mail using the 'Contact' link above and include your e-mail address I'll e-mail you direct as soon as I've had a chance to take a look.
May 26, 2005 6:37 PM

Ray Bez said:

Is there a sample project available? I have added the control to my form, but it does not render an image at run-time.

I must be missing something simple. The description "set the relevant properties using the property grid" is not very clear, to me.
May 27, 2005 11:11 AM

Kevin Gearing said:

Hi there. Do you use Visual Studio .NET or Web Matrix? Also, which version of the .NET Framework are you using? Feel free to e-mail me direct using the 'Contact' link above.
May 27, 2005 5:52 PM

Jimmy said:

Great Control, quick question. I've hooked up the validation control and works fine, but seem it doesnt validate adhoc, unless you click submit. Was it meant to do that or not. Otherwise the control rocks!
June 7, 2005 8:12 AM

Kevin Gearing said:

That is the correct behaviour. As the Text value is encrypted client-side validation isn't possible. If the EncryptQueryString property is False it should work client-side, although not encrypting the querystring isn't a particularly good idea :-)
June 7, 2005 9:00 AM

Anthony said:

I have added the control into tool bar and dragged it into my form. After I have debugged several times for my project, the control starts give out error. Please help me to take a look on the reason. Thanks.

Description: An error occurred during the processing of a configuration file required to service this request. Please review the specific error details below and modify your configuration file appropriately.

Parser Error Message: Access is denied: 'dotnetfreak.webcontrols.formshield'.

Source Error:

Line 196: <add assembly="System.EnterpriseServices, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
Line 197: <add assembly="System.Web.Mobile, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
Line 198: <add assembly="*"/>
Line 199: </assemblies>
Line 200: </compilation>

Source File: c:\windows\\framework\v1.1.4322\Config\machine.config Line: 198

Assembly Load Trace: The following information can be helpful to determine why the assembly 'dotnetfreak.webcontrols.formshield' could not be loaded.

=== Pre-bind state information ===
LOG: DisplayName = dotnetfreak.webcontrols.formshield
LOG: Appbase = file:///c:/inetpub/wwwroot/WebDiary
LOG: Initial PrivatePath = bin
Calling assembly : (Unknown).

LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).
LOG: Post-policy reference: dotnetfreak.webcontrols.formshield
LOG: Attempting download of new URL file:///C:/WINDOWS/Microsoft.NET/Framework/v1.1.4322/Temporary ASP.NET Files/webdiary/02293efa/4f077287/dotnetfreak.webcontrols.formshield.DLL.
LOG: Attempting download of new URL file:///C:/WINDOWS/Microsoft.NET/Framework/v1.1.4322/Temporary ASP.NET Files/webdiary/02293efa/4f077287/dotnetfreak.webcontrols.formshield/dotnetfreak.webcontrols.formshield.DLL.
LOG: Attempting download of new URL file:///c:/inetpub/wwwroot/WebDiary/bin/dotnetfreak.webcontrols.formshield.DLL.
LOG: Publisher policy file is not found.
LOG: No redirect found in host configuration file (C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet.config).
LOG: Using machine configuration file from C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\config\machine.config.
LOG: Post-policy reference: dotNetFreak.WebControls.FormShield, Version=, Culture=neutral, PublicKeyToken=e88fc571c8fa4b76

Version Information: Microsoft .NET Framework Version:1.1.4322.2300; ASP.NET Version:1.1.4322.2300
June 7, 2005 3:54 PM

Kevin Gearing said:


Have a look at:;en-us;329065

as this might be the problem you are experiencing.
June 16, 2005 11:16 AM

Anthony said:

Thanks for your information and it solves my problem. Indexing Service on server randomly makes the program throw exception as above.

This component is great and save me lots of time. Thanks you again.
June 30, 2005 6:41 PM

Abraham M said:

Thank you for your control,

Can you tell me what ImageProviderUrl is ?

I have this issue that I put the control on an ascx control and call from a main page frmmain.aspx,the ascx control loads but the image does not come the path,the path is


does the control work with .ascx rendered pages
August 1, 2005 1:49 PM

Kevin Gearing said:

Hi. Yes, FormShield does work with UserControls (.ascx) from v1.1.

ImageProviderUrl is a different way of rendering (usually quicker) and is the recommended way of using FormShield.

Simply create a new WebForm (.aspx) and in the code-behind set it to inherit from dotNetFreak.WebControls.FormShieldImageProvider. Then in the FormShield control on your UserControl set ImageProviderUrl to point to the location of the WebForm you just created.

Now instead of calling itself to render it will call the WebForm which will probably cure the problem you are experiencing.

If you have any problems, feel free to e-mail me using the contact link above and I'll take a look.
August 1, 2005 2:15 PM

Abraham M said:

Thanks for your quick reply,I think I solved it using the method you decribed.Well have to do some tests and see if things work as expected,will let you know.Thanks for you support again.
August 1, 2005 3:36 PM

Carl said:

Great tool!

I can get it to work nicely however when using the comaparevalidator with a validationsummary, the errormessage does not get displayed.

Any ideas?
September 2, 2005 7:26 AM

Kevin Gearing said:


I haven't actually tried it with a ValidationSummary control myself to be honest. I will give it a try and let you know how I get on.
September 7, 2005 11:03 AM

Alekandar Petkovic said:

Do you post FormShield updates via RSS? I'd like to be notified when the EncryptQueryString bug is fixed. I have it currently set to False. If it's set to True the image won't appear 1 out of every 10 times.

I also have one other question and a request.

Question: How can I set the text translucency
like you have on this form? (Or did you just specify a similar ForeHatchStyle as the background but with slightly darker colors?)

Request: A case insensitive mode

September 16, 2005 10:56 PM

Kevin Gearing said:

Hi there,

1. I post a new post each time FormShield is updated under the ASP.NET category, so you can subscribe to that RSS feed to receive the update announcements. You will also get my ramblings as well though, but there aren't that many :-)

2. I wasn't aware that there was a bug with EncryptQueryString and blank images as I heavily tested FormShield and ALWAYS got an image. If that's not the case and you are using the latest build, please drop me an e-mail using the contact link and I'll take a look for you.

3. I'm using the 'ChessBoard' preset on this blog, which uses hatched background and foreground settings with slightly darker colours for the foreground.

4. With regards to case insensitive, FormShield isn't designed to actually validate the text the user inputs as it works with the standard ASP.NET validators and also my StringCompareValidator. You can however use StringCompareValidator to compare the values and it does support case sensitivity and therefore will achieve what you're looking for.

Hope this helps, feel free to e-mail me if you have any other questions.
September 19, 2005 12:05 PM

Alekandar Petkovic said:

Not sure if you received my e-mail through the web form so I'll post here. Last time you responded quickly via your blog, thanks for that!

Also, thanks for the tips in your previous reply, everything you mentioned worked out great.

However, I am having a problem running FormShield on load-balanced servers.

Two different things happen based on what I have EncryptQueryString set to.

EncryptQueryString = True
Image does not appear 1 out of 10 times.. maybe even more. After about 30 seconds the space where the image is supposed to be it turns into the ie image not found X. I'm guessing it times out after 30 seconds from an error.

EncryptQueryString = False
The image appears every time, but once out of every few times on the form SUBMIT I get an error. I've saved the error as a web page and it can be found here:

Why it's trying to even go through the Decrypt routines when EncryptQueryString is false might be the problem there.

These errors ONLY occur in my load-balanced environment. On the dev machine everything works perfect. Is there some property not being carried over in the viewstate for it to work properly in a load-balanced environment?

Anyhow, I can't use the control until these issues are resolved and I really love the work you've done. I can set up a test project on our servers if need be to help track down the problem.
September 21, 2005 11:04 PM

Kevin Gearing said:

Hi Alekandar,

I did receive your e-mail, but I've been extremely busy over the last few weeks and just haven't had the time to reply to anyone. You should now have an e-mail from me and hopefully it should be fairly easy to resolve the specific problems you are having.
October 19, 2005 1:47 PM

tengtium said:

please help.. it doesn't work......
October 31, 2005 2:02 AM

Kevin Gearing said:

I've replied to your e-mail. If you don't receive it, please let me know.
October 31, 2005 10:23 AM

Luc Bourdon said:

Is there a way to set a duration and say how long the captcha is valid for? I'm wondering if a user could just save the outputed HTML from my site, modify it a little to include the captcha number and just use that to autosubmit just like before? (Assuming I'm using the viewstate method).
November 2, 2005 8:44 PM

saw said:

Kevin, nice control. Unfortunately I've found it doesn't work in an 2.0 hosting situation (security set to medium trust) as the control doesn't allow partially trusted callers. Any thoughts on how easy it would be to fix that?

November 12, 2005 1:37 PM

Kevin Gearing said:


Thanks for your feedback.

I haven't tested FormShield with .NET 2.0 as yet simply because I was waiting to get my hands on the retail version. As soon as I do I'll look at implementing a timeout on the generated CAPTCHA image and will also release a .NET 2.0 compatible version.
November 14, 2005 11:49 AM

Rick said:

Kevin, I've been using Formshield successfully on .NET 2 for several months now. In order to get it to work I had to set trust in Web.config to

<trustLevel name="Full" policyFile="internal"/>
<trust level="Full" originUrl=""/>

My Web host has just restricted the Trust Level at Machine.Config and all the FormShields are busted. It's a great control. Is there any update on a new version that doesn't get into the Trust mess?

January 12, 2006 6:24 AM

hamid said:

Dear Sir/madam,

I need a captcha generator in ASPo classic for free, can you help me?
January 14, 2006 1:39 PM

Jason Butera said:

I want to set the Text of the control to my own dynamically generated password. If I set it on Page_Load, it does not hold. The text is still random. However, if I set the Text property on a button click event on postback, it does hold and displays my text properly. However, I need the text set on my first page load. Is there a sequence I am missing? I tried setting the property on Load, PreRender, etc with no luck.
January 16, 2006 6:05 PM

Kevin Gearing said:

Hi Rick,

Ah, the trust problem does need a new compile, unfortunately with work committments at the moment I don't really have the time to put this right.

If you have a good relationship with your Web host, you could ask them to permit your applications to run in full trust. All they need to do is change their machine.config for your specific sites/applications.

I'm intending to release .NET 2.0 versions of my controls, but at the moment it's going to have to wait for a month.

January 17, 2006 11:01 AM

Kevin Gearing said:


Re: An ASP CAPTCHA Generator. Sorry, but I can't really help you with this, it might be worth googling or checking out
January 17, 2006 11:03 AM

Kevin Gearing said:


It is not possible (at the moment) to set your own text.

FormShield always generates a new, random set of text using the properties specified.

It is (as you've found out) possible to change the value of the Text property on postback, but not for the original page load.
January 17, 2006 11:09 AM

Christopher Hall said:

Hi Kevin,

We've integrated your control onto our registration page for our new ticketing system, and so far it has worked extremely well.

Unfortunately as the system has become more used, we are often receiving a System.Web.HttpUnhandledException - "bad data". This is occurring within the Decrypt method, at the System.Security.Cryptography.CryptoAPITransform._DecryptData call.

We are using the ImageProviderUrl, using the ViewState to store the encrypted string.

If you can provide any info at all i'd appreciate it!
January 26, 2006 9:44 AM

Kevin Gearing said:


I've noticed on occasion ViewState seems to get corrupted and I'm wondering if this is happening causing the decryption routine to fail as it has bad data.

Could you try changing it from ViewState to use one of the other PersistenceMethods and see if that helps.
January 31, 2006 1:49 PM

Kevin Gearing said:

I've had an interesting e-mail from Doug Keesler who has been having a few problems with FormShield not rendering 100% of the time like a few other people.

Doug has spent quite a bit of time testing FormShield and it looks like he has found the source of the problem.

If you are experiencing issues with FormShield not rendering 100% of the time, then the advice is to check the Font list that FormShield is using and to remove all of the fonts from the list that are not installed on the system on which FormShield is running.

You can of course remove all except Arial and you should find that this solves the problem.

If you are still having problems after trying the above, then please feel free to contact me.

February 9, 2006 11:53 AM

Peter Lepacus said:

Hi Kevin,

Keep up the great work. Any idea when the 2.0 version will be available ?

Take Care

February 26, 2006 6:09 PM

Mike Furtney said:

Thanks so much !!! Exactly what I was looking for !!!

February 28, 2006 5:09 AM

Kevin Gearing said:

Hi Peter,

Unfortunately it's not going to be for a while. I'm extremely busy at the moment handling the re-location of the company I work for and it is likely not to be until May :-(
March 1, 2006 6:41 PM

Dotnetshadow said:

Hi great control, I know your busy with work and stuff is there any chance of getting the source code so that enhancements could be made? One of the biggest problems is the timeout for the image is missing meaning anyone could just keep submitting the same capture result?

If i store the value in hidden input ABCDEF then anyone can keep using this value over and over again

Is this correct or am I missing something?

Regards Dotnetshadow
March 11, 2006 1:47 AM

Bjorn said:

Great control. Without doubt one of the best out there, at least with the best looking image generation :).
Good job!

If you could fix the ASPHOSTINGPERMISSION problems, it would be perfect!

Hope you have time to update it sometime in the near future.

April 13, 2006 5:31 PM

Kevin Gearing said:

Hi Bjorn,

Thanks for the feedback! I'm glad you like FormShield.

I'm hoping to get a new version out in the next couple of months which will resolve that particular issue and add a few more new features.

Unfortunately the move I'm co-ordinating has slipped a little which means I'm still tied up with work committments at the moment.

April 18, 2006 12:41 PM

Bjorn said:

Kevin, great to know that you have plans releasing a new version!

The FormShield control is working great for us, we tried several controls, even looked at some commercial controls. If you would fix the minor issues and with minor tweaks, FormShield would propably be the best CAPTCHA controls out there.

You should consider making a commercial version, releasing it to the Open source community, or accepting Paypal donations to help further development of the control :).

We havent released the project yet though. I might send you the url when the site is released so you can see the control in action.

Keep up the good work!

- Bjorn
April 22, 2006 3:48 PM

Kevin Gearing said:

Hi Bjorn,

Thanks for your feedback!

I'm intending to release an interim version of FormShield as soon as possible (June probably) that will fix the minor issues and then release a new version in July which will add some of the features that people have asked for.

I decided right at the beginning not to make commercial versions of my controls simply because I've been grateful to the individuals who provide .NET controls with relaxed licensing over the years and this is me returning something to the community.

I might add a PayPal donation button to the site for those who feel compelled to send me some money though :-)

However, my controls (existing and future) will remain free for both personal and commercial use without restriction.

Besides, I get a buzz outta seeing Web sites using them!

April 25, 2006 3:51 PM

Peter said:

Hi Kevin,

Great job. Thanks a lot. But I have a problem. While using Mozilla FireFox my simple code does work fine, but using MS IE 6.0 SP2 any entered code correct/incorrect is recognized as invalid after rising the Button1_Click event. I use the CompareValidator control. Please help, Regards

April 30, 2006 1:30 PM

Addie said:

Hi! I'm really interested in this great release but I don't know how to intergrate it. Can anyone help me? Thanks

May 2, 2006 6:55 PM

Chad said:

It doesn't work with URL Rewrtier ( unfortunately. Or, at least I cannot get it to work properly with URL Rewriter.
May 30, 2006 5:01 AM

Chad said:

Scratch that. See post 6 at the following address to address this issue.
May 30, 2006 5:06 AM

Steve said:

Well, judging by the spam comment directly above this, I suppose someone found a way around this method (or wasted a lot of time typing out those spam links)

Now for the real reason i am posting, just wanted to say thanks for the aspx-inheriting-FormShieldImageProvider fix for user controls, works like a charm, even in 2.0
June 14, 2006 2:24 AM

Kevin Gearing said:

Hi Steve,

They type all of the spam links in :-)

June 14, 2006 11:17 AM

Martin said:

Hi Kevin

I am using the FormShield-control (and some textfields) within an ASP.NET 2.0-page. Works fine, but when I want to validate the textfields I have to switch the EncryptQueryString-property to false and set on every validation-control the EnableClientScript-property to true in order to work. how can I solve this problem?

June 15, 2006 7:36 PM

Aditya said:

Superb tool! I wish you had wiki for it. Thanks a lot!
June 19, 2006 5:34 AM

Chris Field said:

Really love FormShield, easily one of the best CAPTCHA controls out there. Probably the best considering the price!

I think I've just stumbled into the same trust level problem others are experiencing. Everything ran happily on my local box but as soon as I uploaded my code to my host, it all went belly up with the error:

System.Security.SecurityException: That assembly does not allow partially trusted callers.

I did a quick search on the internet and "all" that needs to be done for a fix is to add:
[assembly: AllowPartiallyTrustedCallers]
to the AssemblyInfo.cs (or .vb) of the FormShield project. Is it as simple as this? Is this something that can be done? :)

Unfortunately I don't have control over the trust levels on my host, nor do I have any special relations with them for them to want to do me any favours :(

Thanks for any help/advice you can offer!
June 26, 2006 7:37 PM

Chris Myers said:

If I set my image provider url then choose a preset it will clear the value I gave the control for the image url provider.
June 28, 2006 11:27 PM

Ariana said:

I'm sorry but I am just a newbie in ASP.NET, but I want to validate my page using the w3c xhtml validator but FORMSHIELD sends an error relating to the use of & in the querystring. Is there any way I can change this? If not, is it possible that the next version would use &amp; instead of & symbol?
July 16, 2006 7:01 AM

Ad Weterings said:

Great tool. Works nice to jump from one page to the next.
BUT... I'd like to integrate it into the Register sequece of ASP.NET 2.0
Meaning on a page register i've made a wizardstep which consist of this chapta, and the idea is you can provide your name/password, ONLY if the chapta was ok in the first step.

But it goes on to the next step, always...
an example would be appreciated.
August 6, 2006 9:45 AM

Harpreet said:

I am also having the same issue that Chris mentioned above. It throws System.Security.SecurityException at the host. Can you please look in to it?

I think I've just stumbled into the same trust level problem others are experiencing. Everything ran happily on my local box but as soon as I uploaded my code to my host, it all went belly up with the error:

System.Security.SecurityException: That assembly does not allow partially trusted callers.

I did a quick search on the internet and "all" that needs to be done for a fix is to add:
[assembly: AllowPartiallyTrustedCallers]
to the AssemblyInfo.cs (or .vb) of the FormShield project. Is it as simple as this? Is this something that can be done? :)
August 8, 2006 7:48 PM

Jay said:

Great control! I am not sure how to use the DrawNewText Method. Is it possible to get an example of this method?
August 16, 2006 7:36 PM

George Yefchak said:

Just ran into the 2.0 trusted assembly problem. Yikes, can this be fixed soon???

Otherwise, the control is great!
August 27, 2006 6:05 AM

Justin Barone said:

Hi Kevin,

I just wantd to say that your control rocks!

I know that you asked that anyone submit what site they are using it on. My site is a really cool online AJAX feed reader application with a twist. You can check it out over at

Currently, there is only a signup for a newsletter, but we are planning to launch the site live within a week. If you sign up for the newsletter you will be notified when we go live.

Thanks Dude,

September 2, 2006 1:16 AM

Rob said:


I noticed this webpage last released version was Updated 28/06/2005 (v1.1.2) well over a year ago, does that mean no work will be done on it? Maybe the source could be released or something so problems can be fixed?

Regars Rob
September 5, 2006 5:00 AM

Puneet said:

I am using FormShield on a website that is loadbalanced. I am using the FormField option to persist the value of the code. In some instances I am getting the following exception. Could you help me fix this issue?


Error : Untrapped Exception: Bad Data.
Exception Type : System.Security.Cryptography.CryptographicException
File : Unknown
Line :
StackTrace : at System.Security.Cryptography.CryptoAPITransform._DecryptData(IntPtr hKey, Byte[] rgb, Int32 ib, Int32 cb, Boolean fDone) at System.Security.Cryptography.CryptoAPITransform.TransformFinalBlock(Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount) at System.Security.Cryptography.CryptoStream.FlushFinalBlock() at dotNetFreak.WebControls.FormShield.Decrypt(String encryptedString) at dotNetFreak.WebControls.FormShield.get_Text() at ....
September 15, 2006 3:08 PM

Ric said:

I, too, am having the "That assembly does not allow partially trusted callers." problem in a hosted environment.

Apparently, this can be resolved just by adding a single attribute to each class that is called:

Here is the Microsoft ref:

Sure would appreciate you recompiling with this attribute in place :)

October 2, 2006 8:36 AM

Thomas said:

Like Kevin above, I too am getting the same Cryptography exception.

In addition, the image does not show if I set the persistencemode to FormField. If I set it to ViewState it shows, but does not return to me the value in the captcha even if I explicitly enabled viewstate.

Lastly, is this control compiled to .NET 2.0 and is the source available?
October 8, 2006 6:53 AM

bendise said:

? 34: [System.Runtime.CompilerServices.CompilerGlobalScopeAttribute()]
? 35: public class WebForm2_aspx : FormShield.WebForm2, System.Web.SessionState.IRequiresSessionState {

January 4, 2007 4:49 AM

Dylan Hayes said:

Nice control! Although looking at the comment spam above, it looks like it can be defeated. Shame about it throwing Security Exceptions in Framework 2.0. You can get around that by running in full trust (change the web.config to do this), although you may want to consider the security implications of this first.
January 5, 2007 10:26 AM

Kevin Gearing said:

Hi Dylan,

They defeat it on my blog by simply sitting there and entering the junk and then typing in the HIP Code. What they can't do however is automate the adding of it like they used to do when I received about 50+ a day!

I am intending on releasing a .NET v2.0 version shortly, which will negate the need to run FormShield with full trust as most shared hosting providers run in a custom medium trust environment and therefore won't allow applications requiring full trust.
January 6, 2007 2:07 PM

LoneVVolf said:

Did anyone find a solution for the Cryptography exception? I am also seeing this on a load balanced site.
February 7, 2007 8:46 AM

Malin Wickremesinghe said:

Hi Kevin,

Any progress with the .NET v2.0 version?

April 10, 2007 4:33 PM

Chase Florell said:

What a FANTASTIC product, I absolutely love the ease of implementation.

I would like to suggest that there be an "OnClick" feature built in so that we can do something like

Protected Sub FormShield1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles FormShield1.Click


End Sub
April 16, 2007 1:16 AM

Robert Wafle said:


I love the control. I have a situation where I am using this control three times on the same page. The control is used in hidden DIVs and the text is the same for all three. I'd like to be able to set a different "seed" so that the values used by my three different controls are not the same.


May 1, 2007 7:00 PM

Thomas said:

Hi Kevin, still plans for a ASP.NET 2.0 version?


May 1, 2007 7:55 PM

Kyle said:

I spoke with Kevin today and he says that hopefully by the end of this week he will be working on getting the ASP.Net 2.0 version going.

I, personally, can't wait.
May 16, 2007 11:30 PM

Christian Cornelsen said:


I've got 2 websites, one of them "" get a lot of Bots enty's every day. My "dream" is, to write the sites with ASP. NET, but this language is new for me, but I think easier then php. Because that I need a hole Guestbook with a Capture. Only a light version, no big thinks. That I want to do.

Have someone a guestbook code how can do this for free?

Thanks in forward
May 30, 2007 7:20 PM

Gerard said:

Hey, Kevin:

Great control but for some reason in our load balancing environment we get this Exception --------->

Type : System.Security.Cryptography.CryptographicException, mscorlib, Version=, Culture=neutral, PublicKeyToken=b77a5c561934e089

Message : Bad Data.

Source : mscorlib

Help link :

Data : System.Collections.ListDictionaryInternal

TargetSite : Void ThrowCryptogaphicException(Int32)

Stack Trace : at System.Security.Cryptography.CryptographicException.ThrowCryptogaphicException(Int32 hr)

at System.Security.Cryptography.Utils._DecryptData(SafeKeyHandle hKey, Byte[] data, Int32 ib, Int32 cb, Byte[]& outputBuffer, Int32 outputOffset, PaddingMode PaddingMode, Boolean fDone)

at System.Security.Cryptography.CryptoAPITransform.TransformFinalBlock(Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount)

at System.Security.Cryptography.CryptoStream.FlushFinalBlock()

at dotNetFreak.WebControls.FormShield.Decrypt(String encryptedString)

at dotNetFreak.WebControls.FormShield.get_Text()

at dotNetFreak.WebControls.FormShield.OnPreRender(EventArgs e)

at System.Web.UI.Control.PreRenderRecursiveInternal()

at System.Web.UI.Control.PreRenderRecursiveInternal()

at System.Web.UI.Control.PreRenderRecursiveInternal()

at System.Web.UI.Control.PreRenderRecursiveInternal()

at System.Web.UI.Control.PreRenderRecursiveInternal()

at System.Web.UI.Control.PreRenderRecursiveInternal()

at System.Web.UI.Control.PreRenderRecursiveInternal()

at System.Web.UI.Control.PreRenderRecursiveInternal()

at System.Web.UI.Control.PreRenderRecursiveInternal()

at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

------------ Any thoughts?
May 31, 2007 5:47 PM

Rajesh said:


Thanks for this great tool. Though One thing I noticed is that if I set FontStyle=UnderlineStrikeout or FontStyle=Random, image is not displayed sometimes.


June 7, 2007 5:58 AM

Kevin Gearing said:

As Kyle points out a couple of posts above I am working on FormShield for .NET 2.0. This is taking slightly longer than expected, however once I have a working version I will start to fix the specific issues people have listed above.
June 7, 2007 5:45 PM

Swazi said:

how to generate numeric only on formshield control?
What is property class for numeric charaters only?
June 23, 2007 3:17 PM

Kevin Gearing said:

Simply set FormShield.TextStyle = TextStyle.Numeric
June 23, 2007 3:22 PM

geoxid said:

Hi Kevin,

I am also getting the error "Bad Data" from formshield randomly. I tried to change font and persistent methods to ViewState, SessionState or FormField but it didnt work. Can you fix it please ? Because this is the best formshield among others.
June 29, 2007 2:30 PM

Kevin Gearing said:

Hi there,

There are two reasons why you may receive the 'Bad Data' error and both of them have been resolved in FormShield v2, in fact the encryption/decryption routines have been totally re-written.

FormShield v2 should be available either tommorrow or on Monday.

June 30, 2007 10:45 PM

geoxid said:

Thanks for this great tool. I am looking forward new version.
July 2, 2007 9:15 AM

Rick said:

Congratulations and thanks Kevin from all of us who've been using the first version and are looking forward to v2!
July 8, 2007 3:23 AM

Kevin Gearing said:

Hi Rick,

Thanks for your feedback.

CasedTextBox v2.0.2, StringCompareValidator v2.0.2 and FormShield v2.0.0 are all built, tested and zipped up and will be uploaded tommorrow rather than today as I'm intending on changing my blog around.

All three controls have now been tested with Internet Explorer (PC & Mac), Firefox (PC & Mac), Opera (PC), Safari 2 (Mac) and Safari 3 (PC) and the functionality is identical in all of them.

July 8, 2007 11:15 PM

yuval said:

Can't wait for the new FormShield;)
Congratulations Kevin
July 9, 2007 1:11 AM

Rick said:

Kevin, congrats on the shiftover to CS 2007. I set mine up recently and it's been great. I was looking for the Formshield 2.0 download. The older versions are up but I don't see the new version. Is it still in development?

July 11, 2007 3:34 AM

Kevin Gearing said:

Hi Rick,

I'm doing the final compile of v2.0 this morning and will be uploading it later on. It will DEFINATELY be available today along with two other control updates.

I will also be integrating it with CS as well.


July 11, 2007 10:46 AM

geoxid said:

Congratulations about moving the site to CS. You did a good job and we are waiting for the new FormShield v2.0 impatiently. Thanks for this site and controls.

July 11, 2007 12:06 PM

Kevin Gearing said:

Thanks for the feedback. FormShield v2 has been a long time coming, but with the updates to the two other controls now uploaded, it's full steam ahead on compiling FormShield and integrating it with CS before uploading it to the masses!

July 11, 2007 2:21 PM

Kevin Gearing said:

Minh Tran & Stephen Bell:

The issue with random settings has now been fixed - All random methods have been re-written and fully tested. The encryption routines have also been re-written and one key is now hardcoded and the other can be specified in the web.config file.

The issue with non-rendering was partially down to fonts listed in the font array missing from the machine FormShield was running on. The font array is now based on the fonts available on a clean Windows XP/2003 machine which fixes the issue.

Mario Vargas, Alekandar Petkovic, Christopher Hall, Thomas & geoxid:

The issue you were experiencing was with certain characters breaking the decryption routines. These routines have been re-written and the querystring is no longer base-64 encoded. This can also happen for other reasons (see below).

Ray Bez:

A simple demo is now included within the FormShield archive file.


The issue with the validation summary control has now been fixed.

Alekandar Petkovic, Puneet, LoneVVolf & Gerard:

I believe the issue with FormShield not rendering in load-balanced environments was down to the key used by FormShield to decrypt which was based on machine specific identifiers. This has now been changed so the key can be specified in the web.config file.

Luc Bourdon & Dotnetshadow:

FormShield now supports ValidAfter and ExpiresAfter properties. ValidAfter specifies how many seconds after image generation before the image is deemed to be valid and ExpiresAfter specifies how many seconds after generation the image remains valid for. On postback you can then call FormShield.IsValid() and if necessary call FormShield.GenerateNew() to generate a new image. This will help to prevent replay attacks and with the ValidAfter property, prevents robots from bombarding your form.

saw, Rick, Bjorn, Chris Field, Harpreet, George Yefchak & Ric:

FormShield is now compatible with Medium Trust environments. AllowPartiallyTrustedCallers() has effectively been added as well as needing to re-write a major part of the designer integration, because although the code wasn't being called when not in design-mode it was still being read and therefore breaking Medium Trust.

Jason Butera:

FormShield now allows you to set the text value yourself (without overwriting it). Simply set FormShield.AutoGenerate to False and in the Page_Load event use FormShield.SetText("MyText"). You can also use the same method (SetText) on postback to change the value.


Having spent a LOT of time improving FormShield, v2 will be 'donationware'! :-)


FormShield v2 has been tested with IE6 (PC), IE5 (Mac), Firefox 2 (PC & Mac), Safari 2 (Mac), Safari 3 (PC) and Opera 9 (PC) and the experience is consistent throughout. I have also tested it using both my own StringCompareValidator and also the Microsoft CompareValidator and you should find you should no longer have any issues.


FormShield no longer supports inheriting from FormShieldImageProvider, instead it now requires an HttpHandler to be registered within the web.config file. This is a much cleaner way of doing things and has allowed me to re-organise the code. If you're using Visual Studio 2005, adding the HttpHandler is as simple as right-clicking on FormShield and selecting 'Add HttpHandler', it will then automatically update the web.config file for you and also update the FormShield properties to point to it.


For client-side validation, EncryptQueryString should be set to False and EnableClientScript should be set to True. For server-side validation EncryptQueryString should be set to True and EnableClientScript should be set to false. The validation controls cannot validate FormShield when EncryptQueryString is True as in this mode no 'Value' is written out to the client so the validators cannot find anything to validate with. I would always recommend using server-side validation as it allows you to then check the FormShield.IsValid() property to check whether someone is attempting a replay attack. EncryptQueryString is there really just for debugging!


No wiki (as yet), but forums have now been added thanks to CS2007.

Chris Myers:

Correct, this has been fixed. Setting presets or using the 'Reset Design Properties' menu option (in Visual Studio 2005), now only changes the relevant 'Design' properties and not any others.


This has been fixed, Url's that FormShield writes out are now using &amp; instead of &.

Ad Weterings:

Hopefully with all of the changes/fixes/additions, FormShield will now work for you.


FormShield.DrawNewText() has been replaced with FormShield.GenerateNew(), simply call this whenever you want FormShield to generate a new image.


FormShield has continued to be developed and v2 adds everything that I have ever been asked for and more. I am however moving FormShield to 'donationware' to help fund future development.


FormField has now been replaced with HiddenField (effectively the same, but using the .NET 2.0 class rather than my own). The bug you describe has also been fixed.

Chase Florell:

This has been added. FormShield now supports an ImageClick event and you can set it to either automatically regenerate the image, bubble the event (so you can change it yourself - e.g. if you are setting your own text value) or regenerate + bubble.

Robert Wafle:

This wasn't specifically a bug, but just the way the Random class was initialized, but it is fixed anyhow and has been tested with 5 FormShield's on one page all generating seperate values.


Oh yes!


In hindsight (a wonderful thing) my initial estimate of a few days was seriously out, but then to be fair I have changed a ridiculous amount of code and added a lot of new features.


Both FontStyle issues are fixed.


For v2, this is FormShield.CharacterType = CharacterType.Numeric - TextStyle has been replaced with CharacterType.

July 12, 2007 6:34 PM

geoxid said:

Hi Kevin,

You did a good job. I loved new features. When can you upload the new control ? Do you have a certain date in mind ? Thanks again for this great tool.

July 13, 2007 8:52 AM

Kevin Gearing said:

In a word - Today!

July 13, 2007 10:00 AM

Kevin Gearing said:

FormShield v2.0 has been released. See for details.

July 13, 2007 4:45 PM

Patricia said:

Very nice control, and  a lot of features, great!

November 8, 2007 9:52 PM

Josh said:


November 9, 2007 3:48 PM

Dizi izle said:

Thank Dotnet Freak Team.

May 13, 2008 4:00 PM

Shan said:

i just downloaded formshield dll for .net 1.1

it's my first time trying to build a captcha module on our site.

however, the lack of any good examples of this render me totally clueless on how to use the control.

the documentation is of no help at all in terms usibility.

i added the dll to the project reference, added the register preprocessor, included the the tag in the page, but the image just doesn't render and i have no idea what is missing.

can someone help me please?

May 23, 2008 11:06 PM

z said:

Hi. Fantastic control! Good work. I wanted to find out, is it possible to get an american voice for it?

September 25, 2008 2:13 PM

narendra said:

Hello, still FormShield control has trust level problem for .net 1.1. Please let me know if anyone has solved that.

January 19, 2009 1:12 PM

Kevin Gearing's Blog said:

FormShield v1.0.1 has been released. Click here for details.

February 17, 2009 5:01 PM

Kevin Gearing's Blog said:

FormShield v1.0.2 has been released. Click here for details.

February 17, 2009 5:01 PM

Kevin Gearing's Blog said:

FormShield v1.1.0 has been released. Click here for details.

February 17, 2009 5:02 PM

Kevin Gearing's Blog said:

FormShield v1.1.1 has been released. Click here for details.

February 17, 2009 5:03 PM

Kevin Gearing's Blog said:

FormShield v1.1.2 has been released. Click here for details.

February 17, 2009 5:03 PM

FormShield for .NET 2.0 Released - Kevin Gearing's Blog said:

Pingback from  FormShield for .NET 2.0 Released - Kevin Gearing&#39;s Blog

February 17, 2009 5:05 PM

Simon Cooper said:


i have noticed that when i use your excellent Captcha control, my JQuery scripts no longer work.

am not overly knowledgeable on the interaction that might be breaking there, any pointers?

July 21, 2009 12:13 PM

unknown said:

Hi, great work

But i continuously getting the in the how to remove it?

August 4, 2009 2:52 PM

Michael Holberton said:

Dear Kevin,

In the Code Behind for my main page I have the following:

Public Class Index

   'Inherits System.Web.UI.Page

   Inherits dotNetFreak.WebControls.FormShieldImageProvider

I did the above based on the entry, in your blog, dated August 1, 2005 2:15 PM as I have the Captcha control in a User Control. I have the following at the top of the User Control file.

<%@ Register TagPrefix="dnf" Namespace="dotNetFreak.WebControls" Assembly="dotNetFreak.WebControls.FormShield" %>

I am using ASP.Net 1.1 and VB.Net. When subsequently opening my project in VS2003, I am receiving a Type Abstract error as depicted in the image at When this happens, I can only see the HTML code for the page. In order to see the Design View I have to Comment the FormShieldImageProvider line and Uncomment the Page line, save the change, close the VB file and then reopen the Page.

I am using Version of FormShield.

Thank you!

October 7, 2009 6:26 PM

Mark said:

I noticed this only works in IIS7 in a Classic app pool. My site needs to run in Integrated mode. Is there a way to get it to work for integrated.

January 29, 2010 3:54 PM said:

Good work!!!!!

Thanks Dotnet freaks team............

June 12, 2010 10:20 AM

Tommo said:

Looks like your control is being used on Motor Insurance Bureau's ASKMID website.

It's a shame that is has been implemented so badly, that entire site it complete rubbish really, especially when you think how much money they must have to spend.

I only ended up here because the captcha control is broken on their site and I was trying so see if I could some how get it to work.

July 13, 2010 1:13 PM

Dave said:

I have enjoyed using this control for a few years now but in a new deployment, the application is in a subfolder, not the root web folder. Because of this the image is not rendered and if I click on the listen button I get a 'The resource cannot be found' error. Please advise on how to use this control in a website depoyed in a subfolder. Changing the folder to a virtual directory did not help either.

September 10, 2010 10:29 AM

türkü dinle said:

Thanks Dotnet freaks team.

October 29, 2010 9:57 PM

Danny said:


I am on the askmid website and I cant see the captcha form, it just says protected by formshield. Why is this?

I am using a mac, I have tried IE, Firefox, Safair and Chrome, Yet it says the same thing. Protected by form shield

If i go on a windows PC it works.

Why is this, Its really annoying, how can I see the captcha form?

July 29, 2011 1:18 PM

veljkoz said:

Could you please provide source codes for .NET 1.1. Your captcha is the only solution we can use for our outdated projects, and we need to handle some of the issues we have with it...

October 28, 2011 11:02 AM

Bonnington Castings [1956] said:

thank you for this tips but I tried that before, but i only got a blank column with no image or instruction for user to put in captcha before submit. still confuse what might go wrong.

December 17, 2012 2:22 PM

Leave a Comment


Protected by FormShield
Please enter the characters shown on the image


Copyright ©2004-2007 Kevin Gearing. All Rights Reserved.
Powered by Community Server (Non-Commercial Edition), by Telligent Systems