【问题标题】:What is the benefit of using the super global `$_SERVER['PHP_SELF']` in PHP?在 PHP 中使用超级全局 `$_SERVER['PHP_SELF']` 有什么好处?
【发布时间】:2010-08-10 06:08:08
【问题描述】:

使用超级全局$_SERVER['PHP_SELF']有什么好处?

【问题讨论】:

  • 我不知道你在问什么。
  • 如果你不懂 PHP 也没关系。
  • 请注意,如果您使用的是$PHP_SELF,请关闭寄存器全局变量:)
  • 我认为 The Rook 是说您的问题缺乏上下文。为什么不描述一下你想要做什么?

标签: php superglobals


【解决方案1】:

$_SERVER['PHP_SELF'] 不(或不应该)包含域名。它包括调用脚本的 url 的路径组件。

它的用途主要是引入跨站脚本漏洞。

你可以用它来填写表单标签的action属性:

<form method="post" action="<?=$_SERVER['PHP_SELF']?>"></form> 

如果我随后调用您的页面:

your-file-that-uses-php-self.php/("><script>eval-javascript-here</script>)

parens 中的所有内容都是 urlencoded,然后我可以将代码注入您的页面。如果我将该链接发送给其他人,那么我正在他们的浏览器中从您的站点执行该代码。

编辑: 为了防止 XSS 攻击,请使用htmlspecialchars

<form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>">...</form> 

编辑 2: 由于这个 $_SERVER 变量在互联网上的示例中经常被滥用,所以不要错过阅读您的 HTML 参考:因为该 URI 是最短的相对 URI ,您可以将 action 属性留空:

<form action="" method="post" >...</form>

【讨论】:

  • 我喜欢那部分它的用途主要是引入跨站脚本漏洞...今天给我最后一票!
  • 这也是我转向 .NET 进行 Web 开发的部分原因。 :)
  • 显然 .Net 是万无一失的。
  • 这就是为什么你应该为你的输出使用正确的编码。
  • @alex 谢谢。 @Jake 我完全理解。 PHP 让你非常容易自爆。只要您坚持基本原则,就可以保护 PHP 应用程序(例如,不要相信来自用户的任何东西)。问题是您需要对系统有足够的了解才能知道来自用户的内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-15
  • 2019-07-03
  • 1970-01-01
  • 1970-01-01
  • 2019-04-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多