Dennis Byrne 是23andMe 架構團隊的成員,負責保護1000 多萬客戶
的基因數據和隱私。在23andMe 之前,Dennis 是LinkedIn 的軟件工程師。
Dennis 是一名健美運動員和GUE 洞穴潛水員。他目前住在硅谷,遠離阿
拉斯加(他在那裡長大並求學)。
安全是一個全棧性問題,包括用戶接口、API、Web服務器、網絡基礎設施等。通過掌握強大的庫、框架以及Python生態系統中的工具,你可自上而下地保護自己的系統。本書列舉大量實例,插圖清晰,代碼豐富,準確地告訴你如何保護基於Python的Web應用程序。
《Python全棧安全》由經驗豐富的安全專家Dennis Byrne撰寫,講解保護Python和基於Django的Web應用程序所需的一切,解釋安全術語,揭開算法的神秘面紗。
本書開篇清晰講解加密基礎知識,然後循序漸進地講述如何實施多層防御、安全的用戶身份驗證、安全的第三方訪問,分析如何保護應用程序免受常見黑客攻擊。
我使用Python來講授安全,而不是反過來。換句話說,當閱讀《Python全棧安全》時,你將學到比Python更多的安全知識。這有兩個原因:首先,安全很複雜,而Python並非如此。其次,編寫大量自定義的安全代碼不是保護系統的最佳方式;繁重的任務幾乎總是應該委托給Python、庫或工具。
《Python全棧安全》涵蓋初中級安全概念。這些概念用初學者級別的Python代碼實現,無論是安全還是Python的資料都非高級水平。
《Python全棧安全》讀者物件
《Python全棧安全》中的所有示例都模擬了在現實世界中開發和保護系統的挑戰。因此,將代碼推送到生產環境的程序員將學到最多的知識。《Python全棧安全》要求讀者具備初級Python技能或具有其他主要語言的中級經驗。當然,你不一定非要成為一名Web開發人員才能從《Python全棧安全》中學到知識,但對Web的基本了解會讓你更容易理解《Python全棧安全》的後半部分。
也許你不構建或維護系統,而是需要測試它們。如果是這樣,你會對要測試的內容有更深入的理解,但我甚至不會嘗試教你如何測試。如你所知,這是兩套不同的技能。
與一些關於安全的書籍不同,這裡的示例都非從攻擊者的角度分析問題。因此,這幫人學到的知識最少。如果說對他們有什麼安慰,那就是在個別章節裡,他們可能真會學到有用的內容。
《Python全棧安全》的編排方式
《Python全棧安全》分為3部分。
第Ⅰ部分“密碼學基礎”用幾個密碼學概念奠定基礎。這些概念在第Ⅱ部分和第Ⅲ部分中會反復出現。
● 第1章簡要介紹安全標準、最佳實踐和基本原則,進而設定預期。
● 第2章直接介紹使用散列和數據完整性的密碼學。在此過程中,介紹在《Python全棧安全》中出現的一小群人物。
● 第3章介紹使用密鑰生成和密鑰散列進行數據身份驗證。
● 第4章涵蓋任何安全書籍的兩個必備主題:對稱加密和機密性。
● 第5章涵蓋非對稱加密、數字簽名和不可否認性。
● 第6章結合前面幾章中的許多主要思想,形成了泛在網絡協議,即傳輸層安全(Transport Layer Security)。
第Ⅱ部分“身份驗證和授權”包含《Python全棧安全》中最具商業價值的內容,特點是提供大量與安全相關的常見用戶工作流程的實際操作說明。
● 第7章介紹HTTP會話管理和cookie,為後續章節中討論的許多攻擊做好準備。
● 第8章是關於身份的內容,介紹用戶注冊和用戶身份驗證的工作流程。
● 第9章介紹密碼管理,也是最有趣的一章。內容在很大程度上建立在前幾章的基礎之上。
● 第10章通過另一個關於權限和組的工作流程從身份驗證過渡到授權。
● 第11章以OAuth作為第Ⅱ部分的結束。OAuth是一種行業標準授權協議,旨在共享受保護的資源。
第Ⅲ部分“抵御攻擊”可以說是《Python全棧安全》中最具敵意的部分,但更容易消化,也更令人興奮。
● 第12章深入研究操作系統,主題包括文件系統、外部可執行文件和shell。
● 第13章教你如何使用各種輸入驗證策略防御大量的注入攻擊。
● 第14章完全集中在最臭名昭著的注入攻擊上,即跨站腳本。你可能已經預見到這一點。
● 第15章介紹內容安全策略。在某些方面,這可以被視為關於跨站腳本的附加章節。
● 第16章涉及跨站請求偽造。該章將前幾章中的幾個主題與REST最佳實踐相結合。
● 第17章解釋同源策略,以及為什麼我們會不時地使用跨源資源共享來放寬這一策略。
● 第18章以關於點擊劫持的內容和一些使你的技能保持最新的資源結束《Python全棧安全》的討論。
第Ⅰ部分 密碼學基礎
第1章 縱深防御 3
1.1 攻擊面 4
1.2 什麼是縱深防御 6
1.2.1 安全標準 7
1.2.2 最佳實踐 8
1.2.3 安全基本原則 9
1.3 工具 11
1.4 小結 15
第2章 散列 17
2.1 什麼是散列函數 17
2.2 原型人物 22
2.3 數據完整性 23
2.4 選擇加密散列函數 24
2.4.1 哪些散列函數是安全的 24
2.4.2 哪些散列函數是不安全的 25
2.5 Python中的加密散列 27
2.6 校驗和函數 30
2.7 小結 31
第3章 密鑰散列 33
3.1 數據身份驗證 33
3.1.1 密鑰生成 34
3.1.2 什麼是密鑰散列 37
3.2 HMAC函數 39
3.3 時序攻擊 43
3.4 小結 45
第4章 對稱加密 47
4.1 什麼是加密 47
4.2 cryptography包 50
4.2.1 危險品層 50
4.2.2 配方層 51
4.2.3 密鑰輪換 53
4.3 什麼是對稱加密 54
4.3.1 分組密碼 54
4.3.2 流密碼 56
4.3.3 加密模式 57
4.4 小結 61
第5章 非對稱加密 63
5.1 密鑰分發問題 63
5.2 什麼是非對稱加密 64
5.3 不可否認性 69
5.3.1 數字簽名 70
5.3.2 RSA數字簽名 71
5.3.3 RSA數字簽名驗證 72
5.3.4 橢圓曲線數字簽名 73
5.4 小結 76
第6章 傳輸層安全 77
6.1 SSL、TLS和HTTPS 77
6.2 中間人攻擊 78
6.3 TLS握手 80
6.3.1 密碼套件協商 80
6.3.2 密鑰交換 81
6.3.3 服務器身份驗證 84
6.4 Django與HTTP 88
6.5 Gunicorn與HTTPS 91
6.5.1 自簽名公鑰證書 92
6.5.2 Strict-Transport-Security響應頭 94
6.5.3 HTTPS重定向 95
6.6 TLS和requests包 96
6.7 TLS和數據庫連接 97
6.8 TLS和電子郵件 99
6.8.1 隱式TLS 99
6.8.2 電子郵件客戶端身份驗證 100
6.8.3 SMTP身份驗證憑據 100
6.9 小結 101
第Ⅱ部分 身份驗證和授權
第7章 HTTP會話管理 105
7.1 什麼是HTTP會話 105
7.2 HTTP cookie 107
7.2.1 Secure指令 108
7.2.2 Domain指令 108
7.2.3 Max-Age 109
7.2.4 瀏覽器長度的會話 110
7.2.5 以編程方式設置cookie 110
7.3 會話狀態持久化 111
7.3.1 會話序列化程序 111
7.3.2 簡單的基於緩存的會話 113
7.3.3 基於直寫式緩存的會話 116
7.3.4 基於數據庫的會話引擎 116
7.3.5 基於文件的會話引擎 117
7.3.6 基於cookie的會話引擎 117
7.4 小結 122
第8章 用戶身份驗證 123
8.1 用戶注冊 124
8.1.1 模板 128
8.1.2 Bob注冊帳戶 131
8.2 什麼是用戶身份驗證 132
8.2.1 內置Django視圖 133
8.2.2 創建一個Django應用 134
8.2.3 Bob登錄和注銷 137
8.3 簡明要求身份驗證 139
8.4 測試身份驗證 140
8.5 小結 142
第9章 用戶密碼管理 143
9.1 密碼變更工作流程 143
9.2 密碼存儲 149
9.2.1 加鹽散列 152
9.2.2 密鑰派生函數 154
9.3 配置密碼散列 158
9.3.1 原生密碼散列器 159
9.3.2 自定義密碼散列器 160
9.3.3 Argon2密碼散列 160
9.3.4 遷移密碼散列器 161
9.4 密碼重置工作流程 166
9.5 小結 169
第10章 授權 171
10.1 應用程序級授權 172
10.1.1 權限 173
10.1.2 用戶和組管理 175
10.2 強制授權 180
10.2.1 低級困難方式 180
10.2.2 高級簡單方式 183
10.2.3 條件渲染 185
10.2.4 測試授權 186
10.3 反模式和最佳實踐 187
10.4 小結 188
第11章 OAuth 2 189
11.1 給予類型 190
11.2 Bob授權Charlie 195
11.2.1 請求授權 196
11.2.2 給予授權 197
11.2.3 令牌交換 197
11.2.4 訪問受保護的資源 198
11.3 Django OAuth Toolkit 200
11.3.1 授權服務器職責 201
11.3.2 資源服務器職責 204
11.4 requests-oauthlib 209
11.5 小結 213
第Ⅲ部分 抵御攻擊
第12章 使用操作系統 217
12.1 文件系統級授權 217
12.1.1 請求許可 218
12.1.2 使用臨時文件 219
12.1.3 使用文件系統權限 220
12.2 調用外部可執行文件 222
12.2.1 用內部API繞過shell 224
12.2.2 使用subprocess模塊 226
12.3 小結 228
第13章 永遠不要相信輸入 229
13.1 使用Pipenv進行包管理 229
13.2 YAML遠程代碼執行 232
13.3 XML實體擴展 235
13.3.1 二次爆炸攻擊 235
13.3.2 十億笑攻擊 236
13.4 拒絕服務 238
13.5 Host標頭攻擊 239
13.6 開放重定向攻擊 243
13.7 SQL注入 246
13.7.1 原始SQL查詢 247
13.7.2 數據庫連接查詢 248
13.8 小結 249
第14章 跨站腳本攻擊 251
14.1 什麼是XSS 251
14.1.1 持久型XSS 252
14.1.2 反射型XSS 253
14.1.3 基於DOM的XSS 254
14.2 輸入驗證 256
14.3 轉義輸出 263
14.3.1 內置的渲染實用程序 264
14.3.2 HTML屬性引用 266
14.4 HTTP響應標頭 267
14.4.1 禁用對cookie的JavaScript訪問 267
14.4.2 禁用MIME類型嗅探 270
14.4.3 X-XSS-Protection標頭 271
14.5 小結 272
第15章 內容安全策略 273
15.1 編寫內容安全策略 274
15.1.1 獲取指令 276
15.1.2 導航和文檔指令 280
15.2 使用django-csp部署策略 281
15.3 使用個性化策略 283
15.4 報告CSP違規 286
15.5 CSP Level 3 288
15.6 小結 289
第16章 跨站請求偽造 291
16.1 什麼是請求偽造 291
16.2 會話ID管理 293
16.3 狀態管理約定 295
16.4 Referer標頭驗證 298
16.5 CSRF令牌 301
16.5.1 POST請求 301
16.5.2 其他不安全的請求方法 303
16.6 小結 304
第17章 跨源資源共享 307
17.1 同源策略 307
17.2 簡單CORS請求 309
17.3 帶django-cors-headers的CORS 311
17.4 CORS預檢請求 314
17.4.1 發送預檢請求 314
17.4.2 發送預檢響應 318
17.5 跨源發送cookie 319
17.6 CORS和CSRF抵御 321
17.7 小結 322
第18章 點擊劫持 323
18.1 X-Frame-Options標頭 326
18.2 Content-Security-Policy標頭 327
18.3 與Mallory同步 329
18.4 小結 330
大陸出版品因裝訂品質及貨運條件與台灣出版品落差甚大,除封面破損、內頁脫落等較嚴重的狀態,其餘商品將正常出貨。
特別提醒:部分書籍附贈之內容(如音頻mp3或影片dvd等)已無實體光碟提供,需以QR CODE 連結至當地網站註冊“並通過驗證程序”,方可下載使用。
無現貨庫存之簡體書,將向海外調貨:
海外有庫存之書籍,等候約45個工作天;
海外無庫存之書籍,平均作業時間約60個工作天,然不保證確定可調到貨,尚請見諒。
為了保護您的權益,「三民網路書店」提供會員七日商品鑑賞期(收到商品為起始日)。
若要辦理退貨,請在商品鑑賞期內寄回,且商品必須是全新狀態與完整包裝(商品、附件、發票、隨貨贈品等)否則恕不接受退貨。