Coding the Architecture創(chuàng)始人Simon Brown
以下是精彩演講:
隨著互聯(lián)網(wǎng)安全形勢(shì)的日益嚴(yán)峻,對(duì)于架構(gòu)師們來講,為什么需要一個(gè)安全的架構(gòu)以及怎么建設(shè)安全架構(gòu)成為了迫在眉睫的重要任務(wù)。為什么來這里講安全,很多人沒聽過澤西島,在英國(guó)的南部,是一個(gè)離岸的轄區(qū),金融機(jī)構(gòu)在島上非常盛行,對(duì)安全很重要,要安全維護(hù),要有系統(tǒng)享受低稅,很多做JAVA的項(xiàng)目,大部分澤西的工作,離岸的銀行小公司對(duì)安全特別關(guān)注的。
糾正系統(tǒng)架構(gòu)的安全認(rèn)識(shí)
肯定是重要的。特別澤西島有自己交易的信息、銀行的信息、養(yǎng)老金的信息,所有的資料在澤西島里面安全保護(hù)起來。離開澤西島也要保障安全,如果不把安全做好,肯定要有糟糕的事情發(fā)生。
我講一些最近大家都知道的一些安全的漏洞,比如說Linkedln,有一些密碼泄露了。也是最近轟動(dòng)的事情。
安全適用于方方面面,我們講軟件架構(gòu)的時(shí)候,并不只是看一個(gè)地方來求安全,安全應(yīng)該在整個(gè)完整的軟件系統(tǒng)當(dāng)中,都能滲透在安全中,包括所有的級(jí)別層所有的元件都需要做到安全。很多人認(rèn)為安全是人份認(rèn)證、授權(quán),很多人認(rèn)為安全是兩個(gè)問題,但是安全還有其他的問題,比如說防黑客、防攻擊、加密等。
安全這個(gè)問題很難對(duì)現(xiàn)有的代碼進(jìn)行安全的加裝或改裝。如果安全出現(xiàn)問題,要解決安全問題,從架構(gòu)的基礎(chǔ)上來解決的。如果架構(gòu)的問題一開始沒做好,事后補(bǔ)相當(dāng)困難。跟性能、擴(kuò)展性都是很重要的,一開始沒有照顧好的話,未來提升就很難了。
安全在整個(gè)軟件架構(gòu)的角色當(dāng)中是怎樣的位置
我們需要在整個(gè)軟件開發(fā)過程中都要進(jìn)行考慮的問題。我曾經(jīng)講過一個(gè)故事,一個(gè)面向公眾的互聯(lián)網(wǎng)網(wǎng)站。這個(gè)網(wǎng)站是一個(gè)針對(duì)當(dāng)?shù)貪晌鲘u的一個(gè)聽眾,澤西島10萬(wàn)人,是很小的用戶群,是一個(gè)全新的互聯(lián)網(wǎng)系統(tǒng)軟件服務(wù)。這個(gè)互聯(lián)網(wǎng)服務(wù),可以去登陸獲得一個(gè)用戶名,之后獲得這些權(quán)限。他們請(qǐng)我去看軟件系統(tǒng),我去看軟件系統(tǒng)的時(shí)候,假裝用戶去體驗(yàn)一番。
我很快發(fā)現(xiàn)我可以做跨站的腳本攻擊。比如說創(chuàng)造賬戶,有名字、地址、電郵、電子卡信息。而在地址這一欄,可以寫Java腳本,可以注入Java腳本。這個(gè)例子是很小的例子,可以對(duì)網(wǎng)站做的攻擊遠(yuǎn)遠(yuǎn)不止這一點(diǎn),有很多東西可以做。
我只用了五分鐘、十分鐘就發(fā)現(xiàn)了這些漏洞。當(dāng)然,這個(gè)網(wǎng)站還沒有完全上線,只是進(jìn)行前期的測(cè)試,在這個(gè)時(shí)候發(fā)現(xiàn)問題算是萬(wàn)幸。其實(shí)在登陸面可以創(chuàng)建自己的密碼,很多網(wǎng)站可以是1位到20位需要多少的標(biāo)點(diǎn)。有些網(wǎng)站需要密碼的強(qiáng)度。這個(gè)網(wǎng)站也是一樣,列出網(wǎng)站應(yīng)該這樣。登陸賬戶的時(shí)候,我說密碼太煩了。前臺(tái)認(rèn)證并沒有很復(fù)雜,隨便一個(gè)詞就可以接受了,有些比較弱,有攻擊密碼。
我在做銀行互聯(lián)網(wǎng)的時(shí)候,有做一個(gè)雙重認(rèn)證。在頁(yè)面看十分鐘,HTTP的對(duì)話就超時(shí)了,為什么超時(shí)?這是安全的功能。比如說共享一個(gè)電腦,在網(wǎng)吧、咖啡店上網(wǎng)的話,有超時(shí)的保護(hù)。有不同的安全要求?;氐轿覄偛胖v的網(wǎng)站,這個(gè)網(wǎng)站肯定不是登陸之后一直在線的,對(duì)話的時(shí)段是非常短的,因?yàn)槔锩嬗幸恍┓浅C(jī)密的個(gè)人信息。但是,你登陸了網(wǎng)站之后,登陸永遠(yuǎn)不超時(shí)。把游覽器關(guān)掉再打開,永遠(yuǎn)不會(huì)中斷,就算點(diǎn)登出,不會(huì)登出,管理有問題的。我們要做安全的策略性平臺(tái),如果有這么多的漏洞,是非常危險(xiǎn)的。
這個(gè)項(xiàng)目正在進(jìn)行用戶的接受度檢測(cè)的過程,還沒有上線,他們請(qǐng)我去做了檢查。經(jīng)過了各方面的檢查,他們說我們只有四個(gè)星期就上線了,找了很多問題,項(xiàng)目四個(gè)月之后才能上線,很多顧客對(duì)這個(gè)問題根本就不敏感。
架構(gòu)師是“T”型人才 是一個(gè)建筑師
要有知識(shí)的深度,同時(shí)也有不同方案的廣度,我們面臨的軟件架構(gòu)師是一個(gè)建筑師,這種解決方案必須要知道不同的解決方案不同的軟件開發(fā)都需要通才的能 力。我們從安全的角度來說,軟件架構(gòu)師的工作非常復(fù)雜的,特別是windows的環(huán)境有很多學(xué)習(xí)的地方。廣度也很重要,有各種各樣的安全問題,在整個(gè)架 構(gòu)、編碼的過程中,不同地方都會(huì)出現(xiàn)漏洞。如果沒有足夠的經(jīng)驗(yàn),甚至不知道哪個(gè)地方有可能出問題。比如說我們項(xiàng)目的架構(gòu)師可能是一個(gè)通才,有一定的深度, 有技術(shù)的專長(zhǎng),必須要知道在哪些地方有可能出現(xiàn)問題。
我們面臨的風(fēng)險(xiǎn)是什么呢?
我們面臨的風(fēng)險(xiǎn)是什么呢?
攻擊、黑客、宕機(jī)、拒絕服務(wù)、密碼泄露、機(jī)密信息外泄、安全受損等很多問題都可能來自于安全的問題。這顯然是我們從架構(gòu)角度認(rèn)真對(duì)待不同的風(fēng)險(xiǎn)。這 就提出一個(gè)很有意思的問題,我們是不是可以樣樣精通呢?我問過“T”型的人才,我們有知識(shí)的深度,如果是Java的架構(gòu)師,必須要真的理解 Java,我們要做高性能的系統(tǒng),這方面的知識(shí),怎么做可擴(kuò)展性,還有高可靠性。
必須要保持這種意識(shí)
所有不同的領(lǐng)域我們都有一定的寬度和廣度,安全是其中一點(diǎn)。我們之前看到編碼是整個(gè)所有活動(dòng)當(dāng)中的中心,是不是所有的知識(shí)都可以做編碼呢?如果是一 個(gè)小小的項(xiàng)目可以做自己的編碼,同時(shí)也應(yīng)該知道可用性、安全性以及擴(kuò)展性的種種知識(shí)。這是不是意味著樣樣都精通呢?我給大家講安全課,但是我不是安全專 家。但是安全是我們作為架構(gòu)師必須有意識(shí)、必須有概念,而且要知道安全環(huán)境不斷的改變,有新的不同攻擊、不同黑客,必須要保持這種意識(shí)。所以我們必須有安 全的意識(shí),而意識(shí)是一個(gè)關(guān)鍵詞。
剛才講了“T”型人才,是一個(gè)通才型的專才。做軟件團(tuán)隊(duì)的時(shí)候,可能有一個(gè)人來做這個(gè)工作,可能有一個(gè)專門軟件架構(gòu)師來做技術(shù)主管的角色。這個(gè)人就 是我們的通才化的全才。但是你能找到這樣一個(gè)人嗎?我們可能要面試很多人、招聘很多人,是不是能找到通才化的人才呢?不一定的。最近我建立一個(gè)系統(tǒng),是一 個(gè)混合項(xiàng)目,我們可以有多個(gè)人進(jìn)行架構(gòu)的支撐,共同協(xié)同工作,聯(lián)合起來形成了足夠?qū)挾群蜕疃?,一方面有通才型的專才,另一方面專家提供深度的支持?/p>
一般我做的項(xiàng)目里面可能會(huì)請(qǐng)一個(gè)專家,專家有相關(guān)的經(jīng)驗(yàn),有些是沒有的。給大家看一個(gè)很有意思的博客,在英國(guó)看到的。如果系統(tǒng)里面有SQL的出入, 就有流程或者基礎(chǔ)設(shè)施的問題。如果你的問題有安全隱患的話,系統(tǒng)安全隱患,就是說明現(xiàn)在做錯(cuò)了,要看哪些地方做錯(cuò)了,如果沒有這方面的專家怎么辦?或者根 本沒有意識(shí)到潛在的安全問題或者已有的安全問題。
安全怎么融入到系統(tǒng)當(dāng)中
從最根本的角度來看安全有什么要求。就像十年之前搞架構(gòu)的時(shí)候,有哪些具體要求,哪些東西要做哪些不要做的。必須要清楚地知道,在建造架構(gòu)的時(shí)候哪 些東西需要做,怎么才能高效。我覺得安全也是一樣,很多人都是從用戶的角度來獲取用戶的需求。用戶的角度確實(shí)不錯(cuò),希望能夠找一些好的、簡(jiǎn)單適用的。他們 不是技術(shù)性的人才,視角不是特別獨(dú)特。在編寫用戶表述的要求時(shí),有不同的模板。所做的一切要清楚在你的系統(tǒng)里面,用系統(tǒng)的人分成哪些類的。
去年我做了一個(gè)項(xiàng)目的架構(gòu)分析,大概里面有兩到三百個(gè)使用者所提供的一些要求,用戶扮演著不同的角色。到底這些用戶分成哪些?比如說超級(jí)用戶還是管理員,還是一般性的用戶。但是分不出來類。我覺得挺有意思的。
如果我設(shè)計(jì)軟件的話,必須要知道軟件針對(duì)的受眾是誰(shuí),誰(shuí)會(huì)用。今天早上給大家看圖,第一個(gè)就是上下文背景,中間是系統(tǒng),下面還有與之溝通的系統(tǒng),最 上面是我們講的用戶。我們知道到底哪些類型的用戶在使用我們的系統(tǒng)。為什么這點(diǎn)很重要?從安全角度講很重要。問這個(gè)團(tuán)隊(duì)到底懂不懂安全,誰(shuí)在用我們的系 統(tǒng)?這些人用我們的系統(tǒng),有什么樣的功能?我們這些使用者所提供的一些,也從相關(guān)來講比較高端的視角來分析一下類別。
對(duì)于這方面的信息不是已經(jīng)過時(shí)了,非常適用的。在英國(guó)一些咨詢管理公司,要求做成文件發(fā)給我們,尤其是技術(shù)方面的要求。技術(shù)要求包括擴(kuò)展性、安全、 性能等。這些從特點(diǎn)來講比較技術(shù)性的,而且非常詳實(shí)。寫這些要求的人,不是技術(shù)出身的,是商界出身的,他也不清楚產(chǎn)品規(guī)格里面細(xì)節(jié)多細(xì)合適,所以來一句系 統(tǒng)是非常安全,對(duì)于系統(tǒng)的安全來一句就夠了。作為架構(gòu)師這句話牛頭不對(duì)馬嘴,確實(shí)要做到安全。
用戶或者SQL的攻擊注入時(shí),怎么樣做到安全?
很多英國(guó)的公司從安全的角度講,做得很爛,因?yàn)閳F(tuán)隊(duì)不知道安全到底意味著什么??赡茉诰W(wǎng)上隨便問一些人到底該怎樣做。
作為架構(gòu)師要分析需求的話,并不是說做大型的前端設(shè)計(jì),而是做一些簡(jiǎn)單的,獲取、捕獲使用者的要求,做高級(jí)的架構(gòu)設(shè)計(jì),比較要考慮到擴(kuò)展性、安全, 如果沒有考慮到這些,在打造架構(gòu)的時(shí)候,可能會(huì)丟失非常寶貴的元素??梢蚤_一些研討會(huì)、交換文件,這種工作坊和小型研討會(huì)的形式非常好,知道使用系統(tǒng)的是 這部分用戶。
客戶給的要求是系統(tǒng)非常安全,就要問他非常安全是有多安全,工作坊可以面對(duì)面的交流,誰(shuí)在用我們系統(tǒng),哪些方面的內(nèi)容影響了他們對(duì)系統(tǒng)的使用,為什 么會(huì)這樣?這樣會(huì)有非常具體的用戶對(duì)系統(tǒng)的要求。除了捕獲信息之外,還要置疑他們。我們團(tuán)隊(duì)必須要不斷的置疑挑戰(zhàn)我們一開始所制定出來的具體要求。到底我 們開發(fā)的時(shí)候優(yōu)先級(jí)別會(huì)怎樣。覺得要求根本沒必要,換一種方式行不行,我覺得就已經(jīng)夠了,要挑戰(zhàn)不同的要求,不僅是功能性的,還有非功能性的,比如說安 全,也要跟客戶談一談。每次在系統(tǒng)里面引入安全的時(shí)候,要做一些權(quán)衡、妥協(xié)、讓步。
一般來講,典型的讓步、取舍是可用性、易用性和復(fù)雜性。也就是說,安全的話更復(fù)雜了。比如說我去銀行要做,ID非常長(zhǎng),記不下來,輸入密碼登陸,到 了第二頁(yè),要輸入安全代碼,有一個(gè)小鍵盤,類似于口令牌,隨即生成輸入進(jìn)去。等我通過這么多安全檢查進(jìn)這個(gè)網(wǎng)站的時(shí)候,對(duì)話已經(jīng)超時(shí)了,我輸入這么多的密 碼,已經(jīng)查不到我賬戶信息了,這是非常長(zhǎng)、非常復(fù)雜的過程,用電子安全指令等。確實(shí)很安全,但是影響了便捷程度。這時(shí)要做取舍,是易用還是復(fù)雜安全性。
怎么能寫出安全的代碼?
網(wǎng)上有很多信息,主要有兩個(gè)主流:第一,要避免數(shù)字被修改。第二,限制接入。
當(dāng)然免疫性很好的,如果免疫的話就不能修改。這是一個(gè)很好的屬性。如果這個(gè)數(shù)據(jù)有一定的對(duì)象,而這個(gè)對(duì)象數(shù)據(jù)是不能修改的,免疫了就不能修改了,所以從根本上來說是安全的。如果有功能性的語(yǔ)言,用這個(gè)數(shù)值改變,因?yàn)槊庖卟荒芨淖兞?。你想象一下,有一定的人、把這個(gè)人加入到列表當(dāng)中。怎么樣讓他把所有的人列出來呢?也許在下面給一條getPeople的指令。
給一些簡(jiǎn)單的建議,比如說用一些接入的修訂詞,特別是對(duì)外API的時(shí)候,要有各種的假定,比如說接入的修飾詞和修飾條件。如果所有的東西都是對(duì)外公開,沒有安全的問題才怪!
scott/tiger,有人在笑,很多人拿到密碼都沒有改,用戶和密碼缺省或者原始的數(shù)據(jù)密碼都不改,這必須要改,改成一個(gè)比較有利的密碼。
講到數(shù)據(jù)的時(shí)候,真的希望能夠限制消費(fèi)者對(duì)數(shù)據(jù)的接入,限制消費(fèi)者對(duì)數(shù)據(jù)的使用,這可以幫我們收載他們的訪問范圍。不管我們的網(wǎng)站在什么地方,我們用SQL的數(shù)據(jù)庫(kù)怎么做呢,我們用特別的一些代碼通過SQL進(jìn)行數(shù)據(jù)庫(kù)的接入,有些時(shí)候不喜歡這種方法,覺得過程非常復(fù)雜。雖然復(fù)雜,但是有一個(gè)精簡(jiǎn)、簡(jiǎn)單、安全的API,很多人用SQL,就是為了安全性。
2000年的時(shí)候,我在一個(gè)小的電商公司做網(wǎng)站,他們首次在搞商務(wù)網(wǎng)站。他們有一個(gè)電商網(wǎng)站,而且是一個(gè)盒子,只需要拿一個(gè)光盤裝到系統(tǒng)上就是一個(gè)電商網(wǎng)站了。想存儲(chǔ)他們的信用卡號(hào)碼。客戶回到電商時(shí),不需要把信用卡再輸一遍,這是盒子提供的,總要有一個(gè)地方來放信用卡信息吧!他們看一看數(shù)據(jù)庫(kù)里面有沒有欄目沒有用到,他們發(fā)現(xiàn)中間名沒人用,就把中間名放信用卡了,只用輸入(英文),沒有經(jīng)過加密,對(duì)信用卡進(jìn)行外鍵的字符串。我們也知道對(duì)這樣的外鍵的字符串可以破解的。這種安全只不過是把字符串進(jìn)行排列,并沒有進(jìn)行任何的安全加密,只不過支付串操作兩次就已經(jīng)萬(wàn)無(wú)一失了。
我們講過數(shù)據(jù)代碼,也應(yīng)該談一下配置、部署,所以有數(shù)據(jù)庫(kù)。網(wǎng)絡(luò)服務(wù)器要跟數(shù)據(jù)庫(kù)進(jìn)行溝通的話,必須要用戶名和密碼。數(shù)據(jù)庫(kù)的用戶名和密碼什么地方?往往是在網(wǎng)頁(yè)服務(wù)上,往往都是明文。如果有人攻擊網(wǎng)頁(yè)服務(wù)器,必須提取文件系統(tǒng),提取之后可以看到明文的文件,這個(gè)發(fā)生了很多。
怎么樣解決這些問題呢?
要確保這個(gè)信息加密。用Java系統(tǒng)也有加密的配置辦法,這都有辦法,只是有沒有這個(gè)意識(shí)。我們可以用一些CQL服務(wù)器受信任的連接就可以避免了。
之前我在澤西島做的項(xiàng)目是離岸銀行,他們很重視,我們做自己的虛擬機(jī)、手提電腦來寫代碼,但是要部署到銀行系統(tǒng),我們要用一些連續(xù)的工具放入U(xiǎn) 盤上,把U盤交給銀行的人,接入另外一個(gè)網(wǎng)絡(luò),裝入軟件當(dāng)中。這里我們的開發(fā)團(tuán)隊(duì)和部署團(tuán)隊(duì)是物理隔離的,避免了開發(fā)團(tuán)隊(duì)能夠染指生產(chǎn)的系統(tǒng)。
問題在做部署的人根本不太理解做開發(fā)的原意,不是一個(gè)技術(shù)人員。所以我們?cè)谧约簭U寢忘食的寫了這么多代碼,交給他之后,不懂怎么部署,物理隔離不能保障安全,這個(gè)過程或者流程肯定有漏洞的。不是說一定能解決這樣的問題。
生產(chǎn)的資質(zhì)、資格也是一個(gè)問題。比如說有一個(gè)經(jīng)過測(cè)試的環(huán)境,這個(gè)環(huán)境把它放入生產(chǎn)的系統(tǒng)當(dāng)中,當(dāng)中有這個(gè)隔離。把生產(chǎn)的用戶名和密碼放在什么地方呢?也許你可以放在配置服務(wù)器的一個(gè)地點(diǎn),但這個(gè)要看多么看重安全性,如果連續(xù)交付很有意思了,連續(xù)交付有關(guān)的資質(zhì)就要考慮怎么存放。
運(yùn)行時(shí)間方面和安全有什么關(guān)系呢?
這里說到重要的原則“最小特權(quán)原則”,我們看一看這個(gè)模型。在Java應(yīng)用里面可以用Java2的安全模型,允許你做一部分的工作,比如說只能進(jìn)入到這方面的網(wǎng)絡(luò)或者只能用這部分的接口,這就是Java的安全模型。如果網(wǎng)站被黑的話,肯定會(huì)直接攻擊里面用戶。一般不會(huì)這么做,會(huì)密碼也不改,不限制賬戶的使用,導(dǎo)致黑客很輕易獲取信息。
之前我在電商工作過,就有一些信息方面的問題,找到他們的日志文件,發(fā)現(xiàn)有很多的錯(cuò)誤信息,成千上萬(wàn)的錯(cuò)誤信息。人們要輸入信用卡信息,信用卡信息也都在日志文件里面。在日志文件里面,地址、名字、信用卡信息以及信用卡盜竊事件都有。
我們還要有效監(jiān)控管理界面方面的安全,不能把東西放在云端上就覺得什么事都搞定了,還要看監(jiān)控確保運(yùn)行合理合適。我在做顧問的時(shí)候,曾經(jīng)幫一個(gè)電商的網(wǎng)站做很短的項(xiàng)目。如果我打開我的瀏覽器連上網(wǎng),完全可以看想看的頁(yè)面,沒有最基本的二進(jìn)制密碼保護(hù)。
架構(gòu)師要知道基礎(chǔ)結(jié)構(gòu)
我是項(xiàng)目上的軟件架構(gòu)師,不做基礎(chǔ)設(shè)施的設(shè)計(jì),但是不必須要了解到防火墻的設(shè)置等。因?yàn)榇_?;A(chǔ)的設(shè)施才能支持我們軟件的架構(gòu)。另外,從軟件的角度來講,也非常的重要。最早不是我做的,我做的很多系統(tǒng)都是在澤西島,因?yàn)楹芏嗟臄?shù)據(jù)都有地域限制,必須要用本地的服務(wù)器,要把服務(wù)器信息拿出去的話,第一件事情是把原來的安全保護(hù)、防火墻沒有用的東西都拿走,這樣可以減少空間內(nèi)容。要和基礎(chǔ)設(shè)施團(tuán)隊(duì)DMZ來談一談防火墻等。從軟件架構(gòu)師角度來講,要使用web服務(wù)或者RMI等不同服務(wù),軟件架構(gòu)團(tuán)隊(duì)和基礎(chǔ)設(shè)施團(tuán)隊(duì)必須要有溝通才行。
攻擊者、黑客以及我們的漏洞
我在倫敦工作的時(shí)候,很多是做公司內(nèi)部的,回到澤西島的時(shí)候,做了很多互聯(lián)網(wǎng)的界面,影響到數(shù)據(jù)安全性。如果大家覺得講得這些內(nèi)容比較陌生的話,希望大家能夠好好地看一看開源的應(yīng)用安全項(xiàng)目。
列出了10個(gè)最主要的,注入、跨站腳本攻擊、驗(yàn)證、對(duì)話管理等。從安全角度講是值得一看的東西。有一次看了CQL的注入,我不是一個(gè)安全專家,但是我看了CQL注入知道成為安全隱患,因?yàn)殡姄翩溄涌梢钥吹胶芏嘈畔ⅰ?/p>
現(xiàn)在看到的是中文版,叫做OWASP,中文版的,喜歡網(wǎng)站是因?yàn)楦嬖V我們最主要的攻擊方式,給一些例子,該怎樣修復(fù)這些漏洞,避免這些攻擊再次發(fā)生。
最近經(jīng)歷一件事是很多系統(tǒng)都要做深度測(cè)試。找一些外部第三方的團(tuán)隊(duì)或者公司來看不看能不能黑你的系統(tǒng),看系統(tǒng)到底多牢固。我們會(huì)發(fā)現(xiàn)他們攻擊的時(shí)候,很多之前沒有注意到的漏洞浮出水面。這些團(tuán)隊(duì)給一些例子,既然找到漏洞,告訴我們?cè)撛鯓影崖┒匆粋€(gè)個(gè)補(bǔ)好。非常建議第三方來做測(cè)試。
最后總結(jié)
安全非常重要,但是安全也非常復(fù)雜。作為一個(gè)軟件的開發(fā)員、程序員,要做到敏捷、持續(xù)的交付、關(guān)注模式,非常流行的詞匯。但是安全不是熱門詞匯,要注意安全的重要性。比如說做網(wǎng)銀、網(wǎng)絡(luò)界面不能忽視安全。今天上午講了文本介入,搞文本輕一點(diǎn)就行了,不能太復(fù)雜,做一個(gè)軟件的架構(gòu),給別人用,不給文件不知道安全怎么做,不知道安全怎么做,可能會(huì)加一些編碼,這些編碼反而讓你的安全系統(tǒng)安全用不上了,可能一兩年之后安全徹底失明了。因此我們提供不太厚的文件,里面有關(guān)鍵信息。
剛才講了怎么樣收集用戶的一些要求,把它進(jìn)行排序。當(dāng)然不能完全依賴他的想法,但是要讓他知道安全方面哪些最重要的。安全很重要,而且適用于整個(gè)軟件架構(gòu)的所有環(huán)節(jié)。從外部端到數(shù)據(jù)庫(kù)端,從跨件的腳本到注入等,都要確保里面內(nèi)容是安全的。上下文非常關(guān)鍵,這里有一些安全方面的最佳實(shí)踐。如果之是照搬別人的非常復(fù)雜,所以要知道哪些是需要取舍的,做這些風(fēng)險(xiǎn)會(huì)帶來什么影響,會(huì)泄露什么數(shù)據(jù)?這些數(shù)據(jù)有價(jià)值還是沒價(jià)值的?用這些為什么而用,提高應(yīng)用性和復(fù)雜性。
一個(gè)人不可能樣樣精通,我對(duì)安全不是專家,但是對(duì)安全要了解一些情況。我們知道行業(yè)不斷變化,速度非??臁<热徊豢赡馨阉械闹R(shí)都學(xué)的很透徹,至少我們能夠粗淺的像蜻蜓點(diǎn)水了解一些東西。另外,千萬(wàn)別做一個(gè)不負(fù)責(zé)任的軟件架構(gòu)師。因?yàn)槲覀兗軜?gòu)師就像一個(gè)領(lǐng)導(dǎo)者一樣,確保所有的工作都能有效。