SCRIPT_NAME如何在PHP中危险?

时间:2011-05-10 13:26:42

标签: php

我在我的php博客网站上使用以下行,这有什么危险?我有register_global offmagic_quotes_gpc()也关闭并使用php 5.2。任何人都可以邀请我,或者替代这个吗?我确实试过$_SERVER['php_self']但是没有用。

<form action="<?php echo $SCRIPT_NAME. "?id=" . $validentry; ?>" method="post">

3 个答案:

答案 0 :(得分:3)

SCRIPT_NAMEPHP_SELF大多包含相同的值。两者都包含REQUEST_URI的网络服务器规范化版本(即删除了相对路径部分)。

此处的实际安全问题未使用htmlspecialchars()。如前所述,只需使用正确的密钥案例输出PHP_SELF

<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"], ENT_QUOTES, "utf-8") . $validentry ...

答案 1 :(得分:1)

这似乎没有带来任何危险,但它表明你有register_globals开(如果你真的不小心可能很危险)。在配置文件中将register_globals设置为关闭并使用$_SERVER['SCRIPT_NAME']或最好$_SERVER['PHP_SELF'],另请参阅this page on the PHP Manual regarding the $_SERVER superglobalthis comment

  

$ _ SERVER [“SCRIPT_NAME”] =&gt;   /admin/products.php(虚拟路径)   $ _SERVER [“PHP_SELF”] =&gt;   /admin/products.php/someExtraStuff   (虚拟路径)

     

SCRIPT_NAME在CGI 1.1中定义   规范,PHP_SELF是由   PHP本身。看到   http://php.about.com/od/learnphp/qt/_SERVER_PHP.htm   用于测试。

答案 2 :(得分:0)

除非您自己定义了$ SCRIPT_NAME,否则我无法相信这在PHP5.2中有效。在这种情况下,正确的代码应该是$ _SERVER ['SCRIPT_FILENAME']。 SCRIPT_FILENAME是非用户可控制的($ _SERVER ['PHP_SELF']是用户可控的)。