server php self_PHP 使用 $_SERVER[''PHP_SELF''] 获取当前页面地址及其安全性问题[转载]...
PHP $_SERVER['PHP_SELF']
$_SERVER['PHP_SELF'] 表示當前 php 文件相對于網(wǎng)站根目錄的位置地址,與 document root 相關(guān)。
假設(shè)我們有如下網(wǎng)址,$_SERVER['PHP_SELF']得到的結(jié)果分別為:http://www.5idev.com/php/ :/php/index.php
http://www.5idev.com/php/index.php :/php/index.php
http://www.5idev.com/php/index.php?test=foo :/php/index.php
http://www.5idev.com/php/index.php/test/foo :/php/index.php/test/foo
因此,可以使用 $_SERVER['PHP_SELF'] 很方便的獲取當前頁面的地址:$url = "http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
以上面的地址為例,得到的結(jié)果如下:http://www.5idev.com/php/index.php
上面是簡單獲取 http 協(xié)議的當前頁面 URL ,只是要注意該地址是不包含 URL 中請求的參數(shù)(?及后面的字串)的。如果希望得到包含請求參數(shù)的完整 URL 地址,請使用 $_SERVER['REQUEST_URI'] 。
PHP $_SERVER['PHP_SELF'] 安全性
由于利用 $_SERVER['PHP_SELF'] 可以很方便的獲取當前頁面地址,因此一些程序員在提交表單數(shù)據(jù)到當前頁面進行處理時,往往喜歡使用如下這種方式:
假設(shè)該頁面地址為:http://www.5idev.com/php/index.php
訪問該頁面,得到的表單 html 代碼如下:
這段代碼是正確的,但是當訪問地址變成:http://www.5idev.com/php/index.php/test/foo
頁面正常執(zhí)行了,表單 html 代碼變成:
顯然這段代碼不是我們期望的,攻擊者可以在 URL 后面隨意加上攻擊代碼。要解決該問題,可以:使用 htmlentities($_SERVER['PHP_SELF']) 替代 $_SERVER['PHP_SELF'],讓 URL 中可能的惡意代碼轉(zhuǎn)換為用于顯示的 html 代碼而無法執(zhí)行。
可以的條件下,使用 $_SERVER['SCRIPT_NAME'] 或 $_SERVER['REQUEST_URI'] 替代 $_SERVER['PHP_SELF']
在公共代碼里將 $_SERVER['PHP_SELF'] 進行重寫:$phpfile = basename(__FILE__);
$_SERVER['PHP_SELF'] = substr($_SERVER['PHP_SELF'], 0, strpos($_SERVER['PHP_SELF'], $phpfile)).$phpfile;
總結(jié)
以上是生活随笔為你收集整理的server php self_PHP 使用 $_SERVER[''PHP_SELF''] 获取当前页面地址及其安全性问题[转载]...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java如何开发bpm系统_java工作
- 下一篇: php rdkafka实例,kafka