在PHP页面上的表单中,您可以使用:
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" ...>
或
<form action="#" ...>
或
<form action="" ...>
在表单的action属性中。由于echo $_SERVER['PHP_SELF']
未传递使用GET
的变量,而您必须使用""
,为什么要使用它或"#"
?
我问,因为我花了一些时间才发现变量没有通过$_SERVER['PHP_SELF']
传递。感谢。
答案 0 :(得分:59)
action
属性将默认为当前网址。这是说“将表格提交到它来自同一个地方”的最可靠和最简单的方法。
没有理由使用$_SERVER['PHP_SELF']
,#
根本不提交表单(除非附加了submit
事件处理程序来处理提交。)
答案 1 :(得分:43)
使用空字符串非常精细,实际上比使用$_SERVER['PHP_SELF']
更安全。
使用$_SERVER['PHP_SELF']
时,只需在/<script>...
部分后添加whatever.php
即可轻松注入恶意数据,因此您不应使用此方法并停止使用任何PHP教程这表明了它。
答案 2 :(得分:22)
当您将 ANY 变量插入HTML时,除非您希望浏览器将变量本身解释为HTML,否则最好在其上使用htmlspecialchars()
。除此之外,它还可以防止黑客在您的页面中插入任意HTML。
$_SERVER['PHP_SELF']
的值直接取自浏览器中输入的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="">
我的脚本会运行,你就不会更聪明了。如果您已登录,我可能会盗取您的Cookie,或从您的信息页中删除机密信息。
但是,如果您使用<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']) ?>">
,则输出为:
<form action="http://example.com/"><script>cookie_stealing_code()</script><span class="">
当您提交表单时,您有一个奇怪的网址,但至少我的恶意剧本没有运行。
另一方面,如果您使用<form action="">
,那么无论我添加到链接中的内容,输出都是相同的。这是我建议的选项。
答案 3 :(得分:10)
我知道问题是两年了,但这是我要找的第一个结果。 我找到了一个很好的答案,我希望我可以帮助其他用户。
我将简要介绍一下:
将$_SERVER["PHP_SELF"]
变量与htmlspecialchars
():
`htmlspecialchars($_SERVER["PHP_SELF"]);`
PHP_SELF返回当前正在执行的脚本的文件名。
htmlspecialchars
()函数将特殊字符转换为HTML实体。
- &GT;没有XSS 答案 4 :(得分:0)
除上述答案外,另一种方法是使用$_SERVER['PHP_SELF']
或仅使用空字符串{@ 1}}。
或强>
如果您的PHP版本较低(<5.3),则更常见的替代方法是使用__DIR__
Both返回上下文中文件的文件夹名称。
修改强>
正如Boann所指出的,这会返回文件的磁盘位置。你不会理想地将其暴露为网址。在这种情况下,dirname(__FILE__)
可以在上下文中返回文件的文件夹名称。
答案 5 :(得分:-2)
没有区别。 $ _SERVER ['PHP_SELF']只会使执行时间减慢0.000001秒。