| 这也行,但是这样也允许了网络上的任何一个人运行你机器中的Perl命令.例如,可以访问如下的URL: http://hostname/cgi-bin/perl.exe?-e+unlink+%3C*.*%3E%3 经过解码,其相当于调用Perl并运行下面的一行程序,这行程序将删除当前目录的所有文件.显然,这是我们不想的. unlink <*.*>; 你永远没有理由将解释器放入你的cgi-bin目录中(或者其他可以运行CGI的目录),所以千万不要这么做.一些Windows服务器能够根据其扩展名辨别脚本的类型并运行相应的解释器.例如,Win-HTTPD认为每一个以.pl结尾的CGI脚本是Perl脚本,并自动运行Perl.如果你的Web服务器没有这个特性,就像这章第一个Windows Perl例子那样使用包装的脚本.More:我应该使用一个解释器吗? 如果你使用一个Unix或者是Macintosh的Web服务器的话,记住永远不要冒险将一个解释器放到你的cgi-bin中.前面我们提到过,Unix允许你指定特定的位置给包含脚本的解释器.为了在Macintosh中使这些脚本有效,你可以使用一个应用程序如ResEdit编辑代码将脚本与挪用的解释器结合. 1-2-2.SSI(Server-Side Includes) 在第四章中,你已经知道了应该避免服务器嵌入指令的原因。一个经常提出的一般原因是安全性。很显然,一些服务器嵌入指令(特别是NCSA和Netsape)的执行会允许用户将程序输入包含到HTML文件中。每次当这些HTML文件被访问时,在服务器端程序会运行并将输出作为HTML文件的一部分显示出来。 允许这种服务器的嵌入指令,你就很容易受到一些安全风险的影响。首先,在Unix的计算机中,程序由服务器的所有者运行,而不是程序的所有者。如果你的服务器没有正确配置,并且将重要的文件或程序交给服务器的所有者,这些文件和程序以及它们的输出有可能被你的计算机的用户所访问。 当你允许用户通过浏览器修改你系统中的HTML文件时,这种风险就增大了。一个通常的例子是留言本。在留言本中,用户填写表单并把信息提交到CGI程序中,程序一般是将未编辑的信息附加到一个HTML文件中。如果不编辑或过滤提交的信息,你就允许了用户从他或她的浏览器中提交HTML代码。如果你允许程序在服务器端嵌入执行,不怀好意的用户就可以通过提交如下的附加代码给你的机器造成破坏: 这个服务器嵌入指令将试图尽可能地删除你的机器中的所有内容。 你可以通过很多方法避免这个问题,而不需要完全关闭服务器嵌入。你可以在将提交的文本附加到你的留言本之前过滤所有的HTML附加代码。或者你可以禁止你的服务器嵌入中的exec的功能(在这章后面的"增强你的Unix服务器的安全"中我将演示在NCSA服务器中如何做)。 如果你忘记了其中的任何一条,其他的一些防护措施同样可以很大程度上减因这种附加代码造成的危害.例如,只要你的服务器以不存在的用户,非root的身份运行,这个附加代码不会删除任何重要的东西,可能什么也不会丢掉.假设不还 好意者不是试图删除你的磁盘上的所有东西,而是使用如下的代码获取你的 etc/passwd作为破解之用: 当然,如果你的系统使用的是shadow型的passwd档,那么你的/etc/passwd对潜伏的hacker来说毫无用处. 这个例子论证了通常的服务器端嵌入指令和CGI中两个很重要的问题.首先,安全漏洞可以被完全隐藏.谁会想到一个简单的使用SSI编写的留言本程序可以体现如此之大的安全风险?其次,一个安全漏洞的潜在的危害可以通过正确配置你的服务器和加强你的系统安全来降低到最小. 1-2-3.增强你的Unix服务器的安全 一个安全的Unix系统对于Web文件服务来说是个非常优秀的平台。然而,在加强服务器安全和正确配置Unix的Web服务器的过程中伴随着很多复杂的问题。你应该做的第一件事就是确定你的机器已经尽可能的安全了。 将你不需要的网络服务关掉,不管对你而言他们是多么没有害处。任何人未必能使用finger协议侵入你的系统,举个例子,它提供了一些用户的信息,然而,finger可以提供给hacker关于你的系统的有用的信息。 加强你的系统的内部安全。如果hacker设法破解了一个用户帐号,要确定这个hacker不会获得额外的权限。安全shadow型的password文件和去除设定用户权限的脚本(脚本以所有者的身份运行,即使是由其他用户调用时)是很有用的。 加强Unix机器的安全是一个复杂的课题,超出了本书的范围。我强烈建议你购买一本这方面的书,阅读Internet上这方面的资源,如果有必要的话,甚至可以雇佣一个咨询顾问。不要低估加强你的机器安全的重要性。 另外,分配隔离的空间给你的Web服务器和文件。你的文件目录的用途是将这些文件提供给其他人使用,可能是整个Internet,因此你不要将你别人知道的任何东西放到这些目录里。你的服务器目录包含重要的日志和配置信息,并且你要尽可能的不要让你的内部用户看到或修改它。 要明智的设置你的目录和服务器的所有权和使用权。为Web相关的目录建立一 新的用户和组是通常的一个方法。确定非特权用户不能更改服务器或文件目录。 你的服务器千万不要以root身份运行(running as root)。在Unix系统中,只有root能够访问小于1234的端口。因为缺省的Web服务器运行于端口80,你需要是root来启动一个Web服务器。然而,在一个Web服务器以root身份运行以后,它可以修改自身进程的所有权,或者改变它用以连接的子进程的所有权。其中任何一种方法都需要服务器以非root身份运行。确定配置你的Web服务器使其以非root身份运行,最好是以一个完全不存在的用户如nobody。这样,如果在你的Web服务器或CGI程序中有漏洞时,它可以降低潜在的危害。 上一篇:获取随机的密码 下一篇:CGI的安全(二) 更多相关文章
|
推荐文章
精彩文章
|