文档库 最新最全的文档下载
当前位置:文档库 › web站点安全全攻略

web站点安全全攻略

web站点安全全攻略
web站点安全全攻略

网站安全全攻略(转自china-pub)

几乎所有的公司、大多数政府部门和许多个人都拥有自己的Web 站点。通过Internet访问他们的人次迅速增长,人们也热衷于深入发掘与再利用这些注意力资源,于是电子商务、虚拟社区等等应用相续开发出来。不过这些服务的实现复杂度越来越高,有关的弱点和漏洞也越积越多。遗憾的是人们对它的重视还不够,所做的工作远远应付不了突发事件。

基于Web的攻击,只需要一个浏览器和一个创造性的头脑,然而收获却丰盛的多。小则把网页涂改的面目全非,使对方脸面尽失;大则盗取或更改机密数据,导致服务器无法正常工作。更为严重的,黑客占领服务器后,还能以此为基地对内联网做进一步的破坏。那么如何遏制黑客的猖獗活动,全面提高一个网站的安全性呢?下面我们从网站的整体性出发,就Web所面临的种种安全问题,做个概要性说明并提供一点解决方案。

一、操作系统平台的安全

操作系统唯一的对所有资源进行调度控制,负责协调其他软件的正常运行。Web服务同样是建立在具体的操作系统之上的。

我们要加强Web安全,必须打好这个基础,提高系统平台的安全性。针对不同的系统有不同的安全策略和侧重点,总的来说,我们可以从以下方面入手。

1.用户密码口令字的保护

防范入侵者的前线就是口令系统。加强保密字的安全能够解决目前因特网上一半的安全问题。对于操作系统,我们可以强制用户使用健壮的口令以防范字典攻击;限制登陆次数以防止暴力破解口令攻击;另外强制用户定期更换保密字,并建议他们在不同的系统上使用不同的口令以预防万一不测。

对保密字文件的保护一般都使用单向加密技术,即系统仅存储用户口令的加密形式。当用户输入口令时,系统把它加密,再与存储值比较。在实践中系统通常进行单向转化(不可逆),它通过一个加密函数把口令变换成固定长度的密钥。另外还要把口令文件的访问权限制在一个或很少几个帐号中,以防止不必要的麻烦。

2.优化系统,关闭冗余服务

机器可能在未作为正式Web服务器时,为了其他目开设了一些服务,也有可能为了维护,开设了一些不安全的服务。例如有些公司常常为了收集订单而临时提供POP3服务,或者为了上载新页面提供FTP服务。由于安全意识不强,这种偶尔的开放服务很

容易出事。

关闭不必要的服务不但可以减轻系统负担,也能减少黑客入侵途径,而且也免除了由冗余服务引起的系统不稳定。最简单的做法就是修改网络配置文件,将来自外部的TCP连接限制到最少数量的端口。对于应用软件,如果没必要留在服务器上最好删除,即使安装了不运行也无法消除它潜在的危险。

另外对于Linux系统,我们还可以进行特别的定制,如优化内核、删除某些会导致安全问题的特性,或者增加一些新的功能,以达到最佳效果。如果没有修补程序,也可以手动排除。当然这样的改进需要系统管理员具有丰富的经验和相当的技巧。对于其他操作系统,我们也能做一些特定的安全防护和必要的加固处理。例如收回文件存取权、优化注册文件、设置CMOS密码等等。

3.布置陷阱,以逸待劳

所谓陷阱就是激活时能够触发报警事件的软件。通过设置陷阱程序,一旦出现入侵事件系统可以很快发出报警。一般在许多大的网站都设计有专门的陷阱程序,以把攻击活动引向管理者可以操纵的方向。设置陷阱一种常用方法就是故意表现系统脆弱性的一面,例如声称系统使用了具有许多脆弱性的服务器版本、设置有安全隐患的脚本、提供一些网络资源或用户密码等等。当入侵者对它进行大容量端口扫描时就会落入陷阱并激发报警系统。

二、网络传输协议的安全

因特网的组织方式是要每个站点都为自身的安全负责。如果黑客占领了一个用于通信的关键地点,那么用户发出的所有数据都可能被黑客窃听甚至修改。而HTTP作为一个通用、无状态的协议,在保障Web 服务器和客户的安全方面显得力不从心。即使技术再高超的管理员对于利用协议漏洞进行的攻击,也会束手无策,目前Web通信流的安全解决方案有:

1.直接扩展到S-HTTP协议

