PHP 全域變數 與 SESSION 漏洞(global 與 session)

來源:互聯網
上載者:User

先看這一段簡單的代碼
<?php
session_start();$_SESSION['isadmin']='yes';$isadmin='no';echo $_SESSION['isadmin'];?>
當php.ini裡配置 register_globals = Off 時,
沒任何問題,
輸出 yes但是
當php.ini裡配置 register_globals = On 的時候,
第一次運行輸出 yes
而重新整理一下,則顯示的是 no顯然這是不正常的,
這是個很奇怪的問題,
如果說是 $isadmin='no'; 改變了SESSION,
那麼為什麼第一次會顯示yes呢?都知道:當配置 register_globals = On 的時候,
通過 xxx.php?id=123 訪問時,程式會自動建立變數 id
那麼自動建立的變數會不會改變SESSION呢?
測試代碼
<?php
//xxx.php
session_start();
echo $_SESSION['id'];
?>
通過 xxx.php?id=123 訪問,沒任何輸出,
還好,不然不知道將有多少
採用 SESSION 做登入的
而PHP配置 register_globals 為 On 的網站
將被隨便登入。還有兩個常用的函數 import_request_variables() 和 extract()
import_request_variables -- 將 GET/POST/Cookie 變數匯入到全域範圍中
extract --  從數組中將變數匯入到當前的符號表
<?php
//xxx.phpimport_request_variables('G');
echo $id;?>
當通過xxx.php?id=123訪問的時候,
就算 register_globals 設為 Off
也是會輸出123extract($_GET) 與 import_request_variables('G') 功能相似那麼試試import_request_variables() 與 extract()建立的變數會不會影響SESSION呢?
測試代碼
<?php
//xxx.php
session_start();import_request_variables('G');echo $_SESSION['id'];
?>
當通過xxx.php?id=123訪問程式,
沒有輸出,再用extract($_GET)代替import_request_variables('G')測試,
還是沒輸出,這一點又很奇怪了,因為測試
<?php
session_start();
$arr=array('id'=>123);
extract($arr);
echo $_SESSION['id'];
?>
register_globals 為 On 時
會輸出 123看來同樣是數組,
extract 處理 $_GET 與處理定義的數組
用的是不一樣的方法。結論:
register_globals 為 On 的時候,
用import_request_variables('G')和extract($_GET)建立的變數是不會改變SESSION的。總結:漏洞只存在於PHP配置register_globals = On的時候,定義的變數會改變同名的SESSION。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.