2

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

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

我有三个问题:

  1. $_SERVER["SCRIPT_NAME"]PHP从服务器或客户端浏览器从哪里获取数据?

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

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

4

4 回答 4

7

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

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

于 2009-08-27T15:43:52.437 回答
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不会为您清理/编码这些变量。您应该始终对所有输入进行编码和检查,包括“由服务器生成的输入” 。

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

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

?>

请记住,永远不要假设应用程序的输入是安全的。懒惰是不值得的——只要编码和检查一切,不管别人怎么想。

于 2013-09-27T14:04:14.493 回答
-1

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

于 2009-08-27T15:45:11.017 回答
-1

PHP.net

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

它应该是完全安全的,因为它是由服务器生成的。就个人而言,我总是对来自超级全球的任何东西进行消毒,不管它应该有多安全。

于 2009-08-27T15:47:24.147 回答