减小字体
增大字体
作者:佚名 来源:不详 发布时间:2008-10-20 19:57:09
|
把尽可能多的服务隔离运行可以部分地解决这个问题,例如用Apache suexec程序的sbox让所有的CGI在隔离的环境以客户的用户ID而不是Web服务器的用户ID运行。另外,许多服务器上运行着FTP服务,例如wu-ftpd,该服务的所有文件传输都是隔离进行的,同样也保护了善意客户的资料避免被其他人偷看。
然而,恶意的客户仍旧能够用CGI程序创建符号链接指向其他用户的存储区域,然后通过它自己的Web服务器查看其他人的文件,这是因为在一个运行多个网站的环境中,Web服务器无法简单地以隔离方式以及用它为之应答请求的客户的用户ID运行。管理员应该配置Web服务器以及其他文件传输程序使其不再使用符号链接。在Apache上,这可以通过关闭最顶层的“FollowSymLinks”选项实现(不要在较低的层次上把它重新打开),配置代码示例如下:
< directory / >Options -FollowSymLinks< /directory >
|
数据源的可靠性
第三类常见的安全问题是CGI程序或PHP脚本的质量低下,它们信任了来源不可靠的参数,未经严格的检查就立即使用CGI参数。
Web应用一般包含位于防火墙之内的和防火墙之外的两部分,防火墙之内的如本地的脚本程序、数据库、Web服务器以及本地数据文件等。由于这些部件都由管理员直接管理和控制,因此可以认为它们都是可以信任的。Web应用的其他组成部分位于防火墙之外,是不可信任的。这主要是指用户的浏览器——如果用户使用浏览器,而且没有为了更方便地控制输入Web应用的数据和发现Web应用中可能存在的问题而直接在telnet会话中输入Web请求。
防火墙是可信任的Intranet和不可信任的Internet之间的分界线。
所有来自信任分界线之外的数据未经检查就不应该进入Web应用,这包括所有传递给CGI脚本的参数,比如:GET、POST和COOKIE变量,HTTP_REFERER、HTTP_USER_AGENT和所有HTTP_*变量,以及所有其他远程生成的变量值。在CGI脚本使用所有这些变量之前,都必须对它们进行合法性检查,这种检查可以确保变量的值确实在预期的范围内。
例如,有些脚本在请求的HTTP_REFERER正确时就接受表单输入,这是一种常见但错误的编程习惯。脚本用这种机制来防范伪造的请求是徒劳的。毫无疑问,对于攻击者来说,掌握必需的HTTP_REFERER并将它并入请求的其余部分一起发送是轻而易举的,因此这种保护是没有用的。这种脚本的错误在于:在这类调用中必须检查的不仅仅是HTTP_REFERER值,所有其他值都必须进行检查。[page]
伪造Web请求(一)
下面这个简单的PHP程序将输出CGI参数b的值以及HTTP_REFERER的值:
kris@valiant:~/www < cat test.php< ?php print "The value of b is $bn"; print "The value of HTTP_REFERER is $HTTP_REFERERn";? >
|
用telnet连接到80端口,我们能够向上述脚本提供任意的参数值b,同时还可以任意提供HTTP_REFERER值。我们把下面的几行发送到服务器:
GET /~kris/test.php?b=this+is+a+test HTTP/1.0Host: valiant.koehntopp.deReferer: http://www.attacker.com/die_sucker_die.html
|
下面是完整的会话过程:
kris@valiant:~/www < telnet valiant 80Trying 193.102.57.3...Connected to valiant.koehntopp.de.Escape character is '^]'.GET /~kris/test.php?b=this+is+a+test HTTP/1.0Host: valiant.koehntopp.deReferer: http://www.attacker.com/die_sucker_die.htmlHTTP/1.1 200 OKDate: Sat, 08 Apr 2000 06:44:02 GMTServer: Apache/1.3.9 (Unix) (SuSE/Linux) PHP/4.0RC2-dev mod_ssl/2.4.7 OpenSSL/0.9.4X-Powered-By: PHP/4.0RC2-devConnection: closeContent-Type: text/htmlThe value of b is this is a testThe value of HTTP_REFERER is http://www.attacker.com/die_sucker_die.htmlConnection closed by foreign host.
|
|
Tags:
作者:佚名