![]() |
|
如何使Web更安全
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
广告招租,e-mail:yesize@hotmail.com 在某种程度上我们可以说,没有Web,就没有Internet。可是在大部分情况下,Web应用程序及 Web站点往往易遭受到各种各样的攻击,Web数据在网络传输过程中也很容易被窃取或盗用。因此如何能够使Web及数据传输更加安全,是一个应该引起广泛注意地问题。 从总体情况来看,保护Web站点免受攻击的最重要的措施就是加强安全意识和提高安全防范措施。 一般情况下,攻击者攻击Web的主要目的在于: 1、非法偷窥; 一、 非法偷窥 阻止Web攻击者监听行为的最有效方法就是要对Web站点和访问者之间所建立的连接进行有效加密。几乎所有的Web浏览器和服务器都具备发送和接收加密通道上的数据的能力,这些加密数据被SSL和TLS这两个相关的协议管理。其中SSL由Netscape产生,TLS与SSL3.0兼容。图1是微软公司的IE5.0浏览器软件中的Internet选项,它显示了有关安全问题的协议。
Web浏览器在连接一般的WEB站点通常使用的是HTTP(超文本传输协议),地址栏中URL一般形式为 http://www.somewhere.com。而当Web浏览器连接到一个安全站点时,浏览器将使用HTTPS (超文本安全传输协议)来建立一个加密连接,地址栏中的URL通常的形式为https://www.somewhere.com
浏览器和服务器的通讯使用对称加密。这就意味着使用相同的密钥来进行加密和解密。当服务器的证书被证实后,浏览器将产生一个密钥,这个密钥需要通过一个安全的途径传递给服务器。一般使用双重加密术来完成密钥的传递。浏览器使用服务器的公钥来加密密钥,然后把它传递给服务器。服务器使用它的私钥来解密密钥然后向浏览器发送确认。 上面的过程表明的就是一个加密连接,浏览器和服务器都拥有相同的密钥,他们使用相同的加密算法。他们后面的通信将使用这个加密的连接。浏览器显示一个黄色的锁的图标表示连接已建立。如图3所示,站点访问者可以点击黄色的图标来检查服务器的证书,从而核实服务器的身份。 建立一个加密连接,仅需要服务器获得权威机构(如VeriSign)颁发的证书。但是加密仅能阻止攻击者看到站点发送 二、伪装成Web站点的合法访问者 现在我们已经知道如何鉴别一个Web站点,但是一个站点如何鉴别它的访问者呢?下面我们就接着讨论这个问题。 大部分Web服务器支持两个密码鉴别方案:基本密码鉴别和分类密码鉴别。两个方案都通过向浏览器发送鉴别信号来进 如果你用Web服务器上的简单设置来实现这些鉴定方案,Web应用程序中不需要添加任何代码。 攻击者的监听问题:如果访问者以简单的文本形式发送他的用户名和密码,攻击者很容易就可捕获到这些信息。传送
解决这个问题的方法就是访问者在注册帐号时要使用安全的密码。Web站点最好具有能阻止访问者设置英文单词作为密 三、伪装成Web站点管理员 当访问者登录到你的站点时,你将会保持他们的身份一直有效,直到他们离开该站点。那么如何实现这个功能呢?因 用户登录成功后服务器是如何证实该用户的身份呢? 答案是浏览器保存了用户的姓名和密码。当浏览器和服务器再次连接时,浏览器将传递已经存储过的用户名和密码。 前面我们提到过,浏览器通过比较带有服务器的数字证书的公有名字的URL来证实服务器的身份。这是一个很好的Web 域名服务系统(DNS)可把易读的网址(例如www.yourunit.com)解析为IP地址,在你的安全链接中它是一个易遭受攻 如果攻击者得到VeriSign为www.attacker.com颁发的数字证书,那么访问者的浏览器将和www.attacker.com建立合法 四、试图控制Web站点主机 一些攻击利用web服务器上运行的软件的漏洞来让服务器执行攻击者的代码。一类臭名昭著的攻击方法就是向缓存写入大量的数据从而使缓存器崩溃。下面所摘录的一段C++代码就很容易受到这样的攻击,因为它没有边界检查。 void ByYourCommand( char* pszData ) 如果执行strcpy()过程使堆栈溢出,将会产生什么结果呢?图4向你展示了系统堆栈溢出后的情况。如果攻击者在缓存中写入了太多的数据,它将覆盖函数调用记录。这是一个数据结构,它包含了保存函数入口代码的寄存器,还有函数的返回地址。如果攻击者的代码覆盖了函数的返回地址,攻击者就可以在你的计算机上执行任何代码。
攻击者是如何把他的攻击代码移植到你的电脑上的呢?他使用的方法就是把代码写进数据缓存,传递这个例子函数的字符串很容易感染上“特洛伊木马”这样的黑客程序。有许多文章已经介绍过这类的攻击方式。 黑客知道易攻击的函数(例如上面所举的函数例子)通常易被回应用户输入的代码所调用。攻击者发送一个不可能的长字符串给服务器。如果缓存溢出,处理他的请求的线程将崩溃。攻击者得到HTTP超时的消息提示就表明请求线程已被破坏。 如何阻止你Web站点的应用程序被利用呢?首先,给系统软件添加最新的安全补丁。然后,检查使用允许直接访问内存的语言(例如:C、C++和Delphi)编写的程序代码,看是否有安全漏洞。 检查代码可以给你无尽的信心,因为你可以发现一个应用程序并不是很容易就受到缓存溢出这样的攻击的。如果你要完全避免这样的问题,只能不使用直接访问内存的语言来编写代码。你可以使用一些脚本语言(例如:JavaScript、Perl)或使用解释性的语言(例如Java)。如果使用安全的语言来编写代码,Web站点的操作员就可以被解放出来,不用天天担心缓存溢出这样的安全攻击。 另外,你也不要盲目地相信各种安全技术,厂商虽然为了推销自己的产品而做出了很好的安全质量承诺,但是你要知道没有任何技术能够保证你的Web不遭受攻击。所以你需要一定的时间和精力去研究和发现Web的缺点,然后找出解决问题的方法。 Web的安全性问题非常复杂,范围很广,在本文中,我们只是从外部的攻击角度出发,讨论了如何避免Web应用程序和Web数据遭到破坏和窃取,来防止非法用户对Web应用程序的越权访问,提高Web站点的安全性。
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||