我在我的php博客网站上使用以下行,这有什么危险?我有register_global off
和magic_quotes_gpc()
也关闭并使用php 5.2。任何人都可以邀请我,或者替代这个吗?我确实试过$_SERVER['php_self']
但是没有用。
<form action="<?php echo $SCRIPT_NAME. "?id=" . $validentry; ?>" method="post">
答案 0 :(得分:3)
SCRIPT_NAME
和PHP_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
superglobal和this 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']是用户可控的)。