国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

WEB應用安全設計思想

安全 應用安全
前言,我一直在思考的一個問題,就是安全問題的本質到底是什么。我們見到過各種各樣的攻擊,也做過各種各樣的防御方案。有的方案好,有的方案卻有缺陷。那么好的方案好在哪里,為什么就能夠抵抗攻擊,到底什么特性使得攻擊者的成本升高了,使得風險降低了。這中間是否有什么共同的東西呢?

一、前言

我一直在思考的一個問題,就是安全問題的本質到底是什么。我們見到過各種各樣的攻擊,也做過各種各樣的防御方案。有的方案好,有的方案卻有缺陷。那么好的方案好在哪里,為什么就能夠抵抗攻擊,到底什么特性使得攻擊者的成本升高了,使得風險降低了。這中間是否有什么共同的東西呢?

經過一段時間的思考和觀察,我初步得出了一個結論:安全問題的本質是信任問題。

二、信任關系的劃分是安全設計的基礎

安全問題的本質是信任問題。

提到這個,不得不說一個信任域的概念。當系統信任某些單元時,由這些單元組成的一片區域可以稱之為信任域。在數據流圖或者是拓跋圖上,都可以用一個邊界把這個域給界定出來。我說的這個概念,是一個廣義的概念,任何存在信任關系的系統中,都可以存在信任域。

比如一個機場,人們要登機,必須要先經過安檢,那么過了安檢后,在候機廳候機,就可以把候機廳看做是一個信任域。因為對于機場來說,候機廳內的區域是可信的。而候機廳外的區域是不可信的。

機場的安檢就是對跨越信任邊界的一個檢查。會檢查有沒有刀具,有沒有液體、打火機等。

那么安全問題是怎么發生的呢?首先是沒有合理的劃分信任域,或者是信任域比較混亂。
其次就是信任邊界的檢查出現問題的時候。這些問題可以是檢查不夠充分,或者是檢查沒有覆蓋到整個信任邊界。

而這些問題導致的結果,都是產生信任危機,也就產生安全問題了。

對于傳統的內存攻擊來說,一個字符串超出了分配給它的指定空間長度,也可以看做是對信任域的破壞,或者是缺乏審計。

所以信任域和信任邊界是非常重要的東西。在做安全方案的時候,首先就要依據資產等級,去劃分信任域和信任邊界。

我們要知道我們到底要保護什么東西,然后去分析有什么途徑能夠達到這些要保護的信任域。

在圈子里經常講的一個笑話就是,怎么做到安全?撥網線最安全。首先,這是一個謬論,因為網線拔掉后,可用性會受到影響。安全方案應該盡可能的避免犧牲可用性為代價,應該是為業務和應用服務的。拔網線是一種舍本逐末的做法。

其次,拔了網線真的就安全了嗎?

我們把物理隔絕的系統看做是一片信任域,那么它會信任什么?如何與外界做數據交互?
簡單的頭腦風暴一下,就可以知道,這樣的系統,可能會與外界發生數據交互的情況:

1. U盤有可能拷貝數據
2. 無線網卡有可能自動連接
3. 可能有人為的手工操作

那么以上這三條,都是有可能穿越我們的信任邊界,產生數據流動的行為。原本物理隔絕就是為了不信任外界的一切,產生數據流動后,就可能破壞信任關系。

再回過頭來看上面的機場的案例,把客流量看做是數據流量,它將穿越一道信任邊界,進入候機廳這個信任域,所以機場有安檢,來專門檢查這個穿越信任邊界的數據。安檢就是機場的安全方案。

-tips--------------------------------------------------------------------------
如果A信任B,或者A依賴于B,則B可以決定A的安全。常見的案例比如軟件中使用了第三方包,則第三方包可以決定A中相關數據的安全。
-------------------------------------------------------------------------------

某些視頻播放軟件使用了很多第三方的庫來解析很多不同的視頻格式,當第三方庫出現安全問題時,則直接導致這些視頻播放軟件也出現安全問題。

所以安全域的劃分是安全方案的基礎,劃分了安全域后,才能比較有針對性的設計安全方案。

三、訪問控制是安全設計的核心

訪問控制不僅僅包括權限。權限僅僅只是訪問控制的一部分。這里我們通常所說的權限都是垂直權限控制,它一般是基于角色的(role based)。

比如一個論壇里面,有匿名用戶,他們可能看不了帖子的內容。有普通用戶,他們能看帖子的內容。有管理員,他們能刪帖子,能置頂帖子。

