安大互联
财经热点 > Asp编程 > 如何使Web更安全
如何使Web更安全
浏览次数:【389】  发布日期:2009-8-13 12:09:22    文章分类:Asp编程   
专题:】 【
 
在某种水平上我们可以说,没有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];
strcpy( szBuffer, pszData ); ...}

  如果执行strcpy()过程使堆栈溢出,将会发生什么结果呢?图4向你展示了系统堆栈溢出后的情景。如果攻击者在缓存中写入了太多的数据,它将覆盖函数调用记录。这是一个数据结构,它包含了保存函数入口代码的寄存器,还有函数的返回地址。如果攻击者的代码覆盖了函数的返回地址,攻击者就可以在你的计算机上执行任何代码。


图4 通过使缓存溢出,攻击者把攻击代码加载到内存,
取代函数的返回地址,从而执行攻击代码

  攻击者是怎样把他的攻击代码移植到你的电脑上的呢?他使用的要领就是把代码写进数据缓存,传递这个案例函数的字符串很容易感染上“特洛伊木马”这样的黑客程序。有许多文章已经介绍过该类的攻击方式。

  黑客知道易攻击的函数(例如上面所举的函数例子)通常易被回应用户输入的代码所调用。攻击者发送一个不会的长字符串给服务器。如果缓存溢出,处理他的要求的线程将溃散。攻击者得到HTTP超时的消息提示就表明请求线程已经被破坏。

  如何阻止你Web站点的应用程序被利用呢?首先,给系统软件添加最新的安全补丁。然后,检查使用允许直接访问内存的语言(好比:C、C++和Delphi)编写的程序代码,看是否有安全漏洞。

  检查代码可以给你无尽的信心,因为你可以发现一个应用程序其实其实不是很容易就受到缓存溢出这样的攻击的。假如你要完全避免这样的问题,只能不使用直接访问内存的语言来编写代码。你可以使用一些脚本语言(好比:JavaScript、Perl)或使用解释性的语言(例如Java)。如果使用安全的语言来编写代码,Web站点的操作员就可以被解放出来,不用天天担忧缓存溢出这样的安全攻击。

  另外,你也不要盲目地相信各种安全技术,厂商虽然为了推销自己的产品而做出了很好的安全质量承诺,可是你要知道没有任何技术能够保证你的Web不遭受攻击。所以你需要一定的时间和精力去研究和发现Web的缺点,然后找出处理问题的要领。

  Web的安全性问题非常复杂,范围很广,在本文中,我们只是从外部的攻击角度动身,讨论了如何避免Web应用程序和Web数据遭到破坏和窃取,来防止非法用户对Web应用程序的越权访问,提高Web站点的安全性。


手机扫码浏览该文章
 ● 相关资讯专题
  • 网络建设业务咨询

   TEl:13626712526