在PHP页面上的表单中,您可以使用:
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" ...>
Run Code Online (Sandbox Code Playgroud)
要么
<form action="#" ...>
Run Code Online (Sandbox Code Playgroud)
要么
<form action="" ...>
Run Code Online (Sandbox Code Playgroud)
在表单的action属性中.由于echo $_SERVER['PHP_SELF']
不传递变量以供使用GET
而你必须使用""
,为什么要使用它"#"
?
我问,因为我花了一些时间才弄清楚变量是不是通过的$_SERVER['PHP_SELF']
.谢谢.
Nie*_*sol 62
该action
属性将默认为当前URL.这是说"将表单提交到它来自同一个地方"的最可靠和最简单的方法.
没有理由使用$_SERVER['PHP_SELF']
,也#
根本没有提交表单(除非submit
附加了处理提交的事件处理程序).
Thi*_*ter 43
使用空字符串非常精细,实际上比简单使用更安全$_SERVER['PHP_SELF']
.
使用$_SERVER['PHP_SELF']
它时很容易通过简单地附加到URL /<script>...
的whatever.php
一部分之后注入恶意数据,因此您不应该使用此方法并停止使用任何建议它的PHP教程.
Mar*_*ich 23
当您将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="">
Run Code Online (Sandbox Code Playgroud)
我的脚本会运行,你就不会更聪明了.如果您已登录,我可能会窃取您的Cookie,或从您的网页上删除机密信息.
但是,如果您使用<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']) ?>">
,输出将是:
<form action="http://example.com/"><script>cookie_stealing_code()</script><span class="">
Run Code Online (Sandbox Code Playgroud)
当你提交表单时,你会有一个奇怪的URL,但至少我的邪恶脚本没有运行.
另一方面,如果您使用了<form action="">
,那么无论我添加到链接中,输出都是相同的.这是我建议的选项.
Mic*_*a93 11
我知道问题是两年了,但这是我要找的第一个结果.我找到了一个很好的答案,我希望我可以帮助其他用户.
我将简要介绍一下:
使用$_SERVER["PHP_SELF"]
带有htmlspecialchars
()的变量:
`htmlspecialchars($_SERVER["PHP_SELF"]);`
Run Code Online (Sandbox Code Playgroud)PHP_SELF返回当前正在执行的脚本的文件名.
htmlspecialchars
()函数的特殊字符转换为HTML实体. - >没有XSS