在PHP中使用超全局`$ _SERVER ['PHP_SELF']`有什么好处?

pro*_*yb2 0 php superglobals

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

aar*_*ing 14

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

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

您可以使用它来填写表单标记的action属性:

<form method="post" action="<?=$_SERVER['PHP_SELF']?>"></form> 
Run Code Online (Sandbox Code Playgroud)

如果我然后用以下内容调用您的页面

your-file-that-uses-php-self.php/("><script>eval-javascript-here</script>)
Run Code Online (Sandbox Code Playgroud)

在parens的所有东西都是urlencoded然后我可以将代码注入你的页面.如果我将该链接发送给其他人,那么我将在您的浏览器中从您的网站执行该代码.

编辑: 为了使其免受XSS攻击,请使用htmlspecialchars:

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

编辑2:由于此$_SERVER变量在跨网络的示例中经常被滥用,所以不要错过阅读HTML引用:由于该URI是最短的相对URI,您可以将action属性留空:

<form action="" method="post" >...</form>
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢这个部分*它的用途很大程度上是为了引入跨站点脚本漏洞*...今天我的最后一个upvote! (10认同)
  • 显然.Net是万无一失的. (6认同)
  • @alex谢谢.@Jake我完全理解.PHP让你很容易在脚下射击.只要你坚持基础知识就可以保护PHP应用程序(例如,不要相信用户的任何东西).问题是你需要很好地了解系统以了解用户的信息. (2认同)