本書結合在安全方面的開發(fā)經驗,站在開發(fā)者的角度,循序漸進地介紹了大量實際發(fā)生的漏洞案例,并給出了技術解決方案,包括:常見的網絡攻擊、代碼安全、前端腳本安全、后端應用安全、賬戶安全、加解密認證、SQL注入以及服務器配置等內容。通過閱讀本書,讀者能夠對整個網絡安全有一個全新的認識和深入的理解,從而成為一位懂安全、會防護的工程師,避免在工作中成為黑客攻擊的對象。本書適合PHP開發(fā)人員、網絡維護人員以及對網絡安全攻防技術感興趣的讀者閱讀。
從常見的網絡攻擊入手,介紹代碼安全、前端腳本安全、后端應用安全、賬戶安全、加解密及認證技術、SQL注入以及服務器配置防護等安全知識,以案例揭示安全漏洞并提供解決方案。
前 言在準備寫這本書的時候參考了很多Web安全方面的資料和書籍,我發(fā)現(xiàn)很多書籍和資料都是從攻擊者的角度來講述Web安全的。為了防止本書和其他的書籍以及相關資料同質化,在規(guī)劃本書的時候,特意從PHP開發(fā)者的角度出發(fā),目的是讓開發(fā)者提升安全開發(fā)的能力,書中會講到目前Web安全中的常見漏洞、相關的漏洞案例、最佳的安全防范方法,以及我自己的觀點,希望能幫到需要提升安全知識的PHP從業(yè)者。本書內容第1章 信息泄露此書面向安全意識薄弱的開發(fā)者,因此在第1章中帶領讀者入門,主要介紹攻擊者在攻擊服務器時在前期如何探查服務器信息,攻擊者有哪些手段來挖掘漏洞,讓讀者能夠快速了解漏洞是如何被發(fā)現(xiàn)的。第2章 常規(guī)漏洞講解開發(fā)者在編碼過程中,因缺乏安全意識或遺漏而導致的安全問題;同時通過生動的案例分析來說明攻擊者是如何發(fā)現(xiàn)此類安全問題的;最后在章節(jié)末尾會提到開發(fā)者如何規(guī)避這些編碼導致的安全問題。第3章 業(yè)務邏輯安全在設計一些業(yè)務的時候,不僅編碼會產生安全漏洞,業(yè)務同樣會產生大問題,比如常見的越權漏洞、支付漏洞、驗證碼問題,這些問題其實在設計功能之初就應該考慮到項目計劃中去。第4章 LANMP安全配置對于PHP開發(fā)者來說,一定離不開Nginx、Apache、MySQL、PHP、Redis等配置,不過這些配置并不會經常用到,通常是配置一次,后面就不用再理會。這也導致了開發(fā)者因為對配置的陌生而出現(xiàn)不少安全問題,本章會總結出因為配置不當而帶來的安全問題,同時也會給出正確的安全配置建議。第5章 認證與加密在進行業(yè)務開發(fā)的過程中,我們很頻繁地使用加密與解密,但對其底層原理卻了解得甚少,甚至部分開發(fā)者無法分清認證與加密的區(qū)別,本章主要介紹加密和認證的相關技術,以幫助開發(fā)人員了解其技術特點,從而開發(fā)出安全的應用。第6章 其他Web安全主題攻擊者的攻擊方式是多樣的,我們在防范安全問題的同時,一定要有重點目標,所以本章會提到漏洞的危險等級劃分、CMS引起的漏洞如何防御、對自身的業(yè)務如何安全測試、在測試的同時如何提升效率,本章還會介紹兩款經典的安全檢測工具: Burp Suite和SQLMap,讓讀者能夠對自己開發(fā)的產品進行安全檢測。本書讀者對象這本書面向懂PHP開發(fā)但不擅長安全方面的開發(fā)者,可以通過此書讓你在Web安全方面快速成長,在書中列出了很多互聯(lián)網的漏洞案例,目的是讓讀者看了之后更加了解攻擊者是如何發(fā)現(xiàn)漏洞的,從而讓開發(fā)者在開發(fā)時能夠對癥下藥。由于編者水平有限,雖已盡力,但書中肯定還會存在許多不妥甚至謬誤,敬請廣大讀者和專家不吝指教,非常感謝。
湯青松2018年4月于北京
湯青松,2017 PHP全球開發(fā)者大會安全話題演講嘉賓,前烏云眾測研發(fā)工程師,慕課網Web安全方向高級講師;現(xiàn)工作于中國婚博會,負責技術實現(xiàn)與數據安全方面的工作。
目 錄第1章 信息泄露11.1 主機信息11.1.1 子域名信息21.1.2 端口信息51.1.3 域名注冊信息101.1.4 網站后臺地址121.2 源碼泄露141.2.1 Git源碼泄露151.2.2 SVN源碼泄露171.2.3 .DS_Store文件泄露181.2.4 網站備份壓縮文件201.2.5 WEB-INF/web.xml泄露211.2.6 防御方案241.3 賬戶弱口令241.3.1 漏洞成因241.3.2 漏洞危害251.3.3 漏洞案例261.3.4 防范方法29第2章 常規(guī)漏洞312.1 SQL注入312.1.1 注入方式322.1.2 漏洞的3種類型392.1.3 檢測方法412.1.4 防范方法432.1.5 代碼審查452.1.6 小結472.2 XSS跨站472.2.1 XSS漏洞類型482.2.2 漏洞危害512.2.3 防范方法542.2.4 操作實踐562.2.5 代碼審查582.2.6 小結592.3 代碼注入與命令執(zhí)行592.3.1 漏洞類型602.3.2 漏洞案例622.3.3 防御方法652.3.4 命令執(zhí)行652.3.5 小結672.4 CSRF跨站請求偽造672.4.1 原理分析672.4.2 漏洞案例682.4.3 操作實踐722.4.4 防御方法732.4.5 防御代碼示例742.4.6 小結752.5 文件包含762.5.1 漏洞成因762.5.2 本地文件包含762.5.3 遠程文件包含792.5.4 測試方法822.5.5 使用PHP封裝協(xié)議832.5.6 小結842.6 文件上傳漏洞852.6.1 利用方式852.6.2 上傳檢測862.6.3 解析漏洞872.6.6 小結92第3章 業(yè)務邏輯安全933.1 驗證碼安全933.1.1 圖片驗證碼943.1.2 數字暴力破解983.1.3 空驗證碼突破993.1.4 繞過測試1013.1.5 憑證返回1023.1.6 小結1033.2 密碼找回1033.2.1 敏感信息泄露1043.2.2 郵箱弱token1053.2.3 驗證的有效性1063.2.4 注冊覆蓋1073.2.5 小結1093.3 接口盜用1093.3.1 API盜用1093.3.2 短信轟炸1113.4 賬戶越權1163.4.1 未授權訪問1163.4.2 水平越權1183.4.3 垂直越權1203.4.4 小結1213.5 支付漏洞1213.5.1 支付流程分析1223.5.2 金額數據篡改1233.5.3 商品數量篡改1253.5.4 運費金額修改1273.5.5 小結1283.6 SSRF服務端請求偽造1293.6.1 漏洞成因1293.6.2 漏洞案例1313.6.3 總結134第4章 LANMP安全配置1354.1 PHP安全配置1354.2 PHP安全擴展1394.2.1 taint簡介1394.2.2 安裝taint1404.2.3 測試驗證1414.2.4 小結1444.3 Apache安全配置1444.3.1 屏蔽版本信息1444.3.2 目錄權限隔離1454.3.3 關閉默認主機1454.3.4 低權限運行1454.3.5 防止用戶自定義設置1454.3.6 禁止顯示目錄1464.4 Nginx安全配置1484.4.1 配置防御1484.4.2 防止權限擴大1494.4.3 WAF擴展1504.4.4 Nginx解析漏洞1524.5 Redis配置1544.5.1 漏洞成因1544.5.2 漏洞案例1564.5.3 小結1574.6 MySQL安全配置1574.6.1 權限安全1574.6.2 網絡配置1624.6.3 MySQL日志1634.6.4 主機配置1644.6.5 啟動選項165第5章 認證與加密1675.1 數據加密與簽名1675.1.1 對稱加密與非對稱加密1675.1.2 數字簽名1695.1.3 數字證書1705.2 HTTPS安全1715.2.1 HTTPS簡介1715.2.2 HTTPS被攻擊的方式1735.2.3 常見誤區(qū)1745.3 密碼加密策略1755.3.1 密碼存儲1765.3.2 密碼傳輸1785.3.3 漏洞案例1785.3.4 總結180第6章 其他Web安全主題1816.1 DDoS攻擊1816.1.1 DDoS分類1826.1.2 應對方案1836.1.3 漏洞案例1846.1.4 小結1866.2 CMS通用漏洞1866.2.1 漏洞簡介1866.2.2 等級劃分1876.2.3 漏洞案例1886.2.4 防御方法1916.3 網頁掛馬1926.3.1 掛馬類型1936.3.2 掛馬檢測1946.3.3 小結1966.4 Burp Suite1966.4.1 攔截數據包1976.4.2 修改數據包1986.4.3 頁面鏈接抓取1996.4.4 自動化挖掘2016.4.5 暴力破解2016.5 SQLMap2036.5.1 查看數據庫賬戶2056.5.2 查看數據庫中的所有賬戶2066.5.3 獲取所有數據庫名稱2076.5.4 獲取數據庫表名稱2086.5.5 查看表結構2096.5.6 導出數據210