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
但是并不是說使用了模板系統就一定分離了數據與代碼。
因為在類似“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系列天堂| 久久日韩精品一区二区五区| 亚洲男人天堂网| 亚洲色精品三区二区一区| jizz在线观看| 国产不卡高清在线观看视频| 992tv成人免费影院| 久久婷婷五月综合| 韩国主播福利视频一区二区三区| 99久久婷婷国产综合精品| 青青草一区二区| www色aa色aawww| 久久精品亚洲成在人线av网址| 一区二区三区欧美在线观看| 久久精品国产精品国产精品污| 国产污视频在线观看| 国产亚洲精品美女久久久久久久久久| 岛国av午夜精品| 免费看啪啪网站| 五十路在线观看| 久久99国内精品| 91国在线精品国内播放| 国产一区第一页| 日韩激情网站| 日韩一区二区三区电影在线观看| 欧美少妇一区二区三区| 免费福利在线观看| 青青草成人在线观看| 97视频在线观看免费| 草草影院第一页| 日韩在线网址| 欧美精品 日韩| 日韩 欧美 高清| 18video性欧美19sex高清| 国产精品久久毛片a| 欧美日韩电影一区二区三区| 女人18毛片一区二区三区| 在线看片成人| 精品国产自在精品国产浪潮| 国产小视频自拍| 免费成人蒂法| 精品久久人人做人人爱| 久久6免费视频| 日本天码aⅴ片在线电影网站| 成人福利在线看| 亚洲精品欧美日韩| 色播视频在线播放| 禁断一区二区三区在线| 亚洲国产精品久久久久秋霞不卡| 日本女优爱爱视频| 国产美女高潮在线观看| 欧美激情一区二区三区四区 | 激情五月激情综合| 天海翼亚洲一区二区三区| 欧美伊人久久大香线蕉综合69| 午夜在线视频免费观看| √天堂资源地址在线官网| 国产成人av自拍| 99久久免费国| www.狠狠干| 粉嫩av一区二区三区| 亚洲iv一区二区三区| 日本中文字幕第一页| 91青青国产在线观看精品| 中文字幕日韩综合av| 手机看片日韩av| 成人91在线| 深夜精品寂寞黄网站在线观看| xxxxwww一片| baoyu135国产精品免费| 精品福利一区二区三区| 国产精品手机在线观看| 欧美精品密入口播放| 日韩毛片在线看| av手机在线播放| 99久久精品国产亚洲精品 | 国产欧美一区二区三区精品观看| 日韩一级欧美一级| 久久久久无码精品| 国产欧美一区二区三区米奇| 亚洲精品一区二区网址| 亚洲一区二区自偷自拍| aiai久久| 亚洲精品色婷婷福利天堂| 亚洲天堂岛国片| 久久久久国产精品| 欧美激情女人20p| 毛片基地在线观看| 奇米综合一区二区三区精品视频| 8090成年在线看片午夜| 亚洲男人天堂网址| 麻豆中文一区二区| 99re国产| 国产福利小视频在线观看| 国产精品久99| 国产午夜福利100集发布| 日本成人伦理电影| 日韩欧美的一区| 激情图片中文字幕| 国产精品毛片视频| 精品国产三级电影在线观看| 麻豆精品免费视频| 亚洲欧美网站在线观看| 91精品国产成人www| 中文字幕精品在线观看| 国产成人aaa| 亚洲高清视频在线观看| 男女在线观看视频| 欧美艳星brazzers| 韩国三级在线看| 在线精品自拍| 尤物精品国产第一福利三区| 免费在线观看黄色av| 老司机精品久久| 亚洲永久在线观看| 久久电影中文字幕| 夜夜嗨av一区二区三区中文字幕| 91午夜在线观看| 丁香婷婷久久| 亚洲国产精品国自产拍av秋霞| 亚洲av成人精品一区二区三区| 欧美午夜18电影| 美日韩在线视频| 国产精品成人久久| 韩国三级电影一区二区| 欧美日韩日本网| 俺来也官网欧美久久精品| 欧美日韩国产一区二区三区| 永久av免费在线观看| 日韩精品一区二区三区中文 | 天堂av中文在线资源库| 成人免费在线视频观看| 好男人www社区| 日韩欧美影院| 992tv成人免费影院| 亚洲国产精品久久久久爰性色| www.欧美日韩| 成人在线免费高清视频| 成人在线啊v| 中日韩午夜理伦电影免费| 久久久精品免费看| 久久99精品国产麻豆不卡| 国产成人亚洲欧美| 欧美女优在线观看| 婷婷成人激情在线网| 国产又猛又黄的视频| 色哟哟精品丝袜一区二区| 欧美国产日本高清在线| 国产极品久久久| 综合久久久久综合| 欧美精品自拍视频| 久久中文资源| 91av视频在线播放| 深夜影院在线观看| 精品久久久久久久久国产字幕| 天天操狠狠操夜夜操| 日韩av二区| 国产欧美一区二区| 视频一区二区在线播放| 欧美午夜精品伦理| 偷拍夫妻性生活| 青青草国产精品97视觉盛宴| 综合色婷婷一区二区亚洲欧美国产| 美女av在线免费看| 精品中文视频在线| 欧产日产国产69| 国产视频一区在线观看| 亚洲 欧美 另类人妖| 久久精品国产大片免费观看| 成人情趣片在线观看免费| 在线观看男女av免费网址| 亚洲精品一区二区三区福利| 激情五月激情综合| 国产精品99久久久| 91精品国产91久久久久麻豆 主演| 日韩美女在线| 亚洲午夜小视频| 国产一区二区三区在线观看 | 国精产品一区一区二区三区mba| 国产情侣一区| 成人免费视频网站| 国产在线精彩视频| 一个人www欧美| 伦av综合一区| 国产精品久久99| 黑人玩弄人妻一区二区三区| 亚洲欧美bt| 亚洲在线观看一区| 日韩欧美高清一区二区三区| 欧美亚洲成人精品| 免费高清在线观看| 欧美综合亚洲图片综合区| 九九这里只有精品视频| 成人黄色大片在线观看| 性生交免费视频| 欧美天天视频| 日本一区视频在线观看| 高清不卡亚洲| 欧美巨大黑人极品精男| 台湾av在线二三区观看| 欧美久久久久久蜜桃| 日韩欧美视频在线免费观看| 国产精品情趣视频| 91高清国产视频| 亚洲网站在线| 一区二区成人国产精品| 欧美一区二区三区红桃小说| 91精品国产综合久久香蕉922| 日本在线观看网站| 亚洲国产精品系列| 国产精品久久久午夜夜伦鲁鲁| 亚洲女同ⅹxx女同tv| theav精尽人亡av| 国产精品影视在线| 国产精品拍拍拍| 一本一本久久| 一级黄色片播放| 日本午夜一区| 久久久久久九九九九| 色悠久久久久综合先锋影音下载| 欧美成人激情视频| 国产91免费看| 555www色欧美视频| 日本三级理论片| 亚洲四区在线观看| 一本色道久久hezyo无码| 韩日精品视频一区| 污污网站免费观看| 久久精品女人天堂| 欧美一级免费播放| 欧美精品九九| 欧美性受黑人性爽| 日韩成人三级| 亚洲第一导航| 91亚洲无吗| 成人资源av| 精品视频一区二区三区| 国产这里只有精品| 超碰资源在线| 欧美精品福利视频| 蜜臀av在线播放| 色综合久久中文字幕综合网小说| 天堂资源中文在线| 亚洲福利精品在线| 欧美熟妇交换久久久久久分类| 在线观看日韩高清av| 国产精品视频免费播放| 性做久久久久久免费观看欧美| 我不卡一区二区| 久久久一区二区三区| 精品少妇人妻一区二区黑料社区| 国产乱人伦偷精品视频不卡| 婷婷激情5月天| 国产乱一区二区| 欧洲成人午夜精品无码区久久| 秋霞影院一区二区| 国产在线播放观看| 亚洲人成在线影院| 国产精品裸体瑜伽视频| 国产欧美三级| 日本xxxxxxx免费视频| 亚洲欧洲日本mm| 日韩av黄色网址| 日韩国产在线一| 岛国av在线免费| 国产一区二区三区在线观看免费视频| 黄色片视频在线免费观看| 鲁大师成人一区二区三区| 99免费视频观看| 久久国产精品免费| 被黑人猛躁10次高潮视频| 蜜臀久久99精品久久久久宅男| 日韩中文字幕在线免费| 亚洲专区在线| 黄色三级视频在线| 国产在线视频一区二区三区| 日本人69视频| 国产成人综合在线播放| 不卡一区二区在线观看| 丁香婷婷综合网| 青青草福利视频| 中文字幕亚洲欧美在线不卡| 免费在线视频一区二区| 欧美性xxxx| 国产精品久久久久久久久久久久久久久久| 日韩欧美在线网址| 中文在线免费看视频| 欧美一区二区高清| 欧美一级做性受免费大片免费| 精品嫩草影院久久| 青青九九免费视频在线| www.国产精品一二区| 高潮在线视频| 97在线观看视频| 成人在线免费| 国内精品视频免费| 久久亚州av| 99久久久无码国产精品性色戒| 亚洲澳门在线| 二级片在线观看| 亚洲一区久久| 色男人天堂av| 成人午夜电影久久影院| 免费看日本黄色片| 亚洲超丰满肉感bbw| 亚洲天堂视频在线| 亚洲国产一区二区三区四区| 欧美激情办公室videoshd| 国产91ⅴ在线精品免费观看| 国产在线视频欧美一区| 欧美亚洲国产免费| 精品国产乱码久久久| 精品成在人线av无码免费看| 久久精品国产一区二区三区免费看 | 成人动漫在线播放| 久久久久久久久亚洲| 成人国产精品入口免费视频| 国产一区不卡在线观看| 亚洲a一区二区三区| 久久久精品三级| 不卡的av中国片| 欧美成人免费看| 欧美日韩国产精选| 99精品久久久久久中文字幕 | 欧美乱人伦中文字幕在线| 欧美日韩激情电影| 精品一区二区不卡| 国户精品久久久久久久久久久不卡| 欧美精品一区二区三区三州| 国产精品一区二区男女羞羞无遮挡| www.男人天堂| 一区二区三区在线观看网站| 一二三区在线播放| 亚洲人线精品午夜| 在线高清av| 久久精品日韩精品| 久久影视一区| 香蕉视频禁止18| 国产不卡视频在线播放| www在线观看免费视频| 精品福利在线看| 天天躁日日躁狠狠躁伊人| 欧美俄罗斯性视频| 亚洲1区在线| 无颜之月在线看| 国产成人一区二区精品非洲| 国产大学生自拍| 在线精品国精品国产尤物884a| 国产v片在线观看| 久久九九国产精品怡红院 | 国产精品视频第一区| 精品无码人妻一区二区三区品 | 国产欧美综合视频| 日韩精品免费视频| www久久日com| 成人一区二区在线| 精品成人在线| 在线观看国产三级| 欧美日韩亚洲91| 国产在线观看黄| 国产欧美日韩综合精品| 亚洲成av人片乱码色午夜| 熟女人妇 成熟妇女系列视频| 高清shemale亚洲人妖| 国产精品a成v人在线播放| 日韩av在线免费看| 国产精欧美一区二区三区蓝颜男同| 国产成人精品免费视频大全最热| 天天揉久久久久亚洲精品| 国产福利视频在线播放| 国产午夜久久久久| 欧美亚韩一区二区三区| 亚洲男人天堂2019| 日韩成人精品一区二区三区| 糖心vlog在线免费观看| 成人免费视频网站在线观看| 国产毛片aaa| 亚洲精品一区在线观看| 深夜成人福利| 欧美 另类 交| 国产成人av电影在线| 精品国产一区二区三区四| 色777狠狠综合秋免鲁丝 | 69av视频在线播放| 中文字幕精品影院| 欧美美女性视频| 亚洲国产人成综合网站| 精品无吗乱吗av国产爱色| 97视频免费在线观看| 色777狠狠狠综合伊人| 亚洲天堂小视频| 日韩欧美999| 国产福利在线播放麻豆| 欧美精品一区二区三区在线四季| 国产精品三上| 91精品一区二区三区蜜桃| 亚洲精品久久在线| www久久久| 成人免费观看视频在线观看| 亚洲三级视频在线观看|