S-HTTP(安全超文本传输协议)是包含安全特性的HTTP的改进版本,它为客户浏览器提供消息认证代码来验证Web消息的完整性。为了支持不同的Web 应用,EIT 设计了不同的安全措施。S-HTTP用来确保消息安全的方法有:数字签证、加密、信息发送和认证检查。

2.在网络层使用IP Security实现

IPSec 在数据报这一级上支持认证、完整性和保密性。通过向数据报加入一个认证头选项,从而提供了认证和完整性的功能。并且它提供了一种整体上的解决方案,对终端用户和应用程序都是透明的,更进一步的是,IPSec包括了过滤能力,所以只有选择的通信量需求才会触发IPSec处理的开销。

3.在TCP层使用SSL实现

与S-HTTP一样,SSL(Secure Sockets Layer,安全套节层)也是开放的非专有协议,也提供了数据加密、服务器认证、等等功能,不同的是SSL 可用多种Internet 传输协议来支持,而S-HTTP只支持HTTP协议。在实现上有两种选择,一是作为底层协议的一部分,这样对于应用程序就是透明的;二是将SSL嵌入到特定的软件包中,例如Netscape和Microsoft Explorer浏览器中就装有SSL,而且多数Web服务器都能实现该协议。

4.在应用层,把特定的安全服务嵌入到应用程序中

这种方案的好处在于,对于给定的应用程序,安全服务可以进行定制以满足特殊的需求。在Web安全的环境中,这种方法的一个重要实例就是SET(Secure Electronic Transaction,安全电子事务)。

三、 Web应用软件的安全

以前黑客的攻击目标集中在操作系统和网络协议上,但随着操作系统的弱点和漏洞逐渐得到修补,它正变得越加稳健,而身份验证和加密功能渐渐被内置到网络协议中,又使网络协议变得更加安全。要进行这类攻击已经很难,黑客逐渐把目光转向到Web

服务器软件及应用程序上。

1.服务器软件安装路径选择

Web应用软件就在于提供用户从服务器上读取HTML文档的功能。但是不可能让用户访问服务器上的所有文件,尤其是系统文件。根据最新的安全公告,通过IIS编码转换漏洞,黑客可以轻易访问虚拟目录所在盘上的任意文件(详见https://www.wendangku.net/doc/c311105559.html,/technet/security

/bulletin/MS00-078.asp)。为了安全起见,网络文档的发布目录不要和系统放在一个分区。

2.注意缓冲区溢出问题

当应用程序不够完善,设计的缓冲区不能满足特殊情况下的需求,就可能发生缓冲区溢出,导致数据丢失或损坏,甚至引起程序或服务器崩溃。如果缓冲区溢出引起数据覆盖了一个内存的相邻接区,而它正是计算机指令堆栈的一部分时,黑客就可以通过某些编程技术,使溢出并进入指令堆栈中的数据包含新指令,这些指令是按与当前运行的程序一样的级别被执行,从而获得完全的访问控制权。

例如在浏览器窗口中输入长达一千个字符的URL地址,通常程序分配给存储URL地址的缓冲区是100个字符,结果缓冲区将溢出到相邻区域,使得攻击者有机会在服务器上执行其他命令。

不过缓冲区溢出攻击实施起来相当困难,因为入侵者必须能够判断潜在的缓冲区溢出何时会出现以及它在内存中的位置。缓冲区溢出预防起来也同样困难,管理员必须完全去掉缓冲区溢出存在的条件才能防止这种方式的攻击。

3.提防拒绝服务(DoS)攻击

拒绝服务攻击是指一个用户占据了大量的共享资源,使系统没有剩余的资源给其它用户提供服务的攻击方式。一个Web服务器为了尽可能地发挥出主机的功能,会限制同时连接到该主机上的人数,如果黑客占据了这些入口并维系一段时间,那么其他用户地合法请求就会被服务器拒绝。拒绝服务攻击还能通过降低系统资源例如CPU时间、磁盘空间、网络带宽、甚至是系统管理员的时间来进行。我们可以通过查看日志文件、监视连接登记状态,将入侵者的IP地址设置为黑名单来立即拒绝他们的继续访问。

4.勤打补丁消除隐患

漏洞亦称臭虫或bug,往往是技术人员在设计或编写程序时因考虑不周留下的。利用漏洞进行Web攻击已是目前黑客攻击Web 的主要方式。一般软件都含有漏洞,2000年8月海信集团为了证明自己研制的8341防火墙坚不可摧,悬赏50万向全球黑客挑战。但就在消息发布的第三天,海信公司网站主页被化名为"黑妹"的黑客黑掉。因此不要期望安装一个没有瑕疵的软件成品,我们能

做的就是时刻注意最新的漏洞公告,勤打补丁以消除隐患。

5.完善日志文件功能

大多数Web服务器软件包都允许用户对日志文件进行配置。我们需要设置的一般就是当出现资源请求时,关于这个活动的相应信息要记录到文件当中。这便于及时发现问题,甚至当服务器一旦挨攻击后,也可以通过日志文件提取证据以供日后起诉。

四、网页高效编程

现在Web制作技术日趋复杂,再加上网页编程人员大多使用自己或第三方开发的软件,而这些软件有的就没有考虑安全问题,这就造成了很多Web站点存在着极为严重的安全问题。电子世界中充斥着由于主页制作人员投机取巧而给攻击者留下侵袭或破坏机服务器的残留物。

1.输入验证机制不足

如果验证提供给特定脚本的输入有效性上存在不足,攻击者很有可能作为一个参数提交一个特殊字符和一个本地命令,让Web 服务器在本地执行。如果程序盲目地接受来自Web 页面的输入并用外壳命令传递它,就可能为试图攻入网络的黑客提供访问权。

当一段代码(如CGI程序或SSI代码)被欺骗执行了一个外

壳命令时,这个外壳命令会按照与程序本身同样的访问级别来执行。所以要确保使用尽可能有限的访问权限来运行CGI程序和Web 服务器,并加强输入验证机制杜绝有危害的字符送入Web应用程序。另外我们还可以增加对输出数据流的检验,这样即使万一挨攻破,也不至于重要数据的流失。

2.不缜密的编程思路

网站设计师考虑不周,常常会给Web 站点留下后患。例如把内部应用状态的数据通过< INPUT TYPE="HIDDEN" >标记从一个页面传递到另一个页面,攻击者可以轻易地引导该应用并得到任何想要的结果。一般的解决方案是把应用状态通过会话变量保存在服务器上,很多Web开发平台都有这种机制,如在PHP3中用PHPLIB 保存会话数据;在PHP4中用session_*()调用;ASP也提供Session 对象,Cold Fusion还提供了几种不同的会话变量。

3.客户端执行代码乱用

新兴的动态编程技术允许把代码转移到客户端执行,以缓解服务器的压力。Java脚本就能完成这一目的,它可以使Web 页面更加生动,同时提高更多的控制。不过因为功能有限,它的危险也有限,只会给你制造点不停弹出窗口的小麻烦,不会有格式化硬盘的严重破坏。但在已发现的漏洞中,覆盖面也很广,如发送电子邮件、查看历史文件记录表、跟踪用户在线情况以及上传客

户的文件。这样很容易泄露用户的个人隐私。

与Java不同,Cookie只是一些数据而不是程序,因此无法运行。客户端访问页面时,服务器不但发送所请求的页面,还有一些额外数据,当客户端和服务器再次建立连接时,回送这些Cookie以简化连接过程,提供更方便的服务。当然Cookie中包含的数据也可能是病毒的源代码甚至经过编译的二进制代码,不过远程激活他们比较困难,Cookie真正的问题也是隐私方面,这也是自它诞生以来争论的焦点。

解决的方案,我们除了期望网站设计师品德高尚以外,也可以在访问不确定安全的网站时,关闭浏览器的Java及Cookie支持功能以避免受到伤害。

五、防火墙技术应用

如果以上的方法还不能使你放心,那么添置必要的硬件另设几道防线,例如安装包过滤式路由器、防火墙或其他入侵检测设备,也是很有效果的做法。防火墙是用来隔离受保护的网络与不受保护的网络(如因特网),它审查并过滤所有因特网与受保护网络之间的连接,确保网络内部的资源免受来自外部的入侵。防火墙技术主要有以下几种:

1.包过滤型防火墙技术

又称IP级防火墙,它在为IP报文进行转发之前根据报文的

源地址、目的地址及服务类型、端口号,来鉴别数据包是否符合管理员设定的过滤规则,符合要求的才被正确转发。使用这种防火墙时,内部主机与外部主机之间存在直接的IP报文交互,因此它具有很好的透明性与方便性,一般公司为了向公共网提供服务和产品信息,不得不开放对Web服务器和它使用的TCP端口的访问。而这类防火墙无法针对特定用户或特定服务请求进行处理,并且也不能隐藏防火墙内主机的各种信息。

