第七章 隨需應變:網站的可擴展架構
擴展性:只對現有系統形象最小的情況下,系統的可持續擴展或提升能力。
伸縮性:指系統通過增加(減少)自身資源規模的方式,增加(減少)系統計算處理事務的能力。
7.1構建可擴展的網絡架構
設計網站可擴展架構的核心思想是模塊化,並在此基礎上,降低模塊間的耦合性,提高模塊的複用性。
7.2利用分佈式消息隊列降低系統耦合性
模塊之間不存在直接調用那麼新增模塊或者修改模塊就對其他模塊影響最小,這樣系統的可擴展性最好。
7.2.1事件驅動架構
事件驅動架構:通過在低耦合的模塊之間傳輸事件消息,以保持模塊的鬆散耦合。
7.2.2分佈式消息隊列
7.3利用分佈式服務打造可複用的業務平臺
7.3.1Web Service與企業級分佈式服務
Web是早期的企業應用開發很時髦的詞彙,但是有以下缺點:
1.臃腫的註冊和觸發機制
2.低效的XML序列化手段
3.開銷相對較高的HTTP遠程通信
4.複雜的部署與維護手段
7.3.2大型網站分佈式的 需求與特點
負載均衡
失效轉移
搞笑的遠程通信
整合異構系統
對應用最少侵入
版本管理實時監控
7.3.3分佈式服務架構設計
服務消費者程序通過服務接口使用服務,而服務接口通過代理加載具體服務,具體服務可以是本地代碼,也可以是遠程服務因此對應用侵入較少:應用程序只需要調用服務接口,服務框架根據配置自動調用本地或遠程實現。
服務框架客戶端模塊中心通過服務註冊中心 ,加載服務提供者列表,查找需要的服務接口,並根據配置的負載均衡策略將服務調用請求發送到某臺提供服務的服務器,如果服務調用失敗,客戶端會自動從服務者列表選擇一個相同服務的另一臺服務器,重新請求服務,實現服務的自動轉移失效,保證服務高可用。
第八章 固若金湯:網站的安全架構
8.1網站應用攻擊和防禦
8.1.1XSS攻擊
XSS即跨站點腳本攻擊,通過黑客篡改網頁,注入惡意HTML代碼,在用戶瀏覽頁面時候,控制用戶瀏覽器進行惡意操作的攻擊
常見的XSS分爲兩種一種是反射型
另一種是持久型XSS攻擊
XSS攻擊的主要防止手段:
消毒:對html危險字符進行轉義。
HttpOnly:禁止頁面JavaScript訪問帶有HttpOnly的Cookie,也就是對Cookie添加用戶驗證,防止腳本竊取Cookie
8.1.2注入攻擊
SQL注入和OS注入兩種
SQL注入需要獲取表結構,攻擊者獲取表結構主要有以下手法:
開源
錯誤回顯
盲注:根據頁面變化,判斷SQL執行情況,猜測表結構
防止SQL注入:
消毒:正則表達式過濾可能SQL注入
參數綁定:SQL預編譯和參數綁定,惡意SQL會被當作參數不會當作命令
8.1.3CSRF攻擊(Cross Site Request Forgery跨站點請求僞造攻擊)
其核心是利用瀏覽器Cookie和服務器Session,盜取用戶身份
防禦手段主要是識別請求者身份:
表單Token
驗證碼
Referer check:HTTP請求頭Referer中包含請求來源,可通過檢測請求來源檢測是否合法
8.1.4其他攻擊和漏洞
Error Code
HTML註釋
文件上傳
路徑遍歷
8.1.5Web應用防火牆
例如ModSecurity
ModSecuriy採用邏輯與攻擊分離的設計架構。處理邏輯(執行引擎)負責請求和響應的攔截過濾,規則加載執行功能。而攻擊規則集合負責描述對具體攻擊的規則定義,模糊識別,防禦策略等功能。
8.2信息加密技術和密鑰安全管理
8.2.1單向散列加密
明文通過散列算法加密獲得密文,此過程不可逆,驗證時需要將用戶新輸入的密碼重新加密,兩個密文進行比較,常見的如MD5加密算法,爲了加強散列算法的複雜度通常加salt處理。
8.2.2對稱加密
此類型加密方式簡單,高效,系統開銷小,但是加密解密都是一個密鑰,交換密鑰是一個問題,常見對稱加密算法有DES算法,RC算法。
8.2.3非對稱加密
常用於信息安全傳輸和數字簽名
信息傳輸:A利用B的公鑰加密明文,然後通過公共渠道傳輸(即使被截獲沒有私鑰依然無法得到明文),B接到密文利用自己的私鑰解密得到明文。
數字簽名:簽名發放者利用自己的私鑰加密,獲得者可以用公鑰解密,由於私鑰只有發送者有,可以具有簽名的作用
8.3信息過濾與反垃圾
8.3.1文本匹配
主要解決敏感詞過濾,主要通過敏感詞過濾樹,提高敏感詞比對速率。比如:阿拉伯,阿拉汗,阿油,北京北大荒,北風。
8.3.2分類算法
常用的是貝葉斯算法,如垃圾郵件出現“茶葉”概率爲20%,非垃圾郵件概率爲1%,就能得到分類模型。是一個概率值,會出現誤判。