一、转换角色,把自己当作可能的***者
  大部分时候,我们若只是站在 WEB管理员的角度上考虑问题,可能就发现不了 Web服务器的漏洞。相反,我们此时若能够换个角度,把自己当作可能的***者,从他们的角色出发,想想他们可能会利用那些手段、哪些 Web服务器的漏洞进行***,或许,我们就可以发现 Web服务器可能存在的安全漏洞,从而早先一步,修补安全漏洞,防止被***或者病毒***。
  从公司外面访问自己的 Web服务器,进行完正的检测,然后模拟***自己的网站,看看,会有什么样的结果。这对于 WEB的安全性来说,可能是一种 很好的方法。如我们可以假当***者,利用扫描工具,对 Web服务器进行扫描,看看有否存在可以被***的服务。有些东西我们平时可能不会引起我们重视,但 是,利用***常用的工具进行扫描,就会发现一些可能会被他们利用的服务或者漏洞。如在服务器安装的时候,操作系统会默认的安装并启动一些不需要的服务 ;或者在服务器配置的 时候,需要启动一些服务,但是事后没有及时的关闭,从而给了不法***者一个***的机会。最常见的如 SNMP服务,又称简单网络管理协议。这个服务在系统安 装完毕后,默认情况下是开启的。但是,这个服务可以为***者提供服务器系统的详细信息,如 Web服务器是采用了什么操作系统,在服务器上开启了什么服务与 对应的端口等等宝贵的信息。***者只有了解这些最基本的信息之后,才能够开展***。
  我们安全管理人员,在平时的时候可能不会发现这个问题,但是,若能够利用***的扫描工具一扫描,就能够发现问题的所在。故笔者认为在必要的时 候,需要换个角度,从***的角色出发,考虑他们会采用什么样的***方法。如此的话,我们才可以避免 当局者迷 的错误,保障 Web服务器的安全。
  二、合理的权限管理
  有时候,在一台服务器上,不仅运行了 Web服务器,而且还会运行其他的诸如 FTP服务器之类的网络服务。在同一台服务器上应用多种网络服务的话,很可能造成服务之间的相互感染。也就是说,***者只要***一种服务,就可以利用相关的技术,攻陷另一种应用。因为***者之需要攻破其中一种服务,就可以利用这个服务平台,从企业内部***其他服务。而一般来说,从企业内容进行***,要比企业外部进行***方便的多。
  那或许有人会说,那不同服务采用不同服务器就可以了。其实,这对于企业来说,可能是种浪费。因为从性能上讲,现在的服务器上同时部署 WEB服务 与 FTP服务的话,是完全可行的,性能不会受到影响。为此,企业从成本考虑,会采取一个服务器。而现在给我们安全管理员出了一个难题,就是在两种、甚至两 种以上的服务同时部署在一台服务器上,如何保障他们的安全,防止他们彼此相互之间感染呢 ?
  笔者现在就遇到这个问题。笔者现在的 Web服务器上运行着三种服务。一个是传统等 WEB服务 ;二是 FTP服务 ;三是 OA(办公自动化 )服务,因为该服务是 WEB模式的,互联网上也可以直接访问 OA服务器,所以也就把他部署在这台服务器上。由于这台服务器的配置还是比较高的,所以,运行这三个服务来说,没有多少的困难,性能不会有所影响。现在的问题是,如号来保障他们的安全, FTP服务器、 OA服务器与 Web服务器之间安全上不会相互影响呢 ?
  我现在采用的是 Windows2003服务器,为了实现这个安全需求,把服务器中所有的硬盘都转换为 NTFS分区。一般来说, NTFS分区比 FAT分区安全性要高的多。利用 NTFS分区自带的功能,合理为他们分配相关的权限。如为这个三个服务器配置不同的管理员帐户,而不同的帐户又只能对特定 的分区与目录进行访问。如此的话,即使某个管理员帐户泄露,则他们也只能够访问某个服务的存储空 间,而不能访问其他服务的。如把 WEB服务装载分区 D,而把 FTP服务放在分区 E。若 FTP的帐户泄露,被***利用 ;但是,因为 FTP帐户没有对分区 D具 有读写的权利,所以,其不会对 Web服务器上的内容进行任何的读写操作。这就可以保障,其即时攻陷 FTP服务器后,也不会对 Web服务器产生不良的影响。
  虽然说微软的操作系统价格昂贵,而安全漏洞又比较多,但是,其 NTFS分区上的成就表现还是不差的。在 NTFS分区上,可以实现很大程度的安全管理,保障相关服务于数据的安全性。所以最后还是采用了微软的 2003操作系统作为服务器系统,而没有采用 Linux系统。
  三、脚本安全管理
  根据以往经验,其实很多 Web服务器因为被***而瘫痪,都是由于不良的脚本所造成的。特别是,***者非常喜欢利用 CGI程序或者 PHP脚本,利用他们的脚本或者程序漏洞,进行***。
  如我们的网站就遇到个几次***,他们利用 CGI程序的漏洞,让外部***者向 Web服务器传递了一些不可靠的参数。一般来说, WEB应用需要传递 一些必要的参数,才能够正常访问。而这个参数又可以分为两类,一个是可值得信任的参数,另外一类是不值得信任的参数。如企业可能是自己管理 Web服务器, 而不是托管。他们就把服务器放置在企业的防火墙内 部,以提高 Web服务器的安全性。所以一般来说,来自于企业防火墙内部的参数都是可靠的,值得信任的 ;而来自于企业外部的参数,都是不值得信任的。但是, 也不是说不值得信任的参数或者说,来自于防火墙外部的参数 Web服务器都不采用。而是说,在 Web服务器设计的时候,需要注意,采用这些不值得信任的参数 的时候,需要进行检查,看其是否合法 ;而不能向来自于企业内部的参数那样,不管三七二十一,都照收不误。这明显会对 Web服务器的安全带来威胁。如有时 会,***者利用 TELNET连接到 80端口,就可以向 CGL脚本传递不安全的参数。
  所以,在 CGI程序编写或者 PHP脚本编辑的时候,我们要注意,一定不能让其随便接受陌生人的参数,不要随便跟陌生人打交道。在接受参数之前, 一定要先检验提供参数的人或者参数本身的合法性。在程序或者脚本编写的时候,可以预先加入一些判断条件。当服务期认为若提供的参数不合法的时候,及时通知 管理员。这也可以帮助我们,尽早的发现可能存在的***者,并采取相应的措施。
  对于脚本的安全性来说,要注意以下问题:
   1、在脚本或者程序编写的时候,不应该把任何不信任的参数直接保存为会话变量。因为根据 WEB应用的设计原理,会话变量只保存信任变量。也就是 说,会话变量中的值, WEB服务都认为其是值得信任的,会不加思索的采用。一般的设计思路是,先设置一个临时变量进行存储,然后编写一个检验其合法性的过 程或者函数,来验证其合法性。只有通过验证的时候,这个值才能够被传给会话变量。根据笔者的经验,要是没有亲身经历过惨痛教训的 WEB管理员,可能对此不 屑一顾。但是,那些有过这方面教训的人,则会非常看重这个合法性的检验过程。毕竟是吃一堑长一智,所以新手还是需要多听听过来人的建议,不会吃亏的。
   2、在没有充分必要的时候,不要采用脚本,尽量使得网页的简单化。其实,企业的网站跟个人网站有个很大的不同,企业的网站只要朴素就好,不需要 过多的渲染。一方面,过度渲染的网站会降低用户网站访问的速度 ;另一方面,这也会降低网络的安全性能。故,在没有充分必要的情况下,不要共脚本或者程序在 渲染网站的华而不实的功能。
   3、对脚本或者程序的执行情况要进行持续的跟踪。在万不得已网站采用了程序或者脚本的时候,则需要定时不定时的对这些脚本或者程序的运行情况进行稽核,看看其有没有被非法利用的嫌疑。