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

时间:2010-08-10 06:08:09

标签: php superglobals

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

1 个答案:

答案 0 :(得分:14)

$_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>