php - POST 到同一页面安全;空 vs html实体

标签 php

我正在寻找正确且最安全的方法来发布到同一页面,而无需直接定义页面本身。例如不使用

<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,htmlspecialcharsjson_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/

相关文章:

php - mysql_fetch 不显示

php - 个人资料页面 PHP

php - 没有将正确的值插入 MySQL 数据库

php - 从 MySql 数据库中获取按日期分组的结果

php - 是否可以自动确定文档类型?

php - Doctrine 映射一个不存在的类

php - 如何修复 'ERROR 2002 (HY000): Can' t 通过套接字 '/var/run/mysqld/mysqld.sock' (2 "No such file or directory") 连接到本地 MySQL 服务器'

php - UTF-8 的多字节安全 wordwrap() 函数

php - Paypal SSL 错误

php - 开发动态 jQuery Mobile 移动应用程序的最佳方式是什么?