大型分布式網站架構設計與實踐筆記(第一次看)


互聯網安全架構

常見的web攻擊手段

  1. xss攻擊(跨站腳本攻擊 Cross Site Scripting)
    1. 攻擊原理:
      用戶輸入的數據變成了代碼
    2. 防范:
      需要對用戶輸入的數據進行html轉義處理
  2. CSRF攻擊(跨站請求偽造 cross site request forgery)
    1. 攻擊原理:
      盜取受信任用戶身份,利用該身份攻擊存在csrf漏洞的網站進行攻擊
      攻擊者要完成CSRF攻擊需要用戶做到以下幾點:
      1. 登錄受信任的站點A,並在本地生成cookie
      2. 在不(清除站點A的cookie)的情況下,訪問惡意站點B
    2. 防范:
      1. 將cookie設置為HttpOnly
      2. 增加token
      3. 通過 Referer 識別
  3. sql注入攻擊
    1. 通過把sql命令偽裝成正常的http請求參數,傳遞到服務端,欺騙服務器最終指向惡意的sql命令,達到入侵目的
      1. 例:
        用戶如果提交 nick為zhangsan 密碼為 ' or '1'='1 時如果形成下面的sql 就攻擊成功了
        select * from user where nick = 'zhangsan' and passwords = '' or '1'='1';
    2. 防范
      1. 使用預編譯語句
      2. 使用ORM框架
      3. 避免密碼明文存放
      4. 處理好相應的異常
  4. 文件上傳漏洞
    1. 不能簡單地通過后綴名來判斷文件類型
      1. ,很多類型的文件起始的幾個字節內容是固定的,根據這幾個字節(魔數)的內容就可以確定文件類型
      2. imagemagick 與 jmagick的安裝使用
  5. DDos攻擊(分布式拒絕服務攻擊)
    1. 最dos基本的攻擊是 利用合理的客戶端請求來占用過多的服務器資源,從而使合法用戶無法得到服務器的響應
    2. 借助公共網絡將數量龐大的計算機設備聯合起來作為攻擊平台,對一個或多個目標發動攻擊,從而達到癱瘓目標主機的目的
    3. DDoS攻擊手段
      1. SYN Flood 基於TCP
      2. DNS Query Flood 基於UDP
      3. CC攻擊 基於http 攻擊在應用層發起
  6. 其他攻擊手段
    1. 常見的攻擊手段還有DNS域名解析、CDN回源攻擊、服務器權限提升,緩沖區溢出,以及一些依賴於平台或者具體軟件漏洞的攻擊

常見的安全算法

  1. 數字摘要
    1. 計算出來的摘要的長度是固定的
    2. 輸入不同,摘要以后產生的摘要消息也不同,相同的輸入必定會產生相同的輸出
    3. 消息摘要不包括原文的完整信息,因此只能正向的信息摘要,無法從摘要中恢復出原來的信息
    4. 常見的算法有:
      1. MD5
      2. SHA
      3. 十六進制編碼
      4. Base64編碼
      5. 彩虹表破解Hash算法
  2. 對稱加密算法
    1. DES
    2. AES
  3. 非對稱加密算法
    1. RSA算法
  4. 數字簽名
    1. MD5withRSA
    2. SHA1withRSA
  5. 數字證書
    1. X.509 大多數的數字證書都以這種標准的格式來存儲它們的信息
    2. 證書簽發
    3. 證書校驗
    4. 證書管理
    5. 證書的使用

摘要認證

  1. 摘要認證的原因
  2. 摘要認證的原理
  3. 摘要認證的實現

簽名認證

  1. 簽名認證的原理
  2. 與摘要認證相比,簽名認證的優勢在於加密時使用的是私鑰,而解密時使用的是對外公開的公鑰,私鑰由私鑰持有者保管,安全性大大提高,但相較於摘要認證,簽名認證所使用的非對稱加密算法將消耗更對的時間和硬件資源
  3. 簽名認證的實現:
    簽名認證的實現與摘要認證的實現類似,都需要經過四步
    1. 客戶端參數簽名生成
    2. 服務端參數簽名校驗
    3. 服務端響應簽名生成
    4. 客戶端響應簽名校驗

HTTPS協議

  1. 協議原理
    1. HTTPS的全稱是 Hypertext Transfer Protocol over Secure Socket Layer 即基於ssl的http協議
    2. https既支持單向認證也支持雙向認證
  2. SSL/TLS
    1. SSL協議的優勢 與應用層協議無關,在應用層通信之前就已經完成加密算法,通信密鑰的協商以及服務端對客戶端的認證,在此之后所有應用層協議所傳輸的數據都會被加密

OAuth協議

