畢業(yè)生的商業(yè)軟件開發(fā)之路-最小權(quán)限原則
最小權(quán)限原則
C#是基于.NET框架的,而.NET框架相對于微軟以前的軟件開發(fā)框架來說對安全性進(jìn)行了本質(zhì)性的提升,此時(shí)使用C#進(jìn)行軟件開發(fā)時(shí)需要注意最小權(quán)限申請?jiān)瓌t。
所謂最小權(quán)限原則就是軟件在保證功能能正常執(zhí)行的情況下,只訪問當(dāng)下所需的信息或者資源,而盡量避免訪問不需要的信息或資源,應(yīng)用程序?qū)ο到y(tǒng)的權(quán)限只能剛剛好讓程序功能正常運(yùn)行;也就是程序高風(fēng)亮節(jié),主動(dòng)放棄權(quán)限,以示清白。
可以這么理解最小權(quán)限原則,對于人類社會(huì),絕對的權(quán)力導(dǎo)致絕對的腐敗,也就是說一個(gè)人權(quán)力如果非常大,必然會(huì)導(dǎo)致腐敗,會(huì)占據(jù)大量的社會(huì)資源而不合理利用,其個(gè)人行為會(huì)沖擊社會(huì)的穩(wěn)定,破壞社會(huì)公平,影響社會(huì)穩(wěn)定。因此需要建立一套社會(huì)制度,使得每個(gè)人不能擁有太大的權(quán)力,權(quán)力必須受到制約,社會(huì)才能和諧發(fā)展。
同樣,對于計(jì)算機(jī)的世界,絕對的權(quán)力也導(dǎo)致絕對的安全風(fēng)險(xiǎn),一個(gè)程序具有太大的權(quán)限,必然會(huì)導(dǎo)致系統(tǒng)的不穩(wěn)定,因?yàn)闆]有什么程序是絕對穩(wěn)定可靠的,高權(quán)限的程序可能有意或者無意的占據(jù)著大量的系統(tǒng)資源而不合理利用,個(gè)別程序的錯(cuò)誤會(huì)導(dǎo)致整個(gè)系統(tǒng)的崩潰。因此程序不能擁有過量的權(quán)限,只能擁有盡可能少的權(quán)限,這樣整個(gè)系統(tǒng)才能安全穩(wěn)定。這就是最小權(quán)限原則。
例如下圖所示,某應(yīng)用程序只需要連接數(shù)據(jù)庫就能正常運(yùn)行,但在程序運(yùn)行中,若程序沒有特別聲明,系統(tǒng)會(huì)將當(dāng)前用戶的所有的權(quán)限賦予這個(gè)應(yīng)用程序,不但包括連接數(shù)據(jù)庫,還可能包括讀取文件和注冊表等重要系統(tǒng)資源的權(quán)限。此時(shí)應(yīng)用程序不但有著訪問數(shù)據(jù)庫的通道,同時(shí)還保留著訪問文件系統(tǒng)和注冊表的通道。

當(dāng)應(yīng)用程序正常運(yùn)行時(shí),能完成應(yīng)有的功能,同時(shí)不會(huì)對用戶造成任何安全問題,此時(shí)用戶沒有發(fā)現(xiàn)問題,非常滿意。
不過現(xiàn)代的軟件運(yùn)行環(huán)境的安全性比較復(fù)雜,病毒、木馬、黑客攻擊等安全風(fēng)險(xiǎn)都是必須要考慮的,若不考慮則會(huì)損害用戶的利益。如下圖所示:

當(dāng)應(yīng)用程序被黑客攻擊并被挾持,則黑客會(huì)通過應(yīng)用程序執(zhí)行不應(yīng)該執(zhí)行的功能,比如訪問用戶系統(tǒng)的文件系統(tǒng)或者注冊表,讀取或?qū)懭朊舾袛?shù)據(jù),造成信息安全事故,這會(huì)損害用戶的利益,用戶很生氣,后果很嚴(yán)重。
應(yīng)用程序可能存在BUG,比如應(yīng)用程序在開發(fā)過程中存在保存調(diào)試信息文件的功能,實(shí)際運(yùn)行過程中不應(yīng)當(dāng)執(zhí)行這樣的操作,但由于程序錯(cuò)誤而意外的執(zhí)行這樣的操作,此時(shí)應(yīng)用程序會(huì)寫大量的垃圾文件,浪費(fèi)用戶系統(tǒng)的存儲(chǔ)資源,也損害用戶的利益。
這時(shí)候應(yīng)用程序是不安全的,存在很大的安全風(fēng)險(xiǎn)。
若開發(fā)人員在開發(fā)這個(gè)應(yīng)用程序時(shí)遵循了最小權(quán)限原則,主動(dòng)讓應(yīng)用程序聲明沒有訪問文件系統(tǒng)和注冊表的權(quán)限。此時(shí)應(yīng)用程序運(yùn)行如下圖所示。

雖然有黑客劫持了應(yīng)用程序、或者應(yīng)用程序本身存在BUG,使得應(yīng)用程序試圖訪問用戶的文件系統(tǒng)或者注冊表。由于事先聲明沒有這方面的權(quán)限,因此應(yīng)用程序無法執(zhí)行這些操作,反而會(huì)導(dǎo)致應(yīng)用程序錯(cuò)誤,提醒用戶發(fā)生了異常。這樣開發(fā)人員的深謀遠(yuǎn)慮保護(hù)了用戶的利益,用戶很慶幸有這樣稱職的開發(fā)人員替他們開發(fā)應(yīng)用系統(tǒng)。
根據(jù)上面的分析可以指導(dǎo),最小權(quán)限原則是解決安全風(fēng)險(xiǎn)比較有效的技術(shù)手段。能夠降低由于黑客攻擊或者程序錯(cuò)誤而導(dǎo)致的安全問題帶來的后果,增強(qiáng)系統(tǒng)的安全防御能力。
由于沒有權(quán)限而導(dǎo)致的拒絕訪問的程序錯(cuò)誤很容易導(dǎo)致應(yīng)用程序無條件立即退出,此時(shí)用戶輸入的數(shù)據(jù)會(huì)來不及保存而丟失,這會(huì)損害用戶的利益的,而在開發(fā)過程中使用最小權(quán)限原則能盡早暴露并解決這個(gè)問題就能避免這種情況,保護(hù)用戶的利益。
在開發(fā)實(shí)踐中遵守最小權(quán)限原則需要開發(fā)人員始終有著安全風(fēng)險(xiǎn)意識(shí),認(rèn)識(shí)到未來的應(yīng)用程序可能面臨著各種各樣的安全風(fēng)險(xiǎn),因此需要小心翼翼的開發(fā)應(yīng)用程序,盡量降低應(yīng)用程序正常運(yùn)行所需要的權(quán)限,主動(dòng)放棄不必要的權(quán)限,精打細(xì)算。
比如要讀取文件內(nèi)容時(shí),只需以只讀的方式打開文件,而不是以可讀寫的方式打開文件;若要保存臨時(shí)文件,則將臨時(shí)文件保存在臨時(shí)目錄下,而不是保存在應(yīng)用程序目錄或者系統(tǒng)目錄下;系統(tǒng)配置能保存到系統(tǒng)配置文件中就不用保存到系統(tǒng)注冊表中,等等等。
現(xiàn)在環(huán)境下,信息安全事故頻發(fā),有些事故損失還比較大,此時(shí)每一個(gè)軟件開發(fā)人員都必須樹立起安全意識(shí),充分考慮到各種安全風(fēng)險(xiǎn),采用各種技術(shù)手段來開發(fā)出安全的軟件。此時(shí)最小權(quán)限原則就顯得比較重要了。
posted on 2013-02-26 08:10 袁永福 電子病歷,醫(yī)療信息化 閱讀(1216) 評(píng)論(2) 收藏 舉報(bào)
浙公網(wǎng)安備 33010602011771號(hào)