1

使用我一直使用的表格

<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 攻击,或者我应该使用更多的白名单方法,比如只允许字母数字字符、正斜杠、问号、等号、括号等的正则表达式?

谢谢!

4

5 回答 5

6

使用htmlspecialchars而不是strip_tags.

于 2009-03-05T06:12:41.627 回答
3

如果你想引用相同的模式/主机/路径一个简单的动作=“?” 应该够了。根据https://www.rfc-editor.org/rfc/rfc3986#section-4.2

相对参考=相对部分[“?” 查询] [“#”片段]

      relative-part = "//" 权限路径-abempty
                    /绝对路径
                    /路径-noscheme
                    / 路径为空

这是一个有效的相对 uri。

于 2009-03-05T06:17:11.307 回答
2

通过将表单发送到此来提交表单:

$_SERVER["PHP_SELF"]

该全局变量将输出当前页面。除非有理由需要整个查询字符串吗?

编辑

正如 VolkerK 在评论中指出的那样,evenPHP_SELF是易受攻击的,您可以根据 URI 编写自己的小变量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;
于 2009-03-05T05:50:00.277 回答
0

如果您striptags()只去除标签(“<”和“>”之间的字符,包括尖括号),仍然有人可以注入 javascript:

http://www.mysite.com/page-with-form.php?bla=" onsubmit="return function(){ /*nasty code here*/ }()" style="

更好地将 HTML、Javascript 和 CSS 中所有可能的元字符列入白名单(即尖括号、圆括号、大括号、分号、双引号、单引号等)。

于 2009-03-05T05:56:25.927 回答
0

如果您希望表单提交给自己,只需将操作留空,例如

<form action="" method="POST">
...
</form>
于 2009-03-10T03:59:02.203 回答