我总是使用表格
<form method="post" action="<?php echo strip_tags($_SERVER['REQUEST_URI']); ?>">
让我的表格提交给自己。
我使用striptags()
以防有人链接到:
http://www.mysite.com/page-with-form.php?bla="><script src="http://www.nasty.com/super-nasty.js"></script><a href="#
我是否已覆盖所有基础,以防止XSS攻击,或者我应该使用更白名单的方法,例如只允许使用字母数字字符,正斜杠,问号,等号,括号等的正则表达式?
谢谢!
答案 0 :(得分:6)
使用htmlspecialchars
代替strip_tags
。
答案 1 :(得分:3)
如果你想引用相同的模式/主机/路径,那么一个简单的动作=“?”应该足够了。 根据{{3}}
relative-ref = relative-part [ "?" query ] [ "#" fragment ] relative-part = "//" authority path-abempty / path-absolute / path-noscheme / path-empty
这是一个有效的亲戚。
答案 2 :(得分:2)
将表单发送给自己:
$_SERVER["PHP_SELF"]
该全局变量将输出当前页面。除非你有理由需要整个查询字符串吗?
修改强>
由于VolkerK在评论中指出,即使PHP_SELF
容易受到攻击,您也可以根据PHP_SELF
编写自己的小变量,并将您知道不属于的URI的其余部分分解出来你网页的一部分。像这样:
$file_ext = '.php'; //knowing what file extension your URI is
$page_on = $_SERVER["PHP_SELF"]; //grab this page, with all that junk
$page_huh = explode($file_ext, $page_on); //blow it apart based on file ext
$page_on = $page_huh[0].$file_ext; //attach the leg back onto the URI
echo $page_on;
答案 3 :(得分:0)
如果您的striptags()
仅剥离标记(“&lt;”和“&gt;”之间的字符,包括尖括号),则有人仍可以注入javascript:
http://www.mysite.com/page-with-form.php?bla=" onsubmit="return function(){ /*nasty code here*/ }()" style="
更好地将HTML,Javascript和CSS中的每个可能元字符列入白名单(即尖括号,括号,大括号,分号,双引号,单引号等)。
答案 4 :(得分:0)
如果您希望表单提交给自己,请将操作留空,例如
<form action="" method="POST">
...
</form>