65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.19/5 (6投票s)

2006年11月18日

CPOL

3分钟阅读

viewsIcon

85097

downloadIcon

799

通过这个 Web 控件,您将能够在您的 Web 表单中防止垃圾邮件发送者(已实现验证)。

Sample Image - CaptchaImageControl.jpg

引言

这篇文章延续了在 CodeProject 上的一篇现有文章,该文章由 Brainjar 撰写。您可以在这里找到这个项目。他提出了一个很好的策略来防止 Web 表单被垃圾邮件发送者攻击。

CAPTCHA 代表“全自动区分计算机和人类的图灵测试”。它的意思是,一个程序可以通过某种生成的测试来区分人类和机器。大多数人可以轻松通过的测试,但计算机程序无法通过。

您可能在注册在线电子邮件或论坛帐户时遇到过此类测试。表单可能包含扭曲文本的图像,如上图所示,您需要将其键入到文本字段中。

目的是防止垃圾邮件发送者使用网络机器人自动发布表单数据,以创建电子邮件帐户(用于发送垃圾邮件)或提交包含垃圾邮件消息的反馈评论或留言簿条目。图像中的文本通常会被扭曲,以防止使用 OCR(光学字符识别)软件来破坏该过程。Hotmail、PayPal、Yahoo! 和许多博客网站都采用了这种技术。

目的

我想要的是一个控件,我可以用来放在我的网页上,并且这个控件应该立即阻止表单受到垃圾邮件攻击。

想法

我编写了一个 WebControl,它封装了

  • 一个图像:该图像使用“CaptchaImage.axd”作为来源。 实际上,这个“页面”是一个 HTTP 处理程序,它将在响应流中返回一个图像。该图像包含“反垃圾邮件”代码,并且是使用 BrainJar 提供的 CaptchaImage 对象生成的。
  • 一个文本框:用户必须在文本框中填写图像代码,以确保它不是在表单上工作的自动机器人。
  • 一个 RequiredValidator:这将确保在文本框中填写了数据。
  • 一个 CustomValidator:它将使用存储在会话中的反垃圾邮件代码测试文本框中的文本。

内容

Design of CaptchaImageControl usage

如何安装

  1. 添加对 CaptchaImage 程序集的引用。
  2. web.config 文件中,您需要在 /configuration/system.web 中添加两行
    1. ./HttpHandler 部分中,添加对返回生成的 CaptchaImage 的处理程序的引用。
    2. <httpHandlers>
        <add verb="GET" path="CaptchaImage.axd" 
            type="CaptchaImage.CaptchaImageHttpHandler"/>
      </httpHandlers>
    3. ./controls 部分中,添加包含有趣的 Web 控件的 Captcha 图像程序集的标签引用。
    4. <controls>
      <add tagPrefix="Captcha" namespace="CaptchaImage" assembly="CaptchaImage"/>
      </controls>
  3. 好吧……它几乎完成了。现在,让我们开始使用它。

如何使用

  1. 创建您的表单以防止垃圾邮件。
  2. 拖放已出现在您的工具栏中的 Web 控件,或者添加此标签
  3. <Captcha:CaptchaControl runat="server" ID="captcha" />
  4. 在您的提交按钮上指定一个 ValidationGroup,并为验证码控件的 ValidationGroup 属性赋予相同的名称。
  5. ValidationGroup="Contact"
  6. 另一个可能感兴趣的属性是“MessageError”。这将设置一个错误消息,您可以通过验证摘要(如示例项目)获得该消息。
  7. MessageError="An error has occured at validation of anti-spam code.
                  <br/> Pleade check it in again."
  8. 该标签现在应该有这种外观
  9. <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." />
  10. 要做的最后一步是在您的提交按钮的 OnClick 事件中添加一个测试。
  11. 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

以及在网络上提供的每一个来源。

抱歉... 像往常一样,我的英语不好 ;)

© . All rights reserved.