PHP安全之用戶(hù)提交的數(shù)據(jù)
很多 PHP 程序所存在的重大弱點(diǎn)并不是 PHP 語(yǔ)言本身的問(wèn)題,而是編程者的安全意識(shí)不高而導(dǎo)致的。因此,必須時(shí)時(shí)注意每一段代碼可能存在的問(wèn)題,去發(fā)現(xiàn)非正確數(shù)據(jù)提交時(shí)可能造成的影響。
Example #1 危險(xiǎn)的變量用法
<?php // 從用戶(hù)目錄中刪除一個(gè)文件,或者……能刪除更多的東西? unlink ($evil_var); // 記錄用戶(hù)的登陸,或者……能否在 /etc/passwd 添加數(shù)據(jù)? fwrite ($fp, $evil_var); // 執(zhí)行一些普通的命令,或者……可以執(zhí)行 rm -rf * ? system ($evil_var); exec ($evil_var);?>
必須時(shí)常留意你的代碼,以確保每一個(gè)從客戶(hù)端提交的變量都經(jīng)過(guò)適當(dāng)?shù)臋z查,然后問(wèn)自己以下一些問(wèn)題:
此腳本是否只能影響所預(yù)期的文件?非正常的數(shù)據(jù)被提交后能否產(chǎn)生作用?此腳本能用于計(jì)劃外的用途嗎?此腳本能否和其它腳本結(jié)合起來(lái)做壞事?是否所有的事務(wù)都被充分記錄了?在寫(xiě)代碼的時(shí)候問(wèn)自己這些問(wèn)題,否則以后可能要為了增加安全性而重寫(xiě)代碼了。注意了這些問(wèn)題的話,也許還不完全能保證系統(tǒng)的安全,但是至少可以提高安全性。
還可以考慮關(guān)閉 register_globals,magic_quotes 或者其它使編程更方便但會(huì)使某個(gè)變量的合法性,來(lái)源和其值被搞亂的設(shè)置。在開(kāi)發(fā)時(shí),可以使用 error_reporting(E_ALL) 模式幫助檢查變量使用前是否有被檢查或被初始化,這樣就可以防止某些非正常的數(shù)據(jù)的撓亂了。
相關(guān)文章:
1. 如何對(duì)php程序中的常見(jiàn)漏洞進(jìn)行攻擊2. PHP循環(huán)與分支知識(shí)點(diǎn)梳理3. JSP+Servlet實(shí)現(xiàn)文件上傳到服務(wù)器功能4. ThinkPHP5 通過(guò)ajax插入圖片并實(shí)時(shí)顯示(完整代碼)5. JavaWeb Servlet中url-pattern的使用6. Spring MVC+ajax進(jìn)行信息驗(yàn)證的方法7. jsp EL表達(dá)式詳解8. ASP中格式化時(shí)間短日期補(bǔ)0變兩位長(zhǎng)日期的方法9. JSP之表單提交get和post的區(qū)別詳解及實(shí)例10. 利用ajax+php實(shí)現(xiàn)商品價(jià)格計(jì)算
