我不想将 GET 或 POST 变量传递给脚本。我想使用文件名并使用它从 php 脚本中查找产品,例如:
......./DELL1500.php
......./COMPAQ1213.php
我有三个问题:
$_SERVER["SCRIPT_NAME"]
PHP从服务器或客户端浏览器从哪里获取数据?谁能想到使用它的任何安全问题?
无论如何,这是否与任何旧浏览器不兼容。我假设它不是由服务器提供的?
我不想将 GET 或 POST 变量传递给脚本。我想使用文件名并使用它从 php 脚本中查找产品,例如:
......./DELL1500.php
......./COMPAQ1213.php
我有三个问题:
$_SERVER["SCRIPT_NAME"]
PHP从服务器或客户端浏览器从哪里获取数据?
谁能想到使用它的任何安全问题?
无论如何,这是否与任何旧浏览器不兼容。我假设它不是由服务器提供的?
$_SERVER['SCRIPT_NAME']
是服务器端的。因此不存在浏览器兼容性问题,也不应该存在安全问题,因为它只是表明服务器正在为请求的 URL 提供什么服务(即http://example.com/和http://example。 com/index.php都会导致'/index.php'
)。
也就是说,在这个廉价、简单的数据库驱动网站时代,每个产品都有一个不同的 PHP 脚本让我觉得效率非常低。
我知道这是一篇旧帖子,但在 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;
?>
请记住,永远不要假设应用程序的输入是安全的。懒惰是不值得的——只要编码和检查一切,不管别人怎么想。
我认为没有安全问题,它是在服务器上创建的,因此它不依赖于客户端浏览器。我认为你可以使用它。
$_SERVER 是一个包含标题、路径和脚本位置等信息的数组。此数组中的条目由 Web 服务器创建。无法保证每个 Web 服务器都会提供其中任何一个;服务器可能会省略一些,或提供此处未列出的其他内容。
它应该是完全安全的,因为它是由服务器生成的。就个人而言,我总是对来自超级全球的任何东西进行消毒,不管它应该有多安全。