我爱Aspx >> C#.Net >> CGI的安全(二)1 2 下一页
缺省情况下,下面的全局选项这样设置:
Options Indexes FollowSymLinks
当URL指定的目录里没有要查找的文件时,Indexes允许你指定一个文件。缺省情况下,这个变量为index.html,通过srm.conf中的DirectoryIndex来指定,很符合我们的意图。FollowSymLinks意指服务器会返回符号连接指向的数据。我没看到这个特性的必要性,所以我禁止了它。现在,这一行看起来象这样:
Options Indexes
如果我想在任何目录中使CGI程序有效,我可以通过包含ExecCGI选项来设置:
Options Indexes ExecCGI
这一行,结合在srm.conf中的AddType指令,可以允许我通过在任何目录中给所有的CGI程序添加.cgi的扩展名来执行一个CGI。
缺省情况下NCSA httpd的配置,通过在一个具有适当的属性和访问限制的特定目录中创建.htAccess文件使access.conf中的所有设置都可以被超越。在这种情况下,我不介意用户改变它们的访问限制。然而,我不想赋予用户在他们自己的目录里执行CGI和.htaccess文件的能力。
AddType application/x-httpd-cgi .cgi
Options Indexes ExecCGI
因此,我编辑access.conf来允许用户超越除了选项外所有的设置:
AllowOverride FileInfo AuthConfig Limit
现在,我的服务器安全的配置了。我只允许在cgi-bin目录中运行CGI,并且使服务器嵌入指令完全无效。服务器以nobody用户运行,一个我的系统中不存在的用户。我禁止了所有我不需要的特性,并且用户不能超越这些年特殊的限制。想了解很多的其他的配置信息,包括详尽的访问限制,请参照NCSA服务器说明文件。
2.写出安全的CGI程序
假设你已经使的你的计算机和Web服务器很安全了,那么你后面就应该学会怎样写出一个安全性很好的CGI程序。编写安全的CGI的原则和前面提到的相似:
A.你的程序只能实现你指定的功能。
B.不要给客户额外的它不需要知道的信息。
C.不要相信客户给你正确的信息。
关于第一条可能存在的安全隐患我在guestbook的例子中已经说明了。我提到了几个可以揭露漏洞的常见的错误,但是,你同样应该记住:你应当考虑你所应用的每一个函数的所有含义。
第二条是一般安全性原则的简单扩展:系统之外的人对你的系统了解的越少,你的系统就越没有可能被攻破。
最后一条原则只是一条很好的很重要的编程原则,但同样也是安全性很好的一个。CGI程序应该是安全可靠、健壮的。一个hacker可能做的第一件事是想尽一切办法通过在你的CGI程序中不断调整输入来搞乱程序,进而达到攻入计算机的目的。如果你的程序并不健壮,那么这时,它或者会崩溃,或者会实现其它的功能(当然这些功能是你不允许的)。这两种可能性都是令人不快的。为了杜绝这种可能性,不要对你的客户可能发送的信息格式或值作任何的假定。
大多数CGI程序的本质是简单的输入/输出程序。它提取客户端的说明并返回 一些响应。这种程序几乎没有风险(当然也会出现漏洞,后面你会看到)。因为CGI程序并不对输入感兴趣,没有什么错误可能发生。然而,一旦你的程序利用输入启动,可能回调用其他的程序,写文件,或者做一些功能更强大的而非简单返回输出的事情,那么你就会冒引入安全漏洞的风险。通常,功能是直接和安全风险成比例的。
Ҷƪл˵?
JSP由浅入深(5-1)[05-12]
第十五节--Zend引擎的发展 -- Cl..[05-12]
使用PreparedStatement减少开发时..[05-12]
ASP.NET中将数据输出到Excel[05-12]
Asp Object 之:PICS[05-12]
Asp Object 之:ExpiresAbsolute[05-12]
Asp Object 之:ServerVariables[05-12]
Asp Object 之:End[05-12]
ASP进阶教程:数据库版本的留言簿[05-12]
ASP进阶教程:给留言簿润下色[05-12]