当前位置:51VIP源码软件音乐小游戏下载联盟网络学院网络编程CGI教程 → CGI的安全(一)

CGI的安全(一)

减小字体 增大字体 作者:无从考证  来源:不详  发布时间:2005-9-28 14:17:45 我要发布文章
目录: 
1. 基本的安全问题 
  1-1. 操作系统 
  1-2. 增强服务器的安全 
  1-2-1.你应该在什么地方放置你的CGI程序? 
  1-2-2.SSI(Server-Side Includes) 
  1-2-3.增强你的Unix服务器的安全 
  1-2-4.例子:安全的配置NCSA服务器 
2.写出安全的CGI程序 
  2-1.语言的风险性 
  2-2.shell危险性 
3.安全处理 
  3-1.SSL 
  3-2.SHTTP 
4.概要 

  如果你以前从未编写过应用于网络软件,那么安全问题可能是你在编程时最不注重的了。毕竟,在单机上,你没有必要担心写了不安全的程序,因为,大概也只能有一个人可以接近那台计算机。 

  但是,在编写应用于Internet的软件中需要非常强调安全问题。有一个挺老的计算机格言说:"使一台计算机真正安全的唯一方法是将它与世界断开连接并把计算机放到紧锁的房间里。"可见,将计算机和一个网络简单相连就会降低你的计算机的安全性。 

  对于越大的相连的网络这句话越适用,比如Internet,这里有成千上万的人可能会访问你的计算机。很多基于Internet的服务,特别是WWW,别设计成能使其他人很容易的从你的计算机中获取信息。这些你允许接受访问的服务(或者是有意的,或者是无意的)都有可能成为老谋深算、心怀恶意的人的攻击途径。一个很糟糕的网络服务器很容易被攻破,甚至潜在给出了可以访问你的整个计算机和重要数据的权限。 

  我说你提供的每一项网络就象进入你系统中另一个门,是指什么呢?什么才是安全破坏呢?不管是什么目的,安全破坏是指一个人从你的计算机中获得了未经授权的访问权。"Unauthorized access"(未经授权的访问权)也可以理解为很多事情,试图从服务器上运行一个非公共的程序,甚至是获得在Unix中获得root权限。 

  你过多的依赖于为网络服务器编写安全程序程序员的知识和细心。毕竟,没有人指望你详细审查几千行的源码只为了弄清楚软件是否有安全漏洞;大多数情况,你依赖编程者的可靠性和其他审阅源码和仔细的帮助测试软件的专家。假如网虫们证明了你不能完全相信这些程序员可以写出完美的安全的代码,那么你可以采取措施最大限度的减少风险。 

  在后面的"保护你的Web服务器",你将学习Web服务器的安全。目前,假定你的应用于Web服务器的软件是安全的,并且正确的配置了;也就是说,没有人可以仅仅通过你的Web服务器从你的机器中获得未经授权的权限。为什么写安全的CGI脚本很重要呢?CGI是一个允许你拓展Web服务器的一般协议。通过编写CGI程序,你能够增加Web服务器的功能。这些功能很可能无意中引入新的安全漏洞。一个糟糕的CGI应用程序很可能允许任何人拥有你的机器的完全的权限。 

  用户提交一个表单或者是以另一种方式访问CGI脚本的时候,本质上来说,是你允许他们远程运行你的服务器中的应用程序。因为很多的CGI应用程序接受用户的表单输入(或通过填写表,或是通过命令行),从另一个角度来说,你允许用户控制CGI程序的运行。作为CGI程序的作者,你需要确定你的CGI脚本只能用来实现它指定的功能。这一章提到了相关的Web安全问题,提供了编写安全的CGI程序的深入的资料。在本章的最后,你也会学会怎样安全的编写CGI。 


1. 基本的安全问题 

  你的Web服务器的全面的安全性取决于很多因素。如果你的Web服务器没有正确配置或者系统有其它漏洞的话,那么一个安全的CGI程序也是毫无用处的。这里,我论述一些相关的Web安全问题,并说明如何为CGI程序正确的配置你的Web服务器。 

1-1. 操作系统 

  一个通常的问题是什么样的平台对Web服务器来说更安全?运行System 7的Macintosh,Unix的工作站,运行OS/2或Linux的PC等等。在这个问题上有过很多争论,这些反映了人们对不同的操作系统的不同的偏爱。 
  没有一个操作系统比另外一个明显安全。Unix被认为比单用户的平台(比如acintosh或者是运行着Windows的PC)更安全,因为曾经有人攻破过一些运行着后者(注:括号中)的机器,并拥有了所有文件的权限。然而对于Unix,有一个关于文件属主和权限的基本的理解。如果你的服务器正确的配置了,并被一个安全的用户(比如:非root用户)拥有,这时候,如果未经授权的用户闯进来,他(她)只能造成有限的破坏。然而,有限的破坏已经够糟糕了,在以后的章节的例子中你会明白。 

  另一方面,因为Unix经常要配置很多不同类型的网络服务,比如mail,FTP,Gopher,WWW等等,因此,有更多的潜在的“后门”。加强这些服务的安全性是一个耗时的过程,甚至对有经验的系统管理员亦如此。即使你每项配置正确无误,然而在每个单独的软件包里仍有可能出现恼人的bug。安全漏洞在各种软件包中并不是罕见的,从一些组织(比如CERT(the Computer Emergency ResponseTeam))的有关各种的Unix网络服务周期性的通知中我们可以清楚的了解到。 

  每一个不同的平台都有其不同的安全含意,但是不能彼此比较安全性。尽管你应该注意每个操作系统的安全性,但是这不应该成为你选择平台的主要标准。选择你的平台,纠正有关该平台相关的安全漏洞,然后安全正确的配置你的Web服务器。在你完完全全的完成这些步骤之后,你才应该将你的精力投入到编写安全的CGI脚本中去。 

1-2. 保护你的服务器 

  编写安全的CGI脚本的第一步要确定你安全并正确的配置了你的Web服务器。如果你的Web服务器并不可靠,那即使你再仔细编写你的CGI脚本也是没有用的,人们仍然可以闯入你的计算机。而且,正确的配置你的Web服务器能够减小糟糕的CGI程序所带来的可能的危害。 

More:选择一个安全的Web服务器 

  在不同的平台有数不清的Web服务器可供使用。如果可能的话,自我确定一个产品是否安全是很困难的,你将不得不依靠公司的信誉和口头承诺。 
  检查你的选择。在你拥有了一个Web服务器的列表之后,看一下每个产品的有效期以及目前有多少人使用它。越老的并且经常使用的Web服务器,有关的安全方面的bug越有可能被发现并修补。如果源码是开放的,并且你有时间和专门技术,自己从头至尾看一下源文件,看看能否找到潜在的漏洞。阅读网络中不同的新闻组对该产品以及作者和发行人的评论。著名的公司或作者会很快的通知用户其产品的任何问题。阅读各个组织(如CIAC(Computer Incident AdvisoryCapability)和CERT)有关安全方面的警告信息。 

  检查所有的服务器组件并确定你是否真的需要所有组件的特性。越复杂、功能越强大的服务器,越有可能存在未被发现的安全问题。确定你的服务器支持日志

[1] [2]  下一页