使用$ _SERVER [“SCRIPT_NAME”]是否安全

时间:2009-08-27 15:40:43

标签: php code-injection

我不想将GET或POST变量传递给脚本。我想使用文件名并使用它从php脚本中查找产品,例如:

......./DELL1500.php ......./COMPAQ1213.php

我有三个问题:

  1. PHP从$_SERVER["SCRIPT_NAME"]获取数据的位置是来自服务器还是客户端浏览器?

  2. 有人能想到使用它的任何安全问题吗?

  3. 无论如何,这可能与任何旧浏览器不兼容。我假设它不是由服务器提供的吗?

4 个答案:

答案 0 :(得分:7)

$_SERVER['SCRIPT_NAME']是服务器端的。因此没有浏览器兼容性问题,并且不应存在安全问题,因为它只是表明服务器为请求的URL服务的内容(即http://example.com/http://example.com/index.php都会导致'/index.php')。

也就是说,在这个廉价,简单的数据库驱动网站这个时代,每个产品使用不同的PHP脚本会让我觉得非常低效。

答案 1 :(得分:4)

我知道这是一篇很老的帖子,但是在Google上快速搜索“PHP $ _SERVER安全性”提出了这篇文章,我无法相信我所看到的。

您应该编码并检查所有输入,无论您认为它是多么安全。例如,从客户端发送的请求的标头中读取HTTP_HOST服务器变量。 “客户端”可以是任何东西......不仅仅是浏览器......例如,有人专门编写的用于模糊这些标题的PERL / python脚本。

从PHP文档(再次)......

  

'HTTP_HOST'

Contents of the Host: header from the current request, if there is one.

客户端请求中几乎总是有HTTP_HOST。这不是唯一的变量,Apache和PHP 为您清理/编码这些变量。您应编码并检查ALWAYS和所有输入,包括那些“由服务器生成。

<?php
$server = array();
foreach($_SERVER as $k => $v)
  $server[urlencode($k)] = urlencode($v);

if(!preg_match("...", "...", $server["X"]))
  exit;

?>

请记住,永远不要认为应用程序的输入是安全的。不值得懒惰 - 只需编码并检查一切,无论别人怎么想。

答案 2 :(得分:-1)

我认为没有安全问题,它是在服务器上创建的,所以它不依赖于客户端浏览器。我想你可以用它。

答案 3 :(得分:-1)

  

<强> PHP.net

     

$ _ SERVER是一个包含标题,路径和脚本位置等信息的数组。此阵列中的条目由Web服务器创建。无法保证每个Web服务器都能提供这些服务;服务器可以省略一些,或提供此处未列出的其他服务器。

使用它应该是完全安全的,因为它是由服务器生成的。从个人角度来说,无论它应该是多么安全,我总是会对超级全球的东西进行消毒。