系統穩定性

  1. 在線日志分析

    1. 日志分析常用命令
      1. cat 與 more 與 less
      2. tail 與 head
      3. sort
      4. wc 統計指定文件中的字符數、字數、行數並輸出統計結果
      5. uniq 顯示文件中重復出現的行
      6. grep
      7. find
      8. expr 表達式求值
      9. tar 文件歸檔
      10. curl url訪問工具
      11. 查看請求訪問量 與 查看最耗時頁面 與統計404請求的占比 (綜合例利用上面的命令)
    2. 日志分析腳本
      1. sed編輯器
      2. awk 程序
      3. shell腳本
  2. 集群監控

    1. 監控指標

      1. load 特定時間間隔內運行隊列中的平均線程數 使用uptime命令查看
      2. CPU利用率
      3. 磁盤剩余空間
      4. 網絡 traffic
        1. sar 查看系統的網絡狀況
      5. 磁盤 I/O
      6. 內存使用
      7. qps(query per second) 每秒查詢數
      8. rt (response time) 請求的響應時間
      9. select/ps 記錄了數據庫每秒處理的select語句的數量
      10. update/ps、delete/ps 數據庫每秒處理update、delete語句的數量
      11. GC (Minor GC 與 Major GC)
    2. 心跳檢測

      1. ping
      2. 應用層檢測 (curl指令),可以通過shell實現應用監控的腳本,然后定時執行腳本來進行檢測
      3. 業務檢測
        1. 通過頁面的大小判斷頁面是否出現異常
        2. 檢測頁面的返回值
    3. 容量評估及應用水位

  3. 流量控制

    1. 流量控制實施
      流量控制可以從多個維度進行,例:對系統的總並發請求數進行限制、限制單位時間內的請求次數、通過白名單機制來限制每個接入系統調用的頻率等
    2. 服務穩定性
      1. 依賴管理
      2. 優雅降級
      3. 服務分級 服務提供者需要對服務消費者的優先級進行區分,哪些調用將影響核心鏈路,哪些調用時非核心鏈路。當系統壓力過大、無法承載時,必須確保等級高是應用、核心的調用鏈路優先確保暢通,而對於重要性不那么高的應用,可以暫時“丟車保帥”
      4. 開關 預定義一些開關來控制程序的服務提供策略
      5. 應急預案
    3. 高並發系統設計
      1. 操作原子性 mysql事務
      2. 多線程同步
      3. 數據一致性
        1. 強一致性
        2. 弱一致性(最終一致性是其一種形式)
      4. 系統可擴展性 (CAP理論 系統的一致性、可用性及可擴展性
      5. 實例:並發減庫存 如果使用innodb存儲引擎,為了解決行鎖導致的並發資源利用的問題,可以將一行庫存拆分成多行
    4. 性能優化
      1. 尋找性能瓶頸
        1. 前端優化工具---YSlow
        2. 頁面響應時間
          1. firebug工具
          2. 服務端的response time時間
        3. 方法響應時間
          java 環境下動態跟蹤工具 -- btrace
        4. GC日志分析
        5. 數據庫查詢 (慢日志)
        6. 系統資源使用 (CPU密集型、網絡密集型、磁盤I/O密集型、內存使用密集型等)
      2. 性能測試工具
        1. ab (ApacheBench)
        2. Apache JMeter 在執行性能測試的同時可以通過一些工具(如 jconsole<jdk自帶>、visualVM)來遠程實時查看測試機的負載、內存使用、GC等情況
        3. HP LoadRunner
        4. 反向代理引流 (負載均衡)
        5. TCP Copy
      3. 性能優化措施
        1. 前端性能優化
          1. 頁面的http請求數量
          2. 是否使用cdn網絡
          3. 是否使用壓縮
        2. 程序優化
          1. 單例模式
            對於I/O處理、數據庫連接、配置文件解析加載等一些非常耗費資源的操作,我們可以始終使用一個公用的實例以節約系統開銷
          2. (java)Future模式
            客戶端發送一個長時間的請求,服務端不需等待該數據處理完成便立即返回一個偽造的代理數據(相當於商品訂單,不是商品本身),用戶也無需等待,先去執行其他的若干操作后,再去調用服務器已經完成組裝的真實數據。該模型充分利用了等待的時間片段。
          3. (java)線程池
            既可避免因過多線程導致的內存溢出,任務完成后線程還可以重用,減少了線程的創建和銷毀的本身的消耗
          4. 選擇就緒
            使用NIO代替阻塞I/O能提高程序的並發吞吐能力,降低系統的開銷
          5. 減少上下文切換
          6. 降低鎖競爭
            1. 盡可能縮短鎖持有的時間
              1. 將一部分與鎖無關的代碼移出同步代碼塊
              2. 減小鎖的粒度 將原先使用單獨鎖來保護的多個變量變為采用多個相互獨立的鎖分別進行保護以降低線程請求鎖的幾率
              3. 放棄使用獨占鎖 對於多讀少寫的情況下,使用讀寫鎖能夠比使用獨占鎖提供更高的並發數量
            2. 壓縮
            3. 結果緩存
            4. 數據庫查詢性能優化
              1.合理使用索引 (mysql的MyISAM使用B樹)(mysql的InnoDB是哦用B+樹)
              索引的使用遵守最左原則
              2. mysql使用explain命令用來解釋和分析sql語句
              3. 反范式設計
              將一些常查詢且不常修改的字段冗余存儲
              4. 使用查詢緩存
              5. 使用搜索引擎(在分表分庫分布式的時候)
              6. 使用key-value數據庫
              7. GC優化 通過日志分析 (盡量降低Full GC的頻率)
              8. 硬件提升性能
            5. java應用故障排查
              1. 常用工具
                1. jps 類似於linux的ps命令 可以方便地找到進程主類對應的進程ID
                2. jstat 對虛擬機各種運行狀態進行監控的工具(可以查看到虛擬機的類加載與卸載情況,管理內存使用和垃圾收集等信息監視JIT即時編譯器的運行情況等)
                3. jinfo 查看應用程序的配置參數及打印運行jvm時所指定的jvm參數
                4. jstack 生成虛擬機當前的線程快照信息
                5. jmap 查看待回收對象的隊列,查看堆的概要信息(包括采用哪種GC手機器,堆空間的使用情況,以及通過JVM堆的轉儲快照)
                  注jmap執行堆dump操作時,由於生成的轉出文件太大將耗費大量的資源
                6. BTrace java程序動態跟蹤工具
                7. JConsole jdk內置的圖形化性能分析工具
                8. Memory Analyzer (MAT) 全稱為Eclipse Memory AnalyzerTool 是java堆分析工具,能快速找到占用堆內存空間最多的對象
                9. VisualVM

數據分析

不懂


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM