使用PHP_自危险获取pagename?
我正在考虑使用PHP_SELF获取用户当前访问的页面名称。我很清楚在表单操作之类的地方使用PHP_SELF的危险性,尽管我不确定在hrefs中使用它会有什么坏处?但这与主要问题无关。无论如何 使用PHP_SELF抓取用户所在的页面并使用使用PHP_自危险获取pagename?,php,security,Php,Security,我正在考虑使用PHP_SELF获取用户当前访问的页面名称。我很清楚在表单操作之类的地方使用PHP_SELF的危险性,尽管我不确定在hrefs中使用它会有什么坏处?但这与主要问题无关。无论如何 使用PHP_SELF抓取用户所在的页面并使用str_replace()从中获取所需信息是否存在任何危险?我想不出有什么,但这当然是一个好去处 谢谢 是的,可能是因为它是攻击者控制的变量。它可能导致诸如xss之类的漏洞 <?php print $_SERVER['PHP_SELF']?> htt
str_replace()
从中获取所需信息是否存在任何危险?我想不出有什么,但这当然是一个好去处
谢谢 是的,可能是因为它是攻击者控制的变量。它可能导致诸如xss之类的漏洞
<?php print $_SERVER['PHP_SELF']?>
http://localhost/self.php/<script>alert(1)</script>
http://localhost/self.php/alert(1)
如果可能,您应该使用攻击者无法控制的变量,如
$\u SERVER[“SCRIPT\u FILENAME”]
。还有一些其他的,只要检查一下。如果你需要整个URL的检查。否则,使用$\u SERVER['REQUEST\u URI']获取当前页面的URI(如果url为example.com/foo/bar.php,它将为您提供foo/bar.php)。使用str\u replace(),您到底在做什么?除去实际页面名称之外的所有内容。例如,如果我有/directory/page.php
,我就在“page”之后。不知怎么的,我看不出你如何用str_replace()实现这一点,那么让我来帮你。您可以使用substr('foo/bar.php/x',0,strpos('foo/bar.php/x',')其中
是要用作删除所有其他内容的起点的字符。或者您可以使用它获取实际的文件名(首先剥离路径),然后使用str_replace()删除.php
部分。即使我剥离了除当前页面名以外的所有内容?我会检查.php扩展名(所有被检查的扩展名都会以.php结尾),然后去掉它后面的所有内容。@conLo听起来很容易出错。您应该使用攻击者无法控制的变量,如$\u SERVER[“SCRIPT\u FILENAME”]
我不确定哪一个最安全。我读过一些文章,其中整个$\u服务器
容易受到某种攻击。当然,对我来说,我用哪一个没有什么区别。他们都得出了相同的结论。因此,您可以安全地用PHP\u SELF替换任何$\u服务器
变量。@conLo我不知道您指的是什么,只关心数据的使用方式。大多数$\u服务器变量都可以由攻击者控制,但$\u GET、$\u POST$\u COOKIE和$\u请求始终由攻击者控制。如果有人好奇,我最终使用了$\u服务器['SCRIPT\u NAME']
,因为它不关心路径信息,将其分解成数组,反转数组,并使用substr()
和strpos()
来做他们的事情。我已经检查了这个页面(和其他几个页面),但还没有得到一个直接的答案,关于它仍然是危险的做我试图用它。