我不想将GET或POST变量传递给脚本。我想使用文件名并使用它从php脚本中查找产品,例如:
......./DELL1500.php
......./COMPAQ1213.php
我有三个问题:
PHP从$_SERVER["SCRIPT_NAME"]
获取数据的位置是来自服务器还是客户端浏览器?
有人能想到使用它的任何安全问题吗?
无论如何,这可能与任何旧浏览器不兼容。我假设它不是由服务器提供的吗?
答案 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服务器都能提供这些服务;服务器可以省略一些,或提供此处未列出的其他服务器。
使用它应该是完全安全的,因为它是由服务器生成的。从个人角度来说,无论它应该是多么安全,我总是会对超级全球的东西进行消毒。