允许根据用户的请求而在服务器上运行程序,本身就是一种安全漏洞,因此只有在必要时,才允许用户使用这些功能。
对于ssi,安全问题比较简单,可以将其设置为只分析普通标志,不执行外部程序,这必须在配置文件中使用options includesnoexec选项,而非options includes选项。就能满足对安全性的一般要求。
cgi程序的情况更为复杂。由于cgi可以用两种方式设置,一种为由scriptalias设置cgi程序的路径,另一种为通过设置cgi的后缀而设置的。通常只有在信任用户有能力创建没有(或很少)漏洞的cgi程序时,才使用后缀确认cgi程序。否则将会产生一些很糟糕的cgi程序,使得系统很容易被攻击。因此将cgi程序限制在一些固定目录下的做法更为常见,这至少让一个cgi程序经过服务器管理员的一些检查,避免明显的漏洞。
cgi程序的另一个问题是,如果cgi程序要保存浏览器客户发布的数据,那么它就要访问系统的文件系统。通常apache服务器使用user和group配置服务器运行的用户和组属性,apache服务器启动的cgi程序缺省也使用这个用户和组属性运行,也就拥有了这个用户和组的权限,可以存取文件系统中的数据,这就对系统安全造成另一个影响。然而又必须让cgi程序存取数据文件,因此就要适当调整user和group的设置,使得它能够存取合适的数据文件。
即使如此,由于所有的cgi程序都以同样的用户执行,那么不同用户的cgi就能相互操作别的用户的数据文件,从而造成安全问题。为了使得不同的用户以不同的用户身份执行cgi,就需要使用程序的setuid功能。因为setuid会带来极大的系统漏洞问题。因此如非必要,不要使用setuid程序,尤其是root身份的setuid程序。设置用户身份的问题可以使用apache的suexec能力来帮助完成,它首先将身份改变为合适的用户,再执行相应的cgi程序。
未完,待续。。。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器