2.代理型防火墙技术

为了弥补这一缺陷不足,引入了应用网关或者代理服务器这个概念,它负责对一些服务连接进行转发和过滤,它针对每种应用协议提供相应的代理服务,由代理服务器访问网络,并将结果返回给客户机。代理型防火墙的优点是所有数据均由代理防火墙中继,提供了鉴别、日志与审计功能,并且它是在应用层实现,控制力度可以达到特定的用户或特定的服务。可惜的是代理服务器使用Internet上的名字解析来确定Web服务器的位置,不支持外部网络对内部Web服务器的http请求。而反向代理技术正好解决了这一难题。

3.反向代理防火墙技术

当一个代理服务器能够代理外部网络上的主机,访问内部网络时,这种代理服务的方式称为反向代理服务,此时代理服务器

对外就表现为一个Web服务器。但是它没有任何网页的真实数据,所有的静态网页或者CGI程序,都保存在内部的Web服务器上。因此对反向代理服务器的攻击并不会使得网页信息遭到破坏,这样也增强了Web服务器的安全性。

综合反向代理功能和普通包过滤式防火墙,就能构成一个既能保护内部网络、又可以对外提供Web信息发布的防火墙系统。当然也不能过多地依靠防火墙,万一它被穿透,一个管理松懈的网站暴露在侵略者眼下是很危险的。防火墙不应削弱对系统的管理,而且防火墙也不是万能的,它不能抵制从内部发起的攻击,如果内部有Modem 私自接入,那就更为黑客打开了一扇大门,他们能够方便地使用SLIP或PPP 协议从后门进入,从而绕过那道马其诺防线。

六、提高管理人员素质

许多安全策略之所以失败就是因为没有考虑到人的因素。人才是实际使用、实施或违反安全策略的操作者。规则和过程很难记忆,他们甚至认为每半年更新一次口令毫无意义,那么最后有必要重点强调一下作为Web的最高统治者--管理人员所需要注意的地方。

1.禁用缺省设置

在机器的使用过程中,管理员容易犯的最大错误就是以缺省设置来运行机器。缺省设置包括制造商在机器出厂时所做的默认设定以及软件产品在安装运行时的默认设置。因为缺省设置一般强调功能性而不是安全性,而且容易被黑客们识破配置。一些系统自带的标准用户默认口令更是要重新设置。当然配置系统需要足够的耐心和经验技巧,特别是Apache Web服务器软件没有一定的相关知识是很难配置成功的。

2.不要太赶潮流

人们越来越禁不起诱惑,一有新的版本就迫不及待的升级,其实,应该等一等。新开发出来的软件漏洞都较多。对于服务器,我们更该关心它能否能可靠运行,然后才是效率功能问题。一般来讲,软件的整数版本号是对功能的扩充,而小数点版本是对性能的提高。如果服务器还能应付日常访问也不十分需要增加功能,那么还是等软件的修补程序、小数点版本等等都出来以后再考虑升级。另外不要使用来路不明的软件或补丁,很多表面看似正常的软件,其实就暗藏了木马或其他黑客程序。

3.培养安全意识

不要嫌安全口令太难记输入太麻烦,而起个简单的密码,更不能把密码写在纸上,再把纸压在键盘下。要培育自己的安全意识,时刻注意安全,不要心存侥幸。黑客往往无孔不入。根据最

新的安全公告,安装NT系统第一次重起后,管理员帐号口令仍然是缺省值,这就要求我们在灌系统时,最好把网络断开。

另外我们强调管理员在Web 安全方面的重要性,还是因为他可以得到我们的个人资料、查看我们的信件、知道我们的信用卡号码,如果做些手脚的话,还能通过网络控制我们的机器。我们能做的只有期望他们技术高超可以保障我们不受侵扰以外,还要道德高尚、品格优良。

结束语:

提高一个站点的安全性,抵御黑客攻击,我们必须全盘地考虑问题,任何一个差错,任何一个漏洞都可能成为黑客入侵的跳板。然而我们又不希冀打造出一个铜墙铁壁牢不可破似的安全堡垒,那样花费代价太高、使用也极不方便。我们只要能确保所采用的安全控制超出了攻击者的能力和动机,就可以称达到安全目标了。安全与效用往往是一对矛盾体,要想网站提供更多的功能、更快捷的服务就不得不牺牲其安全性。在实际中怎样处理好安全与效用的关系,是很值得研究的,相对不同的网站、不同的应用,安全的策略也不尽相同。

相关文档