站長修改代碼時容易忽略的三點安全問題 |
發布時間: 2012/5/18 15:33:22 |
作為一個網站站長,尤其是新站站長,有時候為了修改網站的功能、添加網站的特色,就不得不自己寫一些代碼。在這個過程中,若出現一點錯誤,可能就會給網站帶災難性安全危機。即使網站原本是由專業開發團隊開發上線的,有較好的安全性,但是在木桶原理的作用下,你添加的那幾行錯誤代碼,完全可以導致整個網站的安全機制土崩瓦解。
現在將EeSafe網站安全聯盟列出幾點使用php架構的網站常出現的代碼級安全問題,希望對站長的修改代碼工作有一定的幫助。大家有什么疑問,可以到EeSafe網絡安全中心交流,EeSafe期待和大家共同進步 1.現在最常見的php代碼編寫上的安全問題 PHP全局變量危害代碼: 看上去這段代碼很正確,但其實有個致命的錯誤,它假定$isadmin在沒賦值的時候是空值,但由于php語言為了使php代碼訪問用戶的輸入盡可能容易,php把輸入數據作為全局變量來處理。所以攻擊者可以創建任意全局變量并賦值。 如何避免這樣最容易被會略的問題,如果你網站使用的是PHP程序開發,如果你已經這樣做了,并且web應用程序變量很多的話,最節省效率的辦法就是修改php的track_vars選項。 2.網站雙條件認證安全問題 判斷用戶名和密碼,先判斷是否為空,然后從數據數據庫找同時符合條件的數據。 如果采用這樣的邏輯將直接導致sql注入。 如果你要增加或修改這樣的功能,程序邏輯應該是:首先,找到數據庫中用戶名符合的數據(當然用戶名在數據庫中必須是唯一的),然后查看這條數據中對應的密碼是否和要驗證的密碼相同,這樣就避免雙認證問題。 3.用用戶名去判斷用戶權限 很多網站都有這樣的問題,比如 If(!username) { return false; } If($username==’admin’) { echo “歡迎管理員登陸”; return true; } 看上去這個也沒有邏輯問題,但為什么還是存在安全漏洞?是因為很多數據庫對特殊字符都不處理,比如mysql這樣的數據庫,如果輸入的字符在ASCII碼129~255范圍內,是不做處理的,也就是如果注冊用戶使用“admin+特殊字符”時,他也同樣能夠成功注冊一個名為admin的用戶,安全機制消失了。 本文出自:億恩科技【www.laynepeng.cn】 |