濟南軟件開(kāi)發(fā)之軟件安全

2015-09-15 09:50:09

    在做應用軟件開(kāi)發(fā)中,在軟件安全和數據安全方面(miàn)會(huì)采取那些措施呢?安全性可能(néng)是指數據的安全性吧,一般應當從兩(liǎng)個方面(miàn)來考慮: 
    第一,數據本身的安全性,主要是防止出現業務數據丢失,保證數據的一緻性等方面(miàn),一般這(zhè)些都(dōu)是通過(guò)采用的軟硬件平台來保障的,可能(néng)應用開(kāi)發(fā)的人關心的較少。 
    第二,數據訪問的安全性,系統要防止被(bèi)攻擊,防止越權的操作,防止個人的信息被(bèi)盜竊等,這(zhè)裡(lǐ)面(miàn)也需要依靠一些軟硬件平台和标準來實現,但是應用要考慮的東西就(jiù)相對(duì)要多,根據系統的大小和設計目标而定。
    用戶的權限管理是每個系統最基本必要的功能(néng),這(zhè)個很難說要軟件來完成(chéng)還(hái)是系統來完成(chéng),我覺得應用上考慮的比較簡單,因爲一般的越權操作都(dōu)是靠僞造身份的方法,很多的身份的校驗是需要一定平台支持的應用是無能(néng)爲力的,不過(guò)軟件設計的時候應當考慮防止饒過(guò)軟件的安全校驗的層直接訪問應用邏輯的可能(néng)。
    如果系統的安全要求較高,一般對(duì)系統的操作應當記錄操作日志,而且可以由系統管理員監控,而且應當有類似于“總分核對(duì)”的東西。
    應用主要還(hái)是應當考慮怎麼(me)保證業務上的安全性,即防止用戶合理合法的使用系統違規操作,系統級的安全性需要相應的軟硬件平台,應用需要作的是使用這(zhè)些資源而已。
    用戶的權限管理應該是由系統和軟件來綜合完成(chéng)的,最好(hǎo)保持兩(liǎng)者在用戶上的統一性,實現雙重的訪問控制。 
    應用主要還(hái)是應當考慮怎麼(me)保證業務上的安全性,即防止用戶合理合法的使用系統違規操作,系統級的安全性需要相應的軟硬件平台,應用需要作的是使用這(zhè)些資源而已。[/quote:12739beda2] 
    用戶的權限管理應該是由系統和軟件來綜合完成(chéng)的,最好(hǎo)保持兩(liǎng)者在用戶上的統一性,實現雙重的訪問控制。
    權限管理在應用的設計上不是個難題,一般你作過(guò)一個系統的權限管理,以後(hòu)的基本上就(jiù)改改就(jiù)可以了,因爲所有的組織都(dōu)大體是一樣(yàng)的組織方法,當然“地下黨”的單線聯系除外。直接訪問業務邏輯,比如一個系統,系統客戶端運行的時候開(kāi)始需要登陸,登錄以後(hòu)就(jiù)可以使用系統,如果系統隻在登錄的時候校驗用戶的身份可能(néng)就(jiù)不是個安全的作法,因爲對(duì)于正常使用系統的人來說當然沒(méi)關系,但是如果有人直接發(fā)送應用請求的數據包給服務器,如果應用沒(méi)有方法保證該請求是通過(guò)正常的登錄來的可能(néng)就(jiù)有問題。
    就(jiù)是具體的業務具體分析了,這(zhè)些首先是要在業務流程上來保證,應用開(kāi)發(fā)要作的是搞清楚業務的規則并在系統中體現出來,但是實際上應用開(kāi)發(fā)人員會(huì)經(jīng)常協助用戶一起(qǐ)制定一些業務的規範,這(zhè)個可能(néng)就(jiù)脫離咱們讨論的“安全”的範圍了,那是業務上的規範
    從應用上去解決安全問題?是個思路,但不徹底,應用必然假設在操作系統之上,如果操作系統被(bèi)人竊取權限,應用再安全有啥用?再談樓頂的老兄提的軟件安全問題,其實就(jiù)是安全編程,這(zhè)是我們都(dōu)應該注意的問題,非安全編程會(huì)導緻:緩沖溢出,堆溢出,單字節溢出,整形溢出,邏輯錯誤等等許多問題,這(zhè)都(dōu)有可能(néng)使入侵者直接拿到權限,安全編程不是三言兩(liǎng)語的,隻是大家在編程的時候要多多考慮,最好(hǎo)先學(xué)會(huì)在内核中編程的嚴謹性再去編寫應用程序就(jiù)很容易了
    一切應用安全的基礎在于操作系統的安全,操作系統安全的基礎又在于硬件服務器的安全,windows或者unix本身的文件訪問機制是自主訪問隻能(néng)達到國(guó)家2級安全标準,還(hái)是非常不完善的,所以就(jiù)需要先從操作系統入手解決安全問題,比如杜絕非法的系統調用,杜絕内核後(hòu)門,從0層增強文件訪問機制增加MAC,ACL等,在這(zhè)個的基礎上我們再談上面(miàn)的應用,否則一切都(dōu)是空談,目前公安部推行的國(guó)家5個等級的安全标準就(jiù)是爲了這(zhè)個意思。
    實現軟件的安全性可以從以下方面(miàn)來做: 
    先要确定安全目标,然後(hòu)做分布性平台對(duì)象、操作系統、認證技術的選擇。檢查代碼的安全性(比如說代碼是否模糊,密碼的算法等),做軟件稽核(體系結構的安全),如何有效防止溢出,訪問控制,信任的管理,密碼學(xué)的應用,口令認證的方式和原則等。
    應當先指定一個安全目标,還(hái)有也應當考慮選用的硬件産品和平台軟件(中間件、數據庫等)的安全性。其實與其說軟件的安全性不如說系統的安全性要好(hǎo)些。
    目前國(guó)家正在大力實施的就(jiù)是操作系統的安全,服務器的安全,目前操作系統由于沒(méi)有國(guó)産化,所以目前的狀況隻能(néng)是加固,這(zhè)作爲一個過(guò)渡階段,服務器已經(jīng)國(guó)産化,比如曙光,浪潮。等這(zhè)兩(liǎng)個做好(hǎo)了,再談及數據庫,中間件以及上面(miàn)的應用安全。至于軟件編寫時的安全問題,我覺得主要還(hái)是人的因素,我覺得現在很多應用程序員盲目編程不求嚴謹,比如malloc分配的一段内存,在其中的一個程序分支就(jiù)沒(méi)有釋放,這(zhè)很容易導緻安全問題,要先從人入手。
    做各種(zhǒng)代碼或者二進(jìn)制的安全檢查工具,這(zhè)已經(jīng)有很多現成(chéng)的工具了,不過(guò)主要還(hái)是人,驗收也隻是一個方面(miàn),并不能(néng)完全杜絕非安全編程,主要還(hái)是從程序員素質入手。