那么匿名用戶、普通用戶、管理員就是三個不同的角色。

我們的大部分訪問控制系統,都是基于角色的。普通用戶沒辦法執行管理員的操作,因為訪問控制系統會校驗用戶的角色,以決定他們是否有足夠的權限去執行一次訪問。

訪問控制系統一般在整個系統中處于一個比較中心的位置,也只有讓他處在一個中心的、關鍵的位置,才能保證每次訪問都由它來控制。

但是目前我們的大多數系統都僅僅是垂直權限控制,而對水平權限控制方面卻做的不太好。

什么是水平權限控制?

這個概念是相對于垂直權限控制來說的。

A與B都是同一個角色的普通用戶。A上傳了一個頭像,系統給它編號為123,正常情況下,A可以執行http://www.test.com/delete?id=123”去刪除自己的頭像。

但是由于這個刪除操作僅僅校驗了用戶的角色,而沒有校驗提交該請求的用戶是否是A,從而導致B可以提交以上請求,去刪除A的頭像。

這就是一個典型的水平權限控制出錯的例子。

而很多系統中,同一個角色的用戶可以加入不同的用戶組,這些一個個的用戶組,就是一個水平權限控制的系統。

只是問題往往出在訪問控制系統的粒度上。如果劃分的粒度不夠細,那么一個用戶組內的用戶是否可以刪除或修改各自的數據?

對于粒度的劃分,我把一個訪問控制系統中的最小單位稱之為一個原子權限。無論是水平權限系統還是垂直權限系統,可能都是對原子權限的不同組合。

這個問題實際上是一個非常難以解決的問題,特別是在已經成型的大型系統中。對于現在的大型互聯網公司來說,網站的代碼一般都是幾十G的數量級,業務系統繁多。而水平權限控制的一般要求是,將所操作的數據與用戶聯系起來。

回到上面的例子:delete?id=123

那么怎么知道123這條數據,是A的呢?系統無從判斷,只能去查詢user表。如果業務系統一復雜,可能就涉及到跨表查詢或者是聯合查詢,甚至是跨庫查詢,這基本上是一場噩夢。

可是如果不進行二次查詢,則無法在根本的地方解決這個問題。可是二次查詢又會帶來性能上的消耗。真是一個很矛盾的事情。

所以最好的做法是在設計數據層的時候,事先考慮好這個問題,做好數據與用戶之間的關聯性。

如果已經成型的系統,就只能在外面包一層,把這個問題隱藏起來了。在本文的后面,會提到這種做法。

除了水平和垂直權限控制外,實際上一些規則,也可以看做是訪問控制。比如瀏覽器里的SOP(same original policy)。DOM、cookie等都有同源策略,也略有差別。但這些規則,都是屬于訪問控制系統,在整個安全體系中,處于核心的位置。

-tips--------------------------------------------------------------------------
訪問控制系統一般會針對數據的RWX(讀、寫、執行)屬性進行授權,對發起請求方則進行水平或垂直的檢查。
-------------------------------------------------------------------------------
 
而在WEB中,極其理想的狀態,可以大膽的想象為,以session為單位建立原子權限,將數據與session關聯起來后,每個不同的session就是不同的信任域,對每個跨越信任邊界的請求進行水平、垂直的權限檢查,這樣就是一個極端理想的權限體系。

這只是一個理想模型,在實踐中,需要根據實際情況進行分析。

四、數據與代碼分離的思想是安全設計的原則

最典型的體現數據與代碼分離思想的是模板系統。

比如velocity,在渲染html的時候,程序員可以寫vm模板,一些靜態寫死的內容就是代碼,而通過變量,經過渲染才最終展現的內容則稱之為數據。一個典型的例子如下:

-code--------------------------------------------------------------------------
test
-------------------------------------------------------------------------------

代碼與數據如果沒有分離,就會導致代碼混亂,數據變成代碼的一部分去執行。比較常見的例子就是PHP里的SQL寫法:

-code--------------------------------------------------------------------------
$sql = "SELECT * FROM article WHERE articleid='".$_GET[id]."'";
-------------------------------------------------------------------------------

如果參數 id 中帶有單引號,就會閉合掉代碼中的單引號,從而導致數據變成代碼執行。
所以這個注射的本質問題還是沒有做好數據與代碼的分離。

比較好的做法是如下java代碼中的使用變量綁定,很好的做到了代碼與數據分離

