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