“如何”;防篡改“;是php中的$\u服务器变量吗?

“如何”;防篡改“;是php中的$\u服务器变量吗?,php,security,tampering,Php,Security,Tampering,通过信任$\u服务器变量数组的内容来使用$\u服务器['php\u SELF']获取php文件的名称,我会冒很大的安全风险吗?没有有效的特殊机制来保护此变量。您可以像写入任何其他变量一样写入它。因此,您必须像任何其他变量一样保护它不被篡改(禁用register_globals、避免变量等)。那你就可以相信它了 作为一种解决方法,您可以在程序的早期定义自己的常量: define('SCRIPT_FILENAME',$_SERVER['SCRIPT_FILENAME']); 并在可用的情况下使用预

通过信任$\u服务器变量数组的内容来使用$\u服务器['php\u SELF']获取php文件的名称,我会冒很大的安全风险吗?

没有有效的特殊机制来保护此变量。您可以像写入任何其他变量一样写入它。因此,您必须像任何其他变量一样保护它不被篡改(禁用register_globals、避免变量等)。那你就可以相信它了

作为一种解决方法,您可以在程序的早期定义自己的常量:

define('SCRIPT_FILENAME',$_SERVER['SCRIPT_FILENAME']);
并在可用的情况下使用预定义的常量,例如来自以下位置的
\uuuuuu文件

此数组中的条目由web服务器创建。不能保证每个web服务器都会提供这些服务;服务器可能会忽略一些,或者提供此处未列出的其他服务器


因此,如果您知道所有有权更改服务器配置的用户(以及会话中可能修改变量内容的所有脚本),您可以合理地确定
$\u服务器
变量的数据。

一点也不,只要您不使用来自用户的数据,这实际上就不会有任何风险。也就是说,使用其中一种:

echo __FILE__;
// is the same as
echo $_SERVER["SCRIPT_FILENAME"];

echo $_SERVER["SCRIPT_NAME"];
// SCRIPT_NAME contains just the path
。例如,
$\u服务器['SCRIPT\u NAME']
是安全的,而as
$\u服务器['PHP\u SELF']
是一个危险的变量,通常是xss的来源:

<?php
echo $_SEVER['PHP_SELF'];
?>

PoC:

http://localhost/self.php/alert(/xss/)

通过查看,很容易看到此漏洞的实际情况。

您需要向我们提供更多详细信息。你在看哪个变量,在什么环境下使用它?@Aurel300,这可能是我的猜测,但我以前被愚弄过……你得到了错误的答案。检查我的。注意这并不总是正确的<代码>$\u服务器['HTTP\u HOST']
可由用户更改。请注意,请合理确定。OP关注的是
PHP\u SELF
,而不是
HTTP\u HOST
:)“文件”在包含的文件中不起作用。我没有检查,但我非常确定$\u服务器['SCRIPT\u FILENAME']提供了请求脚本的路径,而
\uu FILE\uuu
提供了它所使用的文件的路径,这是一件完全不同的事情。确定。不过手册里有。但是无论如何,最重要的是获取包含的文件的名称,而不是包含的文件-打开的文件和更多包含的文件仍然是相对于“父”文件的路径的。Rook,你能给我指一些关于为什么$\u SEVER['PHP\u SELF']是危险的,为什么$\u SERVER['SCRIPT\u name']是安全的文档吗?我不太了解$\u服务器中的不同值,希望了解更多。@Chris J,当然没问题,我假设您运行了我的xss漏洞示例。但也许一个更好的例子是phpinfo:哇,太棒了$_服务器['SCRIPT_NAME']是文件名,不能再强制$\u服务器['PHP_SELF']将“/alert(/xss/)”作为其文件名的一部分。接得好,谢谢!
http://localhost/self.php/<script>alert(/xss/)</script>