日期:2012-02-15  浏览次数:21040 次

在某种程度上我们可以说,没有Web,就没有Internet。可是在大部分情况下,Web应用程序及 Web站点往往易遭受到各种各样的攻击,Web数据在网络传输过程中也很容易被窃取或盗用。因此如何能够使Web及数据传输更加安全,是一个应该引起广泛注意地问题。

  从总体情况来看,保护Web站点免受攻击的最重要的措施就是加强安全意识和提高安全防范措施。

  一般情况下,攻击者攻击Web的主要目的在于:

1、非法偷窥;
2、伪装成Web站点的合法访问者;
3、伪装成Web站点管理员;
4、试图控制Web站点主机。

一、 非法偷窥

  阻止Web攻击者监听行为的最有效方法就是要对Web站点和访问者之间所建立的连接进行有效加密。几乎所有的Web浏览器和服务器都具备发送和接收加密通道上的数据的能力,这些加密数据被SSL和TLS这两个相关的协议管理。其中SSL由Netscape产生,TLS与SSL3.0兼容。图1是微软公司的IE5.0浏览器软件中的Internet选项,它显示了有关安全问题的协议。


图1 IE5.0支持的各种加密协议

  Web浏览器在连接一般的WEB站点通常使用的是HTTP(超文本传输协议),地址栏中URL一般形式为 http://www.somewhere.com。而当Web浏览器连接到一个安全站点时,浏览器将使用HTTPS (超文本安全传输协议)来建立一个加密连接,地址栏中的URL通常的形式为https://www.somewhere.com


   为了建立一个安全连接,Web浏览器需要首先向Web服务器请求数字证书,数字证书提供了身份证明。浏览器在向Web服务器请求它的数字证书时,也同时发送了它所支持的加密算法列表。当服务器回送数字证书和它所选择的加密算法后,浏览器通过检查数字签名和确认URL是否与数字证明的公有名字域相匹配来验证数字证书。如过这些测试失败,浏览器将显示警告信息。如图2所示。


图2 Web服务器对HTTPS的鉴定

  浏览器和服务器的通讯使用对称加密。这就意味着使用相同的密钥来进行加密和解密。当服务器的证书被证实后,浏览器将产生一个密钥,这个密钥需要通过一个安全的途径传递给服务器。一般使用双重加密术来完成密钥的传递。浏览器使用服务器的公钥来加密密钥,然后把它传递给服务器。服务器使用它的私钥来解密密钥然后向浏览器发送确认。

  上面的过程表明的就是一个加密连接,浏览器和服务器都拥有相同的密钥,他们使用相同的加密算法。他们后面的通信将使用这个加密的连接。浏览器显示一个黄色的锁的图标表示连接已建立。如图3所示,站点访问者可以点击黄色的图标来检查服务器的证书,从而核实服务器的身份。

  建立一个加密连接,仅需要服务器获得权威机构(如VeriSign)颁发的证书。但是加密仅能阻止攻击者看到站点发送
和接收的数据,它并不能阻止攻击者伪造身份和对站点进行的恶意攻击。

二、伪装成Web站点的合法访问者

  现在我们已经知道如何鉴别一个Web站点,但是一个站点如何鉴别它的访问者呢?下面我们就接着讨论这个问题。

  大部分Web服务器支持两个密码鉴别方案:基本密码鉴别和分类密码鉴别。两个方案都通过向浏览器发送鉴别信号来进
行。当浏览器第一次收到鉴别信号时,它显示一个对话框询问用户的名字和密码。在基本鉴别模式中,浏览器以简单的文
本形式来传递用户名和密码。在分类鉴别模式中,浏览器传送用户名和密码的消息类。如果服务器发送它的证实,浏览器
就把登录信息存储起来。

  如果你用Web服务器上的简单设置来实现这些鉴定方案,Web应用程序中不需要添加任何代码。

  攻击者的监听问题:如果访问者以简单的文本形式发送他的用户名和密码,攻击者很容易就可捕获到这些信息。传送
用户信息使用SSL可以很容易地解决这个问题。如下面的例子所示。


User ID: < input type="text" name="user" >
Password: < input type="password" name="password">


   如果攻击者不能监听Web站点和访问者之间的通信,他将要采取更加卑劣的手段——伪装成你的合法访问者。造成这种
情况出现的原因一般是访问者自己造成的,因为大部分网络用户在密码选取上不是很留心,他们的密码一般都不是很安
全。他们在登录各个站点时,喜欢使用相同的用户名和密码。

  解决这个问题的方法就是访问者在注册帐号时要使用安全的密码。Web站点最好具有能阻止访问者设置英文单词作为密
码的功能,它可以建议用户使用数字和字母混合而成的密码。

三、伪装成Web站点管理员

  当访问者登录到你的站点时,你将会保持他们的身份一直有效,直到他们离开该站点。那么如何实现这个功能呢?因
为在浏览器和服务器之间不会建立一个永久的连接,所以服务器会在收到每个页面请求后只建立一个单独的连接。

  用户登录成功后服务器是如何证实该用户的身份呢?

  答案是浏览器保存了用户的姓名和密码。当浏览器和服务器再次连接时,浏览器将传递已经存储过的用户名和密码。
服务器利用用户数据库来证实这些信息,并会在此基础上作出允许和拒绝访问的决定。

  前面我们提到过,浏览器通过比较带有服务器的数字证书的公有名字的URL来证实服务器的身份。这是一个很好的Web
安全防范措施。但是它不能避免所有的伪装服务器的攻击。

  域名服务系统(DNS)可把易读的网址(例如www.yourunit.com)解析为IP地址,在你的安全链接中它是一个易遭受攻
击的链接。如果攻击者访问了一个DNS服务器,并且修改了指向他的机器的记录,那么这个机器就可以把所有来自
www.yourunit.com站点的请求全部重定向到www.attacker.com.。在重定向中,访问者的浏览器将显示默认的地址后缀。如
果字符串很长,使www.attacker.com不在视野之内,大部分访问者都不会注意到。

  如果攻击者得到VeriSign为www.attacker.com颁发的数字证书,那么访问者的浏览器将和www.attacker.com建立合法
的连接。如果访问者不检查数字证书,他不会知道自己在一个黑客站点上。如果攻击者把他的站点伪装成为和
www.attacker.com的登录界面一样的话,他就能捕获到该客户的银行信用卡帐号。

四、试图控制Web站点主机

  一些攻击利用web服务器上运行的软件的漏洞来让服务器执行攻击者的代码。一类臭名昭著的攻击方法就是向缓存写入大量的数据从而使缓存器崩溃。下面所摘录的一段C++代码就很容易受到这样的攻击,因为它没有边界检查。

void ByYourCommand( char* pszData )
{ char szBuffer[ 255];