将验证码图像反垃圾邮件项目封装在复合 Web 控件中






4.19/5 (6投票s)
通过这个 Web 控件,您将能够在您的 Web 表单中防止垃圾邮件发送者(已实现验证)。
引言
这篇文章延续了在 CodeProject 上的一篇现有文章,该文章由 Brainjar 撰写。您可以在这里找到这个项目。他提出了一个很好的策略来防止 Web 表单被垃圾邮件发送者攻击。
CAPTCHA 代表“全自动区分计算机和人类的图灵测试”。它的意思是,一个程序可以通过某种生成的测试来区分人类和机器。大多数人可以轻松通过的测试,但计算机程序无法通过。
您可能在注册在线电子邮件或论坛帐户时遇到过此类测试。表单可能包含扭曲文本的图像,如上图所示,您需要将其键入到文本字段中。
目的是防止垃圾邮件发送者使用网络机器人自动发布表单数据,以创建电子邮件帐户(用于发送垃圾邮件)或提交包含垃圾邮件消息的反馈评论或留言簿条目。图像中的文本通常会被扭曲,以防止使用 OCR(光学字符识别)软件来破坏该过程。Hotmail、PayPal、Yahoo! 和许多博客网站都采用了这种技术。
目的
我想要的是一个控件,我可以用来放在我的网页上,并且这个控件应该立即阻止表单受到垃圾邮件攻击。
想法
我编写了一个 WebControl,它封装了
- 一个图像:该图像使用“CaptchaImage.axd”作为来源。 实际上,这个“页面”是一个 HTTP 处理程序,它将在响应流中返回一个图像。该图像包含“反垃圾邮件”代码,并且是使用 BrainJar 提供的
CaptchaImage
对象生成的。 - 一个文本框:用户必须在文本框中填写图像代码,以确保它不是在表单上工作的自动机器人。
- 一个 RequiredValidator:这将确保在文本框中填写了数据。
- 一个 CustomValidator:它将使用存储在会话中的反垃圾邮件代码测试文本框中的文本。
内容
如何安装
- 添加对 CaptchaImage 程序集的引用。
- 在 web.config 文件中,您需要在
/configuration/system.web
中添加两行 - 在
./HttpHandler
部分中,添加对返回生成的CaptchaImage
的处理程序的引用。 - 在
./controls
部分中,添加包含有趣的 Web 控件的 Captcha 图像程序集的标签引用。 - 好吧……它几乎完成了。现在,让我们开始使用它。
<httpHandlers>
<add verb="GET" path="CaptchaImage.axd"
type="CaptchaImage.CaptchaImageHttpHandler"/>
</httpHandlers>
<controls>
<add tagPrefix="Captcha" namespace="CaptchaImage" assembly="CaptchaImage"/>
</controls>
如何使用
- 创建您的表单以防止垃圾邮件。
- 拖放已出现在您的工具栏中的 Web 控件,或者添加此标签
- 在您的提交按钮上指定一个
ValidationGroup
,并为验证码控件的ValidationGroup
属性赋予相同的名称。 - 另一个可能感兴趣的属性是“
MessageError
”。这将设置一个错误消息,您可以通过验证摘要(如示例项目)获得该消息。 - 该标签现在应该有这种外观
- 要做的最后一步是在您的提交按钮的
OnClick
事件中添加一个测试。
<Captcha:CaptchaControl runat="server" ID="captcha" />
ValidationGroup="Contact"
MessageError="An error has occured at validation of anti-spam code.
<br/> Pleade check it in again."
<Captcha:CaptchaControl runat="server" ID="captcha" ValidationGroup="Contact" MessageError="An error has occured at validation of anti-spam code. <br/> Pleade check it in again." />
protected void SubmitButton_Click(object sender, EventArgs e)
{
if (Page.IsValid) { //TO DO }
}
要求
了解
- ASP.NET 提供的验证器策略
- Web 控件
- HttpHandler
结论
HttpHandlers 对我来说是一个相当新的逻辑,我选择这项技术主要是为了后台工作,而不是构建一个网页。可能它不是为此目的而设计的...可能它是...但我认为在做自动化工作时这样工作更合乎逻辑。
CaptchaImage 是一个构建良好的项目,使用它是一种荣幸。
向以下人员问好
BrainJar: https://codeproject.org.cn/aspnet/CaptchaImage.asp。
以及在网络上提供的每一个来源。
抱歉... 像往常一样,我的英语不好 ;)