1. 程式人生 > 其它 >PHP安全(二)PHP變數覆蓋

PHP安全(二)PHP變數覆蓋

記錄筆記之前先說明一下什麼叫做變數覆蓋漏洞;

變數覆蓋漏洞是指自定義的引數替換原有變數值的情況,如$$使用不當,extract函式使用不當,parse_str() 函式使用不當,import_request_variables() 使用不當,開啟了全域性變數註冊等。

 1、全域性變數

顧名思義是全域性都可以使用的變數,任何的物件或者是函式都可以使用,與之對應的區域性變數,只能在定義的類或方法內部使用。

2、$$變數覆蓋問題

在PHP中變數是以$符號開頭命名的,所以$$可變變數就是以一個變數的值作為一個變數的名。直接說可能不是很好理解,舉一個例子來說明。

<?php
$a="qwe";
$qwe=1232;


var_dump($$a);
?>

執行結果int(1232)

3、extract()函式變數覆蓋

extract() 函式從陣列中把變數匯入到當前的符號表中。對於陣列中的每個元素,鍵名用於變數名,鍵值用於變數值。

<?php
$b = array("a" => "one","b" => "tow");
extract($b);
echo "\$a = $a\n\$b = $b";
?>

執行結果

$a = one
$b = tow

這裡補充一下->和=> 的意義和區別

->用來引用物件的成員(屬性與方法);=>符號來分隔鍵和值,左側表示鍵,右側表示值。簡單來說就是給別人起一個外號,用外號來代表某個人,提起他的外號,就可以知道他是誰的意思。

4、parse_str函式變數覆蓋

parse_str() 函式用於把查詢字串解析到變數中,如果沒有array 引數,則由該函式設定的變數將覆蓋已存在的同名變數。

5、import_request_variables函式變數覆蓋

import_request_variables() 函式將 GET/POST/Cookie 變數匯入到全域性作用域中。該函式在最新版本的 PHP 中已經不支援。