導(dǎo)致安然標(biāo)題問(wèn)題標(biāo)軟件缺點(diǎn)首要有兩種:擺設(shè)中的縫隙和設(shè)計(jì)中的缺點(diǎn)。此刻軟件安然市場(chǎng)中的大年夜部門重點(diǎn)都放在發(fā)現(xiàn)和修復(fù)縫隙上,這主如果因?yàn)橹鲃?dòng)代碼審查東西讓這個(gè)過(guò)程變得很簡(jiǎn)單。但其實(shí)軟件設(shè)計(jì)和架構(gòu)中的缺點(diǎn)標(biāo)題問(wèn)題也據(jù)有很大年夜比率,它占所有安然標(biāo)題問(wèn)題標(biāo)50%。
簡(jiǎn)單地說(shuō),假定我們想要解決軟件安然標(biāo)題問(wèn)題,我們就需要把更多寄望力放在缺點(diǎn)上。
利用ARA尋覓軟件缺點(diǎn)
多年來(lái),我們都在致力于軟件風(fēng)險(xiǎn)闡發(fā)和設(shè)計(jì)審查。當(dāng)我們?cè)?997年第一次開(kāi)端審查系統(tǒng)的安然性時(shí),我們采取了專業(yè)的編制--三個(gè)專業(yè)人士在房間里利用一塊白板來(lái)審查。而此刻,當(dāng)我們深進(jìn)查抄軟件架構(gòu)中的缺點(diǎn)時(shí),我們采取的是被稱為架構(gòu)風(fēng)險(xiǎn)闡發(fā)的編制。
ARA包含四個(gè)步調(diào)。步調(diào)0(我們凡是是從0開(kāi)端的,因?yàn)槲覀兪瞧婵?是獲得一個(gè)架構(gòu)圖。這可能聽(tīng)起來(lái)很笨拙,但不管你信不信,從開(kāi)辟團(tuán)隊(duì)獲得相干的最新的架構(gòu)圖比聽(tīng)起來(lái)更堅(jiān)苦。例如,一些開(kāi)辟團(tuán)隊(duì)指出“代碼就是設(shè)計(jì)”,對(duì)此,我們不敢茍同。
這個(gè)步調(diào)的最終方針是成立軟件系統(tǒng)的單頁(yè)總覽視圖。單頁(yè)總覽視圖很是首要,因?yàn)槲覀兿胍皡擦旨?jí)”的軟件視圖,避免“只見(jiàn)樹(shù)林不見(jiàn)叢林”。我們都知道,縫隙呈此刻樹(shù)木級(jí),而缺點(diǎn)則在叢林級(jí)。我們不想要看到大年夜堆代碼,我們不想要UML,也不想要防火墻建設(shè)收集地圖。在良多環(huán)境下,我們可以經(jīng)由過(guò)程扣問(wèn)軟件架構(gòu)師、開(kāi)辟人員和測(cè)試人員本身繪制一頁(yè)紙的總覽圖。
你的圖表需要包含一些首要元素,此中包含,但不限于,DAO/持久層、營(yíng)業(yè)邏輯/營(yíng)業(yè)法則、安然功能、東西包(WSE、WCF、Ajax)、中間件、web辦事、云計(jì)較API、緩存和分發(fā)。
當(dāng)你獲得架構(gòu)圖后,你需要進(jìn)行三個(gè)專門的闡發(fā)步調(diào):1)已知報(bào)復(fù)打擊闡發(fā),2)系統(tǒng)特定報(bào)復(fù)打擊闡發(fā),和3)相干性闡發(fā)。(我們從頭定名了ARA的這三個(gè)步調(diào)以便用戶更等閑理解)。
1)已知報(bào)復(fù)打擊闡發(fā)很等閑理解,正如其字面意思。獲得與你的架構(gòu)相干的已知報(bào)復(fù)打擊列表,并一一進(jìn)行查抄。微軟的STRIDE編制(有人將其誤叫成威脅建模)就是一個(gè)很好的例子。STRIDE是棍騙、竄改、否定、信息泄漏、拒盡辦事和特權(quán)晉升的縮寫(xiě)。這就是微軟已知報(bào)復(fù)打擊清單。
已知報(bào)復(fù)打擊闡發(fā)的關(guān)頭是要知道一些已有的報(bào)復(fù)打擊。假定你能擬定一份設(shè)計(jì)層面的報(bào)復(fù)打擊的列表,這就已成功了一半。STRIDE可能合用于把持系統(tǒng)供給商,而你需要按照本身的市場(chǎng)和本身面對(duì)的奇特的報(bào)復(fù)打擊者成立本身的列表。成立這類列表的編制之一是扣問(wèn)你的縫隙治理團(tuán)隊(duì),看看哪些報(bào)復(fù)打擊最多見(jiàn)。
當(dāng)你發(fā)現(xiàn)列表中的某個(gè)報(bào)復(fù)打擊具有相干性,計(jì)較其影響力,并思慮你該若何修復(fù)架構(gòu)來(lái)降落風(fēng)險(xiǎn)。請(qǐng)寄望我們這里利用的是“降落”。有時(shí)辰缺點(diǎn)其實(shí)不需要完全解決或完全肅除,我們只需要按照特定環(huán)境將風(fēng)險(xiǎn)降落到可接管的程度便可。
假定可以或許找出根賦性的缺點(diǎn),對(duì)企業(yè)來(lái)講,真的很有價(jià)值。發(fā)現(xiàn)一個(gè)出缺點(diǎn)的設(shè)計(jì),經(jīng)由過(guò)程準(zhǔn)確擺設(shè)安然節(jié)制,降落數(shù)十或數(shù)百個(gè)縫隙帶來(lái)的風(fēng)險(xiǎn),這莫非不是功德嗎?我們可以經(jīng)由過(guò)程輸出編碼來(lái)實(shí)現(xiàn)這一過(guò)程。
2)系統(tǒng)特定報(bào)復(fù)打擊闡發(fā)側(cè)重于按照系統(tǒng)的運(yùn)作環(huán)境來(lái)揭穿無(wú)按照的假定、深挖歧義內(nèi)容和尋覓新報(bào)復(fù)打擊。這個(gè)步調(diào)需要最豐碩的經(jīng)驗(yàn)和先天,因?yàn)榘踩槐旧硎擒浖男屡d的屬性。你知道,有時(shí)辰軟件本身運(yùn)行時(shí)很正常,但當(dāng)它被添加到更大年夜的生態(tài)系統(tǒng)時(shí),它就完全離開(kāi)軌道了。這就是我們的意思。預(yù)感天然產(chǎn)生的后果多是很是毒手的工作。
在良多環(huán)境下,分化標(biāo)題問(wèn)題可能會(huì)有所幫忙。最起碼,在這個(gè)步調(diào)中,我們可以思慮信賴建模(明白肯定信賴?guó)櫆?、數(shù)據(jù)敏感性建模(肯定隱私和信賴標(biāo)題問(wèn)題)和威脅建模(肯定報(bào)復(fù)打擊者,并從報(bào)復(fù)打擊者的角度考慮)。請(qǐng)寄望,我們這里利用的威脅建模的術(shù)語(yǔ)與微軟的有所不合。
在這里,我們想夸大年夜的一種編制是綜合不合的不雅點(diǎn)。你可否試想,兩個(gè)軟件架構(gòu)師,一個(gè)架構(gòu),在統(tǒng)一個(gè)房間,會(huì)產(chǎn)生甚么事?提示:這里不存活著界和平。操縱很是有經(jīng)驗(yàn)的架構(gòu)師對(duì)不異系統(tǒng)的不合不雅點(diǎn),可以或許幫忙你周全綜合地解決標(biāo)題問(wèn)題。
在此步調(diào)中,寄望你所發(fā)現(xiàn)的報(bào)復(fù)打擊及其影響。想想你該若何經(jīng)由過(guò)程點(diǎn)竄設(shè)計(jì)來(lái)降落這類風(fēng)險(xiǎn)。
3)相干性闡發(fā)在于,肯定你依托的其他軟件架構(gòu)的運(yùn)作環(huán)境。讓我們面對(duì)實(shí)際吧,此刻的軟件幾近老是依托于他人設(shè)計(jì)和構(gòu)建的組件和框架的正常運(yùn)作。它們的前提前提是甚么?它們?nèi)艉斡绊懩愕南到y(tǒng)?假定框架“橫行霸道”,你的設(shè)計(jì)會(huì)如何?
請(qǐng)從你正在依托的組件開(kāi)端,確認(rèn)這些標(biāo)題問(wèn)題:你依托的組件中是不是有已知縫隙?(不管是開(kāi)源組件或其它,謎底凡是是必定的)。你是不是在這些框架中構(gòu)建了足夠的安然節(jié)制?它們真的有效嗎?(不幸的是,謎底凡是是不是定的)還有其它功能或特點(diǎn)需要被禁用嗎?(可能)。框架在默許環(huán)境下安然嗎?(可能,假定你比來(lái)把持恰當(dāng)?shù)脑?。
寫(xiě)下你發(fā)現(xiàn)的事實(shí),思慮其影響,肯定該如何做。在完成ARA的四個(gè)步調(diào)后,你會(huì)發(fā)現(xiàn)你面對(duì)良多風(fēng)險(xiǎn),也會(huì)產(chǎn)生良多改進(jìn)設(shè)計(jì)的設(shè)法。考慮這些風(fēng)險(xiǎn),并明白對(duì)營(yíng)業(yè)的影響。然后將你發(fā)現(xiàn)的風(fēng)險(xiǎn)進(jìn)行優(yōu)先排序,提出解決方案來(lái)解決你所發(fā)現(xiàn)的最首要的缺點(diǎn)。
接下來(lái)有些毒手:弄清晰若何故及甚么時(shí)辰進(jìn)行重大年夜的架構(gòu)變動(dòng)。在某些環(huán)境下,解決方案需要幾年時(shí)候才能展開(kāi),對(duì)此,請(qǐng)不要太盡看。
輕量級(jí)設(shè)計(jì)審查
ARA聽(tīng)起來(lái)很等閑嗎?但事實(shí)并不是如斯。因?yàn)檫@個(gè)過(guò)程很密集,并且觸及良多專業(yè)常識(shí),深進(jìn)的ARA其實(shí)不會(huì)合用于所有你的利用。ARA是關(guān)頭系統(tǒng)必備的架構(gòu),但對(duì)非核心系統(tǒng),這并沒(méi)有需要。在今后的文章中,我們將切磋應(yīng)當(dāng)若何解決在這些“不太首要的”系統(tǒng)中的縫隙標(biāo)題問(wèn)題。
修復(fù)你的缺點(diǎn)
不管你的架構(gòu)審查過(guò)程是不是會(huì)帶來(lái)快速的重構(gòu)或利用多年的多個(gè)版本企業(yè)架構(gòu)的變動(dòng),此刻是時(shí)辰讓我們開(kāi)端正視軟件安然標(biāo)題問(wèn)題。我們不克不及拋卻縫隙檢測(cè)和用來(lái)發(fā)現(xiàn)和修復(fù)縫隙的東西,但與此同時(shí),鑒于缺點(diǎn)也據(jù)有一半的標(biāo)題問(wèn)題,我們需要謹(jǐn)嚴(yán)地解決這些標(biāo)題問(wèn)題。