-code--------------------------------------------------------------------------
String sql="Insert into table VALUES(?,?)";
List values = new ArrayList();
values.add(Integer.toString(id));
values.add(operator);
try{
executeStatement(sql, values);
result=true;
}catch(Exception e){
e.printStackTrace();
}
-------------------------------------------------------------------------------

但是并不是說使用了模板系統就一定分離了數據與代碼。

因為在類似“render”或者是“transform”的過程中,往往存在一個將數據進行規范化的過程。這個過程也可能出現問題,從而導致代碼可以混淆數據進行執行。

比較好的做法是,數據中不能包含有在代碼中存在語義的字符。

參考如下例子:

-code--------------------------------------------------------------------------
Set-Cookie: name=id\r\nP3P: xxxxxxxxxxxxxx\r\n
-------------------------------------------------------------------------------

紅字部分是用戶的輸入。

在HTTP的標準中,冒號“:”,等號“=”,換行符CRLF“\r\n”,百分號“%”等字符都是有具體的語義的,屬于代碼部分。所以正常的用戶數據中不應該包含有這些字符。

如果出于需求一定要包含怎么辦?按照標準將這些字符全部encode。

在HTTP標準中可以使用urlencode,比如等號就變成了“%3d”。

這樣就做到了代碼與數據的分離。

代碼與數據分離原則的本質還是體現了安全問題是信任問題這一思想。

代碼是否應該信任數據,或者說代碼應該信任怎樣的數據,是這個原則的本質。

在應用中,比較好的例子是json、XSLT,這些方法都比較好的做到了數據與代碼分離,所以在開發中多使用這些比較好的方法,無形中就提高了安全性。

五、最佳實踐一:Secure By Default

經常可以看到一些權威文檔上推薦使用“default denied”,這就是“Secure By Default”
的一種體現。

“Secure By Default”可以說是一個最佳實踐。在很多時候,這個思想應該上升到戰略的高度。只有真正做到“Secure By Default”,才能保證網站的安全。

因為隨著時間的推移和系統的發展、膨脹,會變得越來越臃腫。一個大系統發展到后期,基本上沒有一個人能了解系統的全部,而變化卻每天都在發生。所以,在這種情況下,只有使用“Secure By Default”的思想來制定安全方案。

白名單往往是實現“Secure By Default”的方法。與黑名單不同,白名單的思想很好的體現了“default denied”。下面以XSS的防御問題舉例。

對于一些HTML的標簽和事件,黑名單的做法是列出危險的標簽和事件,然后禁止他們。比如列出

