钓鱼网站通常是指伪装成银行及电子商务等网站,主要危害是窃取用户提交的银行帐号、密码等私密信息

做了一段时间的ASP.NET动态网站开发,其实也对钓鱼网站有一点点浅浅的认识。本文面向的并不是一些高手。声明一下:本文只供爱好者讨论,不允许利用本文涉及到的技术进行不法行为!既然要说“钓鱼”,那么我就以ASP.NET动态网站为例,给大家用最简单的方法讲解一下“钓鱼网站”的工作原理。

大家在登陆一个网站,比如淘宝的时候,会提示你输入用户名和密码。那么,用户登陆的工作流程是如何的呢? 我们都知道,动态网站背后有一个数据库,而数据库里面有一张表,这张表里存放着用户的登录名和密码。当我们点击“提交”按钮的时候,会发生如下几个步骤

1、网站前台与数据库连接

2、提交按钮绑定的“查询语句”,先查询用户名,如果存在,则查询密码,如果不存在,提示你“用户不存在”。

3、如果用户名存在,则进行第二次查询,这次查询的是密码,而查询条件就是用你输入的用户名。如果用户名和密码匹配则登陆成功。

其中,在提交按钮上共绑定了一条SQL 语句和一个条件判断语句,简单说来,就是:

select username[用户名] from users[用户表] where username="+[用户名输入框]+"

将这个结果保存到SqlDateReader对象dr中,如果dr里面有查询到的记录,表示此事用户名存在,则开始判断密码是否正确。

if(dr["password"]==[密码输入框])  则提示你登陆成功,否则提示你密码错误。

如果用户名和密码通过了验证,将用户名和密码信息保存在Session中,你就处于一个“已登录”的状态,同时,Response.Redirect()方法帮你进行页面跳转。

而钓鱼网站呢,它们及其善于伪装,它们把网站的前台布局和真实的网站设计得一模一样,然后再用一个和真实网站几乎相同的域名,这样,一些粗心一点的人确实是看不出来,比如小写的字母“l”和数字“1”就很难认出来,而在浏览器的使用的字体中,有时候大写的字母“O”和“0”也很难分辨。这样,钓鱼网站就达到了一个前台页面的“以假乱真”的效果了。但是,钓鱼网站上面的“提交”按钮,却是一个大大的“陷阱”,因为我们前面讲过:登陆页面的提交按钮绑定的应该是数据库的查询语句,而钓鱼网站,绑定的却是插入语句。它的按钮虽然写的是“提交”,却绑定了一条这样的语句:

insert into [钓鱼表] values([用户名输入框],[密码输入框])

这样,你点击“提交”的时候,进行的操作就不是“将你输入的内容与数据库的内容进行匹配”了,而是:将你输入的用户名和密码插入到了钓鱼网站的数据库中,而要命的是,密码虽然在前台被掩码掩饰成了密文(小黑点),在后台数据库确实明文显示的,这样,你的用户名和密码就大大的暴露在“钓鱼者”的眼前了!

有些钓鱼网站做得更加可恨,还在执行完了插入数据以后绑定了一条提示语句

Response.Write("<script>alert('祝贺你成功登陆')</script>")

用来迷惑大家。但是,钓鱼网站无法帮你实现“页面跳转”,等你按下“提交”按钮以后,你发现你的页面并没有跳转,这个时候,你的账户信息早就被“钓”到不法分子的后台数据库了。而有些人还很不信邪,以为是自己网速问题,于是一个劲的重复输入并提交,结果等你提交的时候,他们肯定早就用你的账号登陆并窃取走你的财物了。

这只是ASP.NET动态网站的一个简单案例。在我刚接触ASP.NET的时候,我就用某种方法来防过钓鱼网站,那就是,一般我登陆淘宝或者支付宝的时候,都会故意把密码错输一遍,特别是别人通过QQ发过来的登陆页面,我都会错输一遍密码,如果提示“密码错误”,那么这个网站就多半没问题了。因为钓鱼者再高明,也不会提前知道你的用户名和密码,要不然,他们还钓你干嘛呢? 但也不乏这种情况,钓鱼者绑定的语句不是提示你“成功”的语句,而是提示你“密码错误”的语句,比如他们在执行完插入命令以后,提示一条:

Response.Write("<script>alert('密码错误,请重试)</script>")

这下子足以以假乱真了!你无论怎么输密码,都是说你输入错误,结果你便一直输一直错,结果,人家早就得到你的账户信息了!确实,钓鱼者的非法脸嘴让人鄙视。

其实,淘宝和支付宝,还有阿里旺旺这些一再提示,不要相信从阿里旺旺以外的聊天平台获取淘宝页面。如今,最后一招就是“证书”,淘宝的网页现在都安装了安全证书,“你将通过安全连接”。其实,细心一点的网友都发现了,淘宝、网银这些涉及到交易的登陆页面都是安全加密了的,用的是https协议,并且都要求客户端安装证书,来达到安全。 但,这保不准贪婪无度的钓鱼者们又会想出什么破解之道呢?所以,网上交易,小心为好。