使用ASP.NET AJAX Control Toolkit中的NoBot控件拒绝垃圾发布程序 【转载】
该文转载自 http://www.cnblogs.com/dflying/archive/2007/03/16/676886.html
NoBot控件可以通过如下四种方式较为准确地判断出进行当前操作的是否为人类:
- 让客户端浏览器执行一段JavaScript,并判断其执行结果。机器人程序一般只是取得HTTP流的内容,对其分析并填写其中表单之后即提交,这个过程中并不包含对浏览器功能的使用,也就更不会解析并运行页面中的JavaScript得到正确的运行结果。且这段JavaScript既可以是一段简单的纯数学运算,例如123*4455=?,也可以是一些非常复杂的DOM操作,例如动态创建一个<div>,并返回它的位置等。这样即强迫该程序只能够在浏览器中使用,大多数机器人程序显然对此等计算无力回天。
- 判断客户端是否保存了本次会话状态。一般来讲,只有浏览器才会对会话状态进行关注并保存,而简单的机器人程序则会完全忽略会话状态信息。
- 判断客户端从开始接受页面到提交表单的时间间隔。机器人程序都比较讲究“效率”,加上计算机的强大运算能力,几乎可以在接收到页面之后的瞬间就完成表单的填写并提交回服务器。而对于人类,显然不可能在如此短暂的几秒钟时间之内就完成这样复杂的一张表单。
- 判断某段时间之内某个客户端的提交次数。同样,对于人类来说,没有能力也没有意义在比如一分钟之内填写同样的表单100次,而对于机器人程序,则这很有可能是它们的一贯作风。