繁体   English   中英

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

[英]Is it safe to use $_SERVER[“SCRIPT_NAME”]

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

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

我有三个问题:

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

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

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

$_SERVER['SCRIPT_NAME']是服务器端的。 因此没有浏览器兼容性问题,并且不应该存在安全问题,因为它只是指示服务器为请求的URL服务的内容(即http://example.com/http://示例。 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 不会为您清理/编码这些变量。 您应编码并检查ALWAYS和所有输入,包括“ 由服务器生成的 ”输入

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

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

?>

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

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

PHP.net

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

它应该是完全安全的,因为它是由服务器生成的。 就个人而言,我总是从超级全球化中消毒任何东西,无论它应该是多么安全。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM