我正在寻找正确且最安全的方法来发布到同一页面,而无需直接定义页面本身。例如不使用
<form method="post" action="/mypage.php">
尽管这是 PHP 的相当基本的用法,但我发现多个相互矛盾的来源提供了如何执行此操作的建议。目前我只是使用
<form method="post" action="">
有一些消息来源建议(错误?)
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
然而,在阅读更多内容后,one建议建议使用htmlentities()
<form method="post" action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>">
我相信这是针对 xss 漏洞进行清理的最正确方法,但我很好奇如果 action=""
是否需要这样做
最佳答案
对于现代 HTML,只需完全省略 action
属性即可。 HTML 5 定义表单应提交到当前 URL。这是最简单且最不容易出错的选项。
当您将用户输入(例如 URL)回显到浏览器时,请始终对您要放入的文档类型使用适当的转义(对于 HTML,htmlspecialchars
,json_encode
JavaScript 等)以保护自己免受 XSS 侵害。
action
是一个 HTML 属性,因此它没有针对 XSS 的内在防御。
PHP_SELF
是:
The filename of the currently executing script, relative to the document root.
因此,除非您将 HTML 中具有特殊含义的字符放入文件或目录名称之一,否则应该可以安全地回显而不转义。但是:谨慎行事并像对待任何其他要转换为 HTML 的文本一样对待它并使用 htmlspecialchars
并没有什么坏处。所以要谨慎行事。
关于php - POST 到同一页面安全;空 vs html实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27940610/