【问题标题】:Which is more secure ? PHP_SELF or "" [duplicate]哪个更安全? PHP_SELF 或 "" [重复]
【发布时间】:2014-10-31 09:52:12
【问题描述】:

通常在 php 中发布表单时,我使用

<form action="" method="POST">
//somtehing something
</form>

但在过去的几个小时里,我在浏览 stackoverflow 时遇到了两个不同的线程,它们都声称一种方法比另一种方法更安全。现在我很困惑哪一个是安全方法

First post 声称该表单

action="" 

比表单更安全

action="<?$_SERVER['PHP_SELF']"

现在我很困惑我应该选择哪一个。我请这里的一些高级成员对这个话题有所了解。还请解释如果我使用一种方法而不是另一种方法,那么为什么它更安全

【问题讨论】:

  • action="&lt;?$_SERVER['PHP_SELF']" 实际上不会做任何事情,除非你真的回应它.. &lt;?= .. ?&gt;&lt;?php echo ... ?&gt;
  • 公平地说,没有一个答案解释了如何利用 PHP_SELF。我添加了一个尝试这样做的答案:stackoverflow.com/a/25703224/387347

标签: php security


【解决方案1】:

正如 MrTux 所说,首选方法是将action 属性留空。

使用$_SERVER['PHP_SELF']$_SERVER['REQUEST_URI'] 填充它的选项将使您的脚本为跨站点脚本打开。

阅读 MrTux 的 cmets 了解更多详情。

因此,只需将 action 属性完全从您的表单标签中删除,它将自动默认为当前页面,您会没事的。

【讨论】:

  • 嗯,确实有。如果你只是在 PHP 中使用 action="&lt;?=$_SERVER['PHP_SELF']",那么只需将 ?"&gt;&lt;script&gt;alert("evil");&lt;/script&gt;&lt;" 添加到 URL 中,看看会发生什么......
  • @MrTux 你说的 REQUEST_URI 是对的,但是 PHP_SELF 不包括变量。
  • 你是对的 ;),但这并不能解决问题。只需在末尾添加/"&gt;&lt;script&gt;alert("evil");&lt;/script&gt;&lt;"(作为 PATH_INFO 而不是 QUERY_STRING)。同样的问题
  • @MrTux 哇!好收获!
  • @MrTux 确实是一个不错的选择...添加您的答案,我将删除此答案。我总是最终使用空操作,但从未考虑过实际使用 php_self 的跨站点脚本含义。如果您懒得添加您的答案,我会用您的信息编辑我的,以便问题有一个可靠的答案。再次:不错的收获..
猜你喜欢
  • 1970-01-01
  • 2010-10-09
  • 2016-02-13
  • 2011-11-11
  • 2018-10-20
  • 2011-05-20
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多