$_SERVER變數 以及 PHP 使用 $_SERVER['PHP_SELF'] 擷取當前頁面地址及其安全性問題

來源:互聯網
上載者:User

標籤:包含   index.php   orm   roo   test   base   str   擷取   處理   

PHP $_SERVER[‘PHP_SELF‘]

$_SERVER[‘PHP_SELF‘] 表示當前 php 檔案相對於網站根目錄的位置地址,與 document root 相關。

假設我們有如下網址,$_SERVER[‘PHP_SELF‘]得到的結果分別為:

http://www.5idev.com/php/ :/php/index.phphttp://www.5idev.com/php/index.php :/php/index.phphttp://www.5idev.com/php/index.php?test=foo :/php/index.phphttp://www.5idev.com/php/index.php/test/foo :/php/index.php/test/foo

因此,可以使用 $_SERVER[‘PHP_SELF‘] 很方便的擷取當前頁面的地址:

$url = "http://".$_SERVER[‘HTTP_HOST‘].$_SERVER[‘PHP_SELF‘];

以上面的地址為例,得到的結果如下:

http://www.5idev.com/php/index.php

上面是簡單擷取 http 協議的當前頁面 URL ,只是要注意該地址是不包含 URL 中請求的參數(?及後面的字串)的。如果希望得到包含請求參數的完整 URL 地址,請使用 $_SERVER[‘REQUEST_URI‘] 。

PHP $_SERVER[‘PHP_SELF‘] 安全性

由於利用 $_SERVER[‘PHP_SELF‘] 可以很方便的擷取當前頁面地址,因此一些程式員在提交表單資料到當前頁面進行處理時,往往喜歡使用如下這種方式:

<form method="post" action="<?php echo $_SERVER[‘PHP_SELF‘]; ?>">

假設該頁面地址為:

http://www.5idev.com/php/index.php

訪問該頁面,得到的表單 html 代碼如下:

<form method="post" action="/php/index.php">

這段代碼是正確的,但是當訪問地址變成:

http://www.5idev.com/php/index.php/test/foo

頁面正常執行了,表單 html 代碼變成:

<form method="post" action="/php/index.php/test/foo">

顯然這段代碼不是我們期望的,攻擊者可以在 URL 後面隨意加上攻擊代碼。要解決該問題,可以:

  1. 使用 htmlentities($_SERVER[‘PHP_SELF‘]) 替代 $_SERVER[‘PHP_SELF‘],讓 URL 中可能的惡意代碼轉換為用於顯示的 html 代碼而無法執行。
  2. 可以的條件下,使用 $_SERVER[‘SCRIPT_NAME‘] 或 $_SERVER[‘REQUEST_URI‘] 替代 $_SERVER[‘PHP_SELF‘]
  3. 在公用代碼裡將 $_SERVER[‘PHP_SELF‘] 進行重寫:
$phpfile = basename(__FILE__);$_SERVER[‘PHP_SELF‘] = substr($_SERVER[‘PHP_SELF‘], 0, strpos($_SERVER[‘PHP_SELF‘], $phpfile)).$phpfile; 

$_SERVER變數 以及 PHP 使用 $_SERVER['PHP_SELF'] 擷取當前頁面地址及其安全性問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.