[英]How is SCRIPT_NAME dangerous in PHP?
我在我的 php 博客站點中使用下面的行,這有什么危險?
<form action="<?php echo $SCRIPT_NAME. "?id=" . $validentry; ?>" method="post">
我還register_global off
和magic_quotes_gpc()
。
我正在使用 php 5.2。
我試過$_SERVER['php_self']
,但這沒有用。
SCRIPT_NAME
和PHP_SELF
大多包含相同的值。 兩者都包含REQUEST_URI
的網絡服務器規范化版本(即刪除了相對路徑部分)。
您在這里的實際安全問題不是使用htmlspecialchars()
。 如前所述,只需使用正確的關鍵案例來輸出PHP_SELF
:
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"], ENT_QUOTES, "utf-8") . $validentry ...
這似乎不會造成任何危險,但它表明您啟用了register_globals
On(如果您不是真的很小心,這可能很危險)。 在您的配置文件中將register_globals
設置為 Off 並使用$_SERVER['SCRIPT_NAME']
或者,最好是$_SERVER['PHP_SELF']
,另請參閱PHP 手冊上有關$_SERVER
superglobal 的頁面,以及此注釋:
$_SERVER["SCRIPT_NAME"] => /admin/products.php (虛擬路徑) $_SERVER["PHP_SELF"] => /admin/products.php/someExtraStuff (虛擬路徑)
SCRIPT_NAME 是在 CGI 1.1 規范中定義的,PHP_SELF 是由 PHP 自己創建的。 有關測試,請參閱http://php.about.com/od/learnphp/qt/_SERVER_PHP.htm 。
我不相信這在 PHP5.2 中有效,除非您自己定義了$SCRIPT_NAME
。
在這種情況下,正確的代碼應該是$_SERVER['SCRIPT_FILENAME']
。
SCRIPT_FILENAME
不是用戶可控的。
$_SERVER['PHP_SELF']
是用戶可控的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.