NoSpamEmailHyperlink: 1.设计

分享于 

14分钟阅读

Web开发

  繁體

A DataGrid incorporating the NoSpamEmailHyperlink and a snapshot of the generated HTML

简介

这是一系列六篇文章中的第一个,遵循完整功能的ASP.NET 自定义控件的设计。开发和实际使用。

完整的文章列表如下:

这些文章不是对自定义控制开发( 有 700页的网页书几乎没有覆盖它)的全面看法,但它们覆盖了很多基本的基础。

目的是在一个完全可以重用和可以自定义的控制( 与许多虚构的例子相反) 上进行这样的操作。

本文的这一部分简单地定义了 NoSpamEmailHyperlink的用途。 它是为那些想要使用控制"就像看到"的人,已经知道如何在网页中包含自定义控件了。

它还作为对其他文章的一般介绍,避免不必要的重复。

设计 NoSpamEmailHyperlink

如果你希望你的网站能够被搜索引擎识别,你需要获得它的他可以识别网站的链接。

不幸的是,一旦搜索引擎蜘蛛可以找到你的网站,你就会开启自己的"。电子邮件挖掘器"。 这是类似于搜索引擎使用的蜘蛛软件,除了他们寻找电子邮件地址和用电子邮件的垃圾邮件。

如果你的站点的源代码中有任何电子邮件地址,特别是( 但不一定) href=mailto: 类型链接,这些地址很有可能稍后开始从任意数量的服务器接收垃圾邮件邮件。

请注意,spider软件不能通过直接查看源代码来工作。 在服务器上构建电子邮件地址不会保护你的用户。 Spider软件通过发送HTTP请求和扫描响应来工作。 这将导致服务器在返回之前处理数据,并且任何电子邮件地址都将是它的中的一部分。 记住:蜘蛛会看到浏览器所看到的,不能避免。

情况is了。 大多数垃圾邮件服务器都是不安全和无人值守的,使它们受到电子邮件病毒的攻击,比如最近的SoBig.F,它还可以从通讯录中获取电子邮件地址,。 SoBig.F 似乎使用这些地址来伪装自己的头,但理论上,这些地址可以返回服务器。 它可能已经发生了,它一定会很快发生。

通过不隐藏用户的电子邮件地址,你不仅会邀请垃圾邮件。

电子邮件垃圾邮件和邮件获取不断增加问题,没有简单的方法可以让垃圾邮件发送者。 问题在于大众邮件赚钱,任何人都能做到。 降低利润的唯一方法是降低利润。

你的网站越成功,你注册的人越多,邮件垃圾邮件的感兴趣的邮件就越多。 不显示或者运行时间建筑电子邮件地址将保护你的用户,但是电子邮件收取器将继续。

如果我们可以在保持电子邮件地址有效的同时对它的进行编码? 这将导致邮件收集器获取伪造的电子邮件地址,这对他们的业务非常有害。 只有更昂贵的电子邮件收集器才能验证电子邮件地址( 比如。 通过LDAP服务器以及验证它。

没有人会支付邮件垃圾邮件垃圾邮件大量的资金广告他们的网站没有人。 如果我们让垃圾信息收集者收集的信息不那么有用,那么它就。 只有这样才能阻止邮件挖掘者使用我们的网站来收集他们的目标地址列表。

JavaScript武器

对于网络开发者来说,幸运的是,市场上还没有一个声称能够将JavaScript应用到HTML来发现隐藏的电子邮件地址的。 当某人进行写作时,它几乎会过于昂贵,因这里会降低邮件垃圾邮件的利润率。

例如以下简单脚本已经在收集器的电子邮件地址上得到了非常成功的证明:

<script language="JavaScript"><!--var name = "pdriley";var domain = "santt.com";
document.write('<a href="mailto:' + name + '@' + domain + '">');
document.write(name + '@' + domain + '</a>');// --></script>

正如前面提到的,在电子邮件收取器中没有必要翻译这个地址,他们只是移到下一个站点。 换句话说,它有效地保护了使用它的站点的成员,但是对于电子邮件收获来说不是有效的。

这说明,在页面加载时,使用JavaScript将看起来有效的电子邮件地址转换成真实的电子邮件地址。 如果你可以处理服务器上的电子邮件地址,然后在客户机上反转进程,你应该能够有效地操作。

有效的电子邮件地址

电子邮件地址必须是user@domain格式。

用户可能包含字母数字字符,句点,下划线,破折号和( 很少) 空格的任意组合,根据 W3C。 但是,它必须以字母数字字符开始和结束,并且不允许连续的句点。

域遵循相同的规则,但必须包含至少一个周期,之后所有内容都必须在给定的可以接受扩展的集合中,例如. co. uk。

若要混淆电子邮件地址并保持有效,可以在域中任何它的他字母数字字符之前交换任何字母。

只要保留标点( 非字母数字) 字符的位置和域扩展的格式,就可以确保地址不会变得无效。

注意:这些都不会导致实现验证的几个昂贵的电子邮件收获软件,但是这个地址不会被验证。 它很可能永远不会被解码。

Netscape: 早期版本的Netscape ( 4.x 和更早版本) 将不允许你更新 innerHTML 链接对象的属性。 因此,必须在控件的文本文本中对电子邮件地址进行"隐藏"处理,而不是对它的进行编码。

编码算法

在最简单的形式中,可以通过增加每个字母数字字符代码( 比如 ) 来编码电子邮件地址。 pdriley@santt.com 变成 qesjmfz@tbouu.com). 这是一种简单的"替换加密"形式,但并不特别有趣。 如果每个人都使用它并且要求. NET.的功率很少,那么它很容易解码。

