为什么使用$ _SERVER 而不是“”

在PHP页面上的表单中,可以使用:

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" ...> 

要么

 <form action="#" ...> 

要么

 <form action="" ...> 

在表单的action属性中。 由于echo $_SERVER['PHP_SELF']不会传递使用GETvariables,所以您必须使用"" ,为什么要使用那个或"#"

我在问,因为我花了一些时间才发现variables没有通过$_SERVER['PHP_SELF']传递。 谢谢。

action属性将默认为当前的URL。 这是最可靠和最简单的方式来说“把表格提交给它来自同一个地方”。

没有理由使用$_SERVER['PHP_SELF'] ,并且#根本不提交表单(除非有一个submit事件处理程序连接,处理提交)。

使用空string是非常好的,实际上比使用$_SERVER['PHP_SELF']更安全。

当使用$_SERVER['PHP_SELF'] ,通过在URL的whatever.php部分简单地追加/<script>...来注入恶意数据是非常容易的,所以你不应该使用这个方法并停止使用任何PHP教程暗示它。

任意variables插入HTML时,除非您希望浏览器将variables本身解释为HTML,否则最好使用htmlspecialchars() 。 除此之外,它可以防止黑客在你的页面插入任意的HTML。

$_SERVER['PHP_SELF']值直接取自在浏览器中input的URL。 因此,如果你没有使用htmlspecialchars() ,你可以让黑客直接操纵你的代码输出。

例如,如果我通过电子邮件发送到http://example.com/"><script>malicious_code_here()</script><span class="的链接,并且您有<form action="<?php echo $_SERVER['PHP_SELF'] ?>"> ,输出将是:

 <form action="http://example.com/"><script>malicious_code_here()</script><span class=""> 

我的脚本将会运行,而且你将不会更聪明。 如果您已经login,我可能已经窃取了您的Cookie,或者从您的页面上窃取了机密信息。

但是,如果使用<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']) ?>"> ,则输出结果为:

 <form action="http://example.com/&quot;&gt;&lt;script&gt;cookie_stealing_code()&lt;/script&gt;&lt;span class=&quot;"> 

当你提交表单时,你会有一个奇怪的URL,但至less我的邪恶脚本没有运行。

另一方面,如果你使用<form action=""> ,那么输出将是相同的,不pipe我添加到我的链接。 这是我会推荐的选项。

我知道这个问题已经两年了,但这是我所寻找的第一个结果。 我find了一个很好的答案,我希望我可以帮助其他用户。

看这个

我简单地说:

  • 使用$ _SERVER [“PHP_SELF”]variables与htmlspecialchars():htmlspecialchars($ _ SERVER [“PHP_SELF”]);
  • PHP_SELF返回当前正在执行的脚本的文件名
  • htmlspecialchars()函数将特殊字符转换为HTML实体。 – >没有XSS

除了上面的答案之外,另一种做法是$_SERVER['PHP_SELF']或者简单地使用一个空string就是使用__DIR__
要么
如果您使用的是较低的PHP版本(<5.3),则更常见的select是使用dirname(__FILE__)
两者都在上下文中返回文件的文件夹名称。

编辑
正如Boann指出的那样,这将返回文件的磁盘位置。 那么你不会理想地显示为一个url。 在这种情况下, dirname($_SERVER['PHP_SELF'])可以在上下文中返回文件的文件夹名称。

没有区别。 $ _SERVER ['PHP_SELF']只是使执行时间降低了0.000001秒。