日韩欧美一区在线观看| 久久精品一区蜜桃臀影院| 久久精品在线视频| 黄色成人影院| 亚洲观看高清完整版在线观看| 国产免费亚洲高清| 午夜久久av| 久久亚洲精品国产亚洲老地址| а√天堂8资源在线| 91精品国产综合久久小美女| 噜噜噜在线观看播放视频| 亚洲午夜成aⅴ人片| 超级碰碰视频| 国产精品免费免费| 波多野结衣天堂| 99精品黄色片免费大全| 精品久久久无码人妻字幂| 精品在线视频一区| 在线一区高清| 美女网站在线免费欧美精品| 欧美日本韩国一区二区三区| 在线视频观看日韩| 久久久久久99| 青青草视频一区| 亚洲欧美日韩国产成人综合一二三区 | 久久亚洲a v| 国产一区二区影院| 国产精品无码电影在线观看| av电影在线观看完整版一区二区| 欧美日韩亚洲第一| ...av二区三区久久精品| 色琪琪免费视频网站| 亚洲成人av电影在线| 日韩一区二区三区中文字幕| 欧美日韩激情在线| 55av亚洲| 久久精品免费电影| 免费一区二区三区视频导航| 99精品在线直播| 日韩福利电影在线观看| 无码人妻精品一区二区蜜桃网站| 欧美—级在线免费片| 亚洲男男gay视频| 欧美色综合天天久久综合精品| 美女精品视频| 欧美成人精品三级在线观看 | 精品久久一二三| 国产精品大尺度| 天堂av中文在线资源库| 日韩欧美一卡二卡| 国产视频网站一区二区三区| 国产成人一区二区在线| 影音先锋久久| 国产av人人夜夜澡人人爽麻豆| 国产精品视频免费| 国产精品视频一区二区久久| 亚洲欧美视频在线| 欧美人与物videos另类xxxxx| 国产亚洲精品久久飘花| 粉嫩嫩av羞羞动漫久久久| 成人免费在线观看网站| 欧美猛男超大videosgay| 亚洲影视资源| 国产成人亚洲欧美| 26uuu亚洲| 免费黄网站在线播放| 久久99国产综合精品女同| 欧美日本不卡| 91成人综合网| 欧美日本一道| 精品久久久久久久久久久院品网| av在线亚洲一区| 国产欧美一区二区三区另类精品| 成人免费的视频| 调教视频在线观看| 在线精品国产欧美| 国产成人ay| 一区二区三区在线观看www| 亚洲欧美一区二区三区孕妇| 国产极品人妖在线观看| 国产91免费观看| 国产一区二区剧情av在线| 中文字幕福利片| 综合av色偷偷网| 欧美亚洲视频| 国产亚洲精品久久久久久久| 久久精品99国产国产精| 日韩三级在线播放| 国内精品视频一区二区三区八戒 | 1区2区3区在线观看| 欧美疯狂做受xxxx高潮| 99av国产精品欲麻豆| 成人午夜激情| 成人免费看的视频| 视频福利在线| 精品国产一区久久久| 日韩一级不卡| 国产精品第一第二| 久久综合九色综合久久久精品综合| 久久精品国产sm调教网站演员| 91精品国产乱码久久久久久久| 91精品久久久久久久久青青| 在线观看的日韩av| 欧美日韩国产不卡在线看| 国产欧美一区二区精品性色| 国产成人av影视| 国产精品亚洲成人| av日韩在线看| 在线电影国产精品| 欧美呦呦网站| 黄色影院一级片| 亚洲国产精品va在线看黑人动漫| 久久性感美女视频| 精品国产成人av在线免| 亚洲精选中文字幕| 久久久久久婷| 在线免费黄色| 成人亚洲综合色就1024| 亚洲欧美日韩国产综合| 911精品国产| 97超碰人人澡| 亚洲精品日韩欧美| 日日夜夜免费精品| 成人免费网站在线观看视频| 懂色一区二区三区av片| av网址在线播放| 亚洲a成v人在线观看| 亚洲激情在线播放| 福利欧美精品在线| 一二三四视频社区在线| 亚洲精品一区二区久| 久久中文欧美| 免费在线午夜视频| 国产综合av一区二区三区| 日本久久精品电影| 欧美99在线视频观看| 国产毛片av在线| 黄色91av| 91精品国产免费| 久久成人国产| 丁香花在线影院| 国产精品无码乱伦| 国产视频丨精品|在线观看| 精品一区二区三区免费毛片爱| 久草在线资源站资源站| 亚洲欧美丝袜| 亚洲欧美日韩区| 成人av在线一区二区三区| 综合在线影院| 性欧美大战久久久久久久| 欧美剧在线观看| 亚洲综合色丁香婷婷六月图片| 欧美激情另类| 免费不卡视频| 天堂а√在线中文在线| 色综合视频一区中文字幕| 伊人婷婷欧美激情| 99精品国产在热久久下载| 日本在线影院| 午夜精品久久久内射近拍高清| 国内精品小视频| 亚洲国产精品自拍| 久久精品二区三区| av在线一区不卡| 日本www.色| 国产美女久久精品| 欧美另类久久久品| 国产高清在线精品| 欧美一区二区三区红桃小说| 二人午夜免费观看在线视频| 2025韩国大尺度电影| 欧美人与物videos| 欧美午夜精品在线| 国产传媒在线视频| 九九九九九九精品| 中日韩午夜理伦电影免费| 国产精品久久久久久福利一牛影视| 91视频一区| 在线观看涩涩| 国产三级香港三韩国三级| 精品国产一区二区三区久久久久久| 国产丝袜一区二区三区| 亚洲欧美一区二区三区极速播放| 亚洲午夜精品久久久久久app| 草美女在线观看| 亚洲一级片网站| 久久久久久国产精品mv| 久久天天躁狠狠躁夜夜爽蜜月| 精品久久香蕉国产线看观看亚洲 | 欧美在线观看视频一区| 久久精品视频观看| 美脚丝袜脚交一区二区| 国产精品青青在线观看爽香蕉| 9191久久久久久久久久久| 国产成人av一区二区三区在线 | 亚洲狠狠婷婷综合久久久| 欧美激情一级欧美精品| 欧美日韩高清在线播放| 久久免费看少妇高潮| 国产日韩亚洲|