为什么不使用伪随机字母数字生成序列,包括所有encodable字符一次? 例如给定下面的基本代码键:

yJzdeB4CcDnmEFbZtvuHlI1hA8SiLo9MwfN3O6Y5QaRqKTjUpxVk2WgXrP7Gs0

pdriley@santt.com ( 将每个字符右移一个字符) 将成为 xePLIBJ@0Rmvv.com.

这是历史中使用过的许多代码的基础。 编码器和解码器保存相同字符序列的副本。 一个将一组规则应用于他发送的文本,另一个则反转解码消息的规则。

不幸的是,在实际上,这不能像历史编码算法那样安全,因为解码器还没有解码序列的副本。 我们必须将解码的密钥附加到编码文本中,以及那些规则。

第三方可以使用这些信息解码我们的信息,但是他们需要先查找我们使用的规则。 寻找信息不太可以能,因为我们提供了有效但伪随机生成的电子邮件地址。 幸运的是,我们编码的消息( 浏览器)的接收者很好地理解古亚拉亚语( JavaScript ),并能够遵循我们的规则。

当预定的收件人知道所提供的数据解码的规则时,读取编码器所写的不存在问题。 但是我们应该稍微复杂一些规则,以进一步混淆任何第三方可能会看到的。

我们可以改变距离和 direction,而不是总是在伪字母表上单步执行一个空格。

: )

字符 0: 上移 6

字符 1: 下移 5

字符 2: 上移 4

字符 3: 下移 3

字符 4: 上移 2

等等。

我们还可以从页面上的每个地址开始一个不同的种子(。上面 示例中的6 ),这样一个地址就不一定会同样。

我们甚至可以轻松地替换 上面 序列中的变化速率,只是使用我们通过电子邮件地址移动的索引器。

: )

从种子 23开始

字符 0: 上移 23

种子= 种子- 0 = 23

字符 1: 下移 23

种子= 种子+ 1 = 24

字符 2: 上移 24

种子= 种子- 2 = 22

字符 3: 下移 22

种子= 种子+ 3 = 25

字符 4: 上移 25

等等。

如果种子键为 23,现在 pdriley@santt.com的种子将编码为 8 SNk0oR@Ah60K.com. 甚至是 given,这需要花几分钟手工解码。 如果第三方丢失了这些信息的一部分( 或者对我们所应用的规则有任何了解),那么他们就很少希望。

如果你不相信,请尝试使用 上面 基本编码字符串尝试这里编码的电子邮件地址,而不使用种子: TWL0rxwrm@0pPAaZh40ME.com. 提示:我希望最终有人会使用受教育的猜测和验证。

这是 NoSpamEmailHyperlink 所合并的算法。

可见地址

除了扫描超链接外 href 大部分邮件挖掘器都会从一般文本中选取一个地址。 如果它在user@domain的格式里看到任何东西harvester软件会把它拿出来。

例如你的电子邮件超链接应该如下所示:

<ahref="mailto:pdriley@santt.com>
 Paul Riley (pdriley@santt.com)
</a>

对一个电子邮件地址进行编码并不编码其他地址是没有作用的。 我们的防垃圾邮件控制应该足够多用于隐藏HTML主体中的两个地址,并在页面加载时调整。

NoSpamEmailHyperlink 能够检测到电子邮件地址出现在可以见文本中并替换它,尽管这个功能是可选的。

自定义

如果 NoSpamEmailHyperlink 变得非常流行,它开始引起垃圾邮件业务的严重损坏,很遗憾地开始检测控件。

控件的工作方式在不同站点上出现时具有一定的变化是很重要的。

为了避免同一控件的许多不同版本,如果需要重复代码,那么开发人员就可以 inherit。

NoSpamEmailHyperlink 允许继承者重写代码密钥以及用于JavaScript中的密钥变量的许多名称,以避免简单的检测技术。 它还允许继承者重写编码/解码功能并创建一个全新的控件,无需重新编码电子邮件超链接的基本功能。

专业外观

因为 NoSpamEmailHyperlink 没有成本,所以没有理由避免适当的设计时间功能。 实现好的设计时间特性给我们一个很好的机会,可以看到. NET 框架的最少文档化和最强大的特性。

NoSpamEmailHyperlink 使用各种自定义类和属性来确保它能从 Visual Studio. NET 工具箱正常工作,即使在"空白"或者数据绑定到一个 DataList 或者 DataGrid 中也总是出现在任何所见即所得的页面设计器中。

结束语

只需将一个 NoSpamEmailHyperlink 放入网页,看看你的用户的电子邮件地址,而不是从它的他用户那里。

下载并查看用于理解控件内部工作的代码,或者帮助你遵循后续文章并开发自己的自定义控件。

要自定义控件,使用提供的DLL并从 NoSpamEmailHyperlink 派生,以继承( 包括设计时间外观)的许多常用功能,并允许将来容易地进行修补。

web应用程序必须可以访问 DLL,因此必须安装在应用程序的/bin 文件夹中,或者安装在 [Windows]Microsoft.NETFramework.的版本化子文件夹中。

如果你的站点是托管的,并且你没有控制服务器,建议你在这样的公共文件夹中安装 DLL。 这对于他们来说比多用户在应用程序中安装DLL更有效,并鼓励对to的垃圾邮件进行冲突。

修订历史

  • 1.0 12 -Oct-2003 - 已经创建。
  • 1.1 23 -Oct-2003 - 在部分"可见地址"中添加了关于Netscape的注释。

DES  设计  
相关文章