为什么使用$ _SERVER 而不是“”
在PHP页面上的表单中,可以使用:
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" ...>
要么
<form action="#" ...>
要么
<form action="" ...>
在表单的action属性中。 由于echo $_SERVER['PHP_SELF']
不会传递使用GET
variables,所以您必须使用""
,为什么要使用那个或"#"
?
我在问,因为我花了一些时间才发现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/"><script>cookie_stealing_code()</script><span class="">
当你提交表单时,你会有一个奇怪的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秒。