※代碼審計環境準備php
※漏洞挖掘和修復方法mysql
※功能怎麼設計更安全web
※應用總體安全體系建設正則表達式
2015年11月,在天天都被問到何時能買到的狀況下,個人我的原著《代碼審計:企業級web代碼安全架構》終於開始預售,它是代碼安全審計領域的第一本書,這本書從2014年5月開始動筆,時至今日,已通過去一年半之久。算法
2014年4月的時候我在北京國際會議中心參加了qcon(全球軟件開發者大會)並演講了議題《移動APP背後的安全問題》,會後機械工業出版社編輯吳怡老師找到我,問我有沒有想法寫一本移動安全方面的書,當時移動安全正熱,這方面的內容也比較少,我雖然拒絕了,不過內心仍是一直有想法寫一本書,一是能夠提高本身的影響力,二來算是給本身的積累作一個總結,三來算給安全行業貢獻一份力量。sql
這本書本該在2014年年末就完成,14年9月我從創新工場安全寶離職加入到阿里巴巴以後,將近有一年的時間隻字未動,致使了書的面世推遲。數據庫
1、爲何要寫這本書?
這本書真正意義在於它承載了我在安全行業的使命,「建設更安全的互聯網」這是道哥一直在講也一直在作的事,我從加入安全行業以後一直與他在共事,很是認同他的這個理念,本書請了道哥做序,同時也把這句話做爲這本書的使命。編程
2、這本書有哪些亮點?
這本書由淺入深講解代碼審計,比較有亮點的章節是第二部分的3、4、5、6、7、八章,主要講漏洞的挖掘思路、技巧和修復方法,每種漏洞都有多個案例,站在攻擊者的角度分析漏洞以後,再給出漏洞的修復方法。 另一個比較有亮點的地方在第三部分的十一章【應用功能的安全設計】、十二章【應用安全體系建設】,全部的應用都是一個個功能堆砌起來的,在十一章詳細介紹各類應用功能怎麼樣設計更加安全,從攻擊者的角度詳細分析常見功能一般會出現的安全問題,在分析出這些安全問題的利用方式後,再給出問題的解決方案,若是你是應用架構師或者研發工程師,這些可以幫助你在設計程序功能的時候避免這些安全問題。第十二章介紹應用安全體系建設中應該注意的點,好比用戶密碼策略、權限控制、敏感操做多因素驗證等等,採用縱深防護和橫向細化策略的防護原則,從應用程序自己的角度去考慮安全建設。瀏覽器
3、這本書有哪些內容?安全
第一部分 代碼審計前的準備
本書總共分爲三個部分,第一部分爲代碼審計前的準備,而這一部分又分爲第一章「PHP運行環境搭建」以及第二章「審計輔助與漏洞驗證工具」兩大章,第一章詳細介紹咱們在學習代碼審計前須要瞭解的PHP核心配置文件以及PHP環境搭建的方法,第二章這是介紹學習PHP代碼審計,咱們須要準備的工具,以及這些工具的詳細使用方法。
第二部分 漏洞發現與防範
第二部分包括3、4、5、6、7、八章一共六章,將着重介紹PHP代碼審計的中漏洞挖掘思路與防範方法。
其中第三章詳細介紹PHP代碼審計的思路,包括根據關鍵字回溯參數、通讀全文代碼以及根據功能點定向挖掘漏洞的三個思路。
第4、5、六章則是常見漏洞的審計方法,共分爲基礎篇、進階篇以及深刻篇,涵蓋到SQL注入漏洞、XSS漏洞、文件操做漏洞、代碼/命令執行漏洞、變量覆蓋漏洞以及邏輯處理等等漏洞。
第七章介紹二次漏洞的挖掘方法,二次漏洞在邏輯上比常規漏洞要複雜,因此咱們須要單獨拿出來,以實例來進行介紹。
在通過前面幾章的代碼審計方法學習以後,相信你們已經可以挖掘很多有意思的漏洞,在第八章,將會介紹更多代碼審計中的小技巧,利用這些小技巧能夠挖掘到更多有意思的漏洞。
每類漏洞都有多個真實漏洞案例的分析過程,能夠真正幫助你們學習代碼審計的經驗,不過這章不只僅是介紹了漏洞的挖掘方法,還詳細介紹了這些漏洞的修復方法,對開發者來講是很是有用的一部份內容。
第三部分 安全編程的規範
第三部分主要介紹的是PHP安全編程的規範,從攻擊者的角度來告訴你應該怎麼寫出更安全的代碼,這也是本書的核心價值,讓代碼沒有漏洞,這部分包括第9、10、11、十二 共四章。
第九章主要介紹參數的安全過濾,全部的攻擊都須要有輸入,因此咱們要阻止攻擊,第一件要作的事情就是對輸入的參數進行過濾,本章詳細分析discuz的過濾類,用實例說明什麼樣的過濾更有效果。
第十章主要介紹PHP中經常使用的加密算法,目前99%以上的知名網站都被拖過庫,泄露了大量的用戶數據,而在這一章,咱們將詳細的說明使用什麼樣的加密算法可以幫助你加強數據的安全性。
第十一章是安全編程比較核心的一章,全部的應用都是一個個功能堆砌起來的,咱們在這章從設計安全功能的角度出發,從攻擊者的角度詳細分析常見功能一般會出現的安全問題,在分析出這些安全問題的利用方式後,再給出問題的解決方案,若是你是應用架構師,這些可以幫助你在設計程序功能的時候避免這些安全問題。
第十二章介紹應用安全體系建設中應該注意的點,好比用戶密碼策略、權限控制、敏感操做多因素驗證等等,採用縱深防護和橫向細化策略的防護原則,從應用程序自己的角度去考慮安全建設。
4、哪些人須要這本書?
我按讀者按崗位進行了一個分類,以下
1.代碼審計崗位
崗位描述:代碼審計工程師負責對企業應用進行代碼審計,通過審計過的代碼才能發佈上線。
代碼審計能力是代碼審計工程師必備的技術能力,對代碼審計掌握的越全面則發現的漏洞會更多。
2.研發崗位
崗位描述:研發工程師負責應用的開發。
應用的代碼出自研發工程師之手,若是研發人員對代碼安全不理解,沒有安全意識,則寫出來的代碼會漏洞百出,也可能出現不配合安全人員進行漏洞修復。
3.安全運維工程師
職位描述:安全運維工程師負責維護服務器安全。
黑客入侵以後會在服務器文件中插入後門代碼,若是運維工程師不理解漏洞的攻擊特徵,不能從代碼中發現漏洞或者後門,則沒法清除後門和發現特定攻擊。
4.應用架構師/設計師
崗位描述:負責應用的總體架構設計。
架構師不理解漏洞本質,設計的程序漏洞百出。應用架構師/設計師必須清楚每一個功能和結構點容易出現什麼樣的安全漏洞,從單個功能和整個架構體系上對應用安全進行把控。
5.滲透測試工程師
崗位描述:對系統、應用、網絡進行入侵測試。
滲透測試工程師須要對漏洞的實質性理解較深,具有代碼審計和漏洞調試能力,這樣才能在滲透測試過程當中快速的發現並利用漏洞,不然技術很容易遇到瓶頸。
6.安全研究人員
崗位描述:負責安全研究,包括漏洞挖掘、分析等攻防對抗。
安全研究一般都會涉及到漏洞代碼的分析,甚至編寫攻擊代碼進行漏洞測試,須要具有代碼審計能力才能對代碼進行分析。
7.安全leader
崗位描述:負責管理安全團隊,把控整個企業安全。
安全leader須要很是清楚應用容易出現漏洞的地方在哪裏,才能合理分配資源,要重視代碼安全。
8.學生
描述:學習安全知識。
代碼審計是安全領域的基礎能力,學生在熟悉代碼審計以後可以快速理解漏洞本質,爲其餘方向的技術學習打下基礎。
5、本書的目錄結構是什麼樣的?
代碼審計:企業級web代碼安全架構 I
前言 IV
導讀 VI
致謝和感言 IX
目錄 XI
第1章 代碼審計環境搭建
1.1 wamp/wnmp環境搭建
1.2 lamp/lnmp環境搭建
1.3 PHP核心配置詳解
第2章 審計輔助與漏洞驗證工具
2.1 代碼編輯器
2.1.1 notepad++
2.1.2 UltraEdit
2.1.3 Zend Studio
2.2 代碼審計工具
2.2.1 Seay源碼審計系統
2.2.2 Fortify SCA
2.2.3 RIPS
2.3 漏洞驗證輔助
2.3.1 burp suite
2.3.2 瀏覽器擴展
2.3.3 編碼轉換及加解密工具
2.3.4 正則調試工具
2.3.5 SQL執行監控工具
第3章 通用代碼審計思路
3.1 敏感函數回溯參數過程
3.1.1 espcms注入挖掘案例
3.2 通讀全文代碼
3.2.1 騎士cms通讀審計案例
3.2.1.1 查看應用文件結構
3.2.1.2 查看關鍵文件代碼
3.2.1.3 查看配置文件
3.2.1.4 跟讀首頁文件
3.3 根據功能點定向審計
3.3.1 Bugfree重裝漏洞案例
第4章 漏洞挖掘與防範(基礎篇)
4.1 SQL注入漏洞
4.1.1 挖掘經驗
4.1.1.1 普通注入
4.1.1.2 編碼注入
4.1.1.2.1 寬字節注入
4.1.1.2.2 二次urldecode注入
4.1.1.3 espcms搜索注入分析
4.1.2 漏洞防範
4.1.2.1 gpc/rutime魔術引號
4.1.2.2 過濾函數和類
4.1.2.2.1 addslashes函數
4.1.2.2.2 mysql_[real_]escape_string函數
4.1.2.2.3 intval等字符轉換
4.1.2.3 PDO prepare預編譯
4.2 XSS漏洞
4.2.1 挖掘經驗
4.2.1.1 反射型XSS
4.2.1.2 存儲型XSS
4.2.1.3 騎士CMS 存儲型XSS分析
4.2.2 漏洞防範
4.2.2.1 特殊字符HTML實體轉碼
4.2.2.2 標籤事件屬性黑白名單
4.3 CSRF漏洞
4.3.1 挖掘經驗
4.3.1.1 Discuz csrf備份拖庫分析
4.3.2 漏洞防範
4.3.2.1 Token驗證
4.3.2.2 驗證碼驗證
第5章 漏洞挖掘與防範(進階篇)
5.1 文件操做漏洞
5.1.1 文件包含漏洞
5.1.1.1 挖掘經驗
5.1.1.2 本地文件包含
5.1.1.2.1 遠程文件包含
5.1.1.2.2 文件包含截斷
5.1.1.2.3 Metinfo文件包含漏洞分析
5.1.2 文件讀取(下載)漏洞
5.1.2.1 挖掘經驗
5.1.2.1.1 phpcms任意文件讀取分析
5.1.3 文件上傳漏洞
5.1.3.1 挖掘經驗
5.1.3.1.1 未過濾或本地過濾
5.1.3.1.2 黑名單擴展名過濾
5.1.3.1.3 文件頭、content-type驗證繞過
5.1.3.1.4 phpcms任意文件上傳分析
5.1.4 文件刪除漏洞
5.1.4.1 挖掘經驗
5.1.4.1.1 Metinfo任意文件刪除分析
5.1.5 文件操做漏洞防範
5.1.5.1 通用文件操做防護
5.1.5.2 文件上傳漏洞防範
5.2 代碼執行漏洞
5.2.1 挖掘經驗
5.2.1.1 代碼執行函數
5.2.1.1.1 eval和assert函數
5.2.1.1.2 preg_replace函數
5.2.1.1.3 調用函數過濾不嚴
5.2.1.2 動態函數執行
5.2.1.3 Thinkphp代碼執行漏洞分析
5.2.2 漏洞防範
5.3 命令執行漏洞
5.3.1 挖掘經驗
5.3.1.1 命令執行函數
5.3.1.2 反引號命令執行
5.3.1.3 億郵命令執行漏洞分析
5.3.2 漏洞防範
5.3.2.1 命令防注入函數
5.3.2.2 參數白名單
第6章 漏洞挖掘與防範(深刻篇)
6.1 變量覆蓋漏洞
6.1.1 挖掘經驗
6.1.1.1 函數使用不當
6.1.1.1.1 extract函數
6.1.1.1.2 parse_str函數
6.1.1.1.3 import_request_variables函數
6.1.1.2 $$變量覆蓋
6.1.1.3 Metinfo變量覆蓋漏洞分析
6.1.2 漏洞防範
6.1.2.1 使用原始變量
6.1.2.2 驗證變量存在
6.2 邏輯處理漏洞
6.2.1 挖掘經驗
6.2.1.1 等於與存在判斷繞過
6.2.1.1.1 in_array函數
6.2.1.1.2 is_numeric函數
6.2.1.1.3 雙等於和三等於
6.2.1.2 帳戶體系中的越權漏洞
6.2.1.3 未exit或return引起的安全問題
6.2.1.4 常見支付漏洞
6.2.1.5 Ecshop邏輯錯誤注入分析
6.2.2 漏洞防範
6.3 會話認證漏洞
6.3.1 挖掘經驗
6.3.1.1 Cookie認證安全
6.3.1.2 Espcms任意用戶登陸分析
6.3.2 漏洞防範
第7章 二次漏洞審計
7.1 什麼是二次漏洞
7.2 二次漏洞審計技巧
7.3 dedecms二次注入漏洞分析
第8章 代碼審計小技巧
8.1 鑽GPC等轉義的空子
8.1.1 不受GPC保護的全局變量
8.1.2 編碼轉換問題
8.2 神奇的字符串
8.2.1 字符處理函數報錯信息泄露
8.2.2 字符串截斷
8.2.2.1 %00空字符截斷
8.2.2.2 iconv函數字符編碼轉換截斷
8.3 php:// 輸入輸出流
8.4 PHP代碼解析標籤
8.5 FUZZ漏洞發現
8.6 不嚴謹的正則表達式
8.7 十餘種MySQL報錯注入
8.8 Windows FindFirstFile利用
8.9 PHP可變變量
第9章 參數的安全過濾
9.1 第三方過濾函數與類
9.1.1 discuz SQL安全過濾類分析
9.1.2 discuz xss標籤過濾函數分析
9.2 內置過濾函數
第10章 使用安全的加密算法
10.1 對稱加密
10.1.1 3DES加密
10.1.2 AES加密
10.2 非對稱加密
10.2.1 RSA加密
10.3 單向加密
10.3.1 md5/sha1加密
第11章 業務功能安全設計
11.1 驗證碼
11.1.1 驗證碼繞過
11.1.2 驗證碼資源濫用
11.2 用戶登陸
11.2.1 撞庫漏洞
11.2.2 API登陸
11.3 用戶註冊
11.4 密碼找回
11.5 資料查看與修改
11.6 投票/積分/抽獎
11.7 充值支付
11.8 私信及反饋
11.9 遠程地址訪問
11.10 文件管理
11.11 數據庫管理
11.12 命令/代碼執行
11.13 文件/數據庫備份
11.14 API接口
第12章 應用安全體系建設
12.1 用戶密碼安全策略
12.2 先後臺用戶分表
12.3 後臺地址隱藏
12.4 密碼加密存儲方式
12.5 登入限制
12.6 API站庫分離
12.7 慎用第三方服務
12.8 嚴格的權限控制
12.9 敏感操做多因素驗證
12.10 應用自身的安全中心
附錄
網站推薦
做者聯繫方式:
郵箱:root@cnseay.com
微信:seayace
博客:www.cnseay.com
微博:http://weibo.com/seayace
購買 淘寶搜索:《企業級web代碼安全架構》