PHP安全(二)PHP變數覆蓋
阿新 • • 發佈:2022-03-29
記錄筆記之前先說明一下什麼叫做變數覆蓋漏洞;
變數覆蓋漏洞是指自定義的引數替換原有變數值的情況,如$$使用不當,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 中已經不支援。