閒扯php
再次拜讀下這本書,確定會有所新的收穫。這本書以前送人了,不過忘了給誰了。。。只好下載網上的pdf版原本看了,並寫下閱讀筆記,內容以原文爲主。mysql
前言算法
Web 是互聯網的核心,是將來雲計算和移動互聯網的最佳載體,所以 Web 安全也是互聯網公司業務中最重要的組成部分。安全工程師的核心競爭力不在於他能擁有多少個 0day,掌握多少種安全技術,而是在於他對安全理解的深度,以及由此引伸的看待安全問題的角度和高度。sql
注:對於如今我這個菜雞而言,仍是儘量的學習技術,多挖0day。shell
黑帽子是指那些形成破壞的黑客,而白帽子則是研究安全,但不形成破壞的黑客。白帽子均以建設更安全的互聯網爲己任。數據庫
第一篇 個人安全世界觀瀏覽器
安全評估的過程,能夠簡單分爲 4 個階段:資產等級劃分、威脅分析、風險分析、確認解決方案。安全
Secure By Default 原則、縱深防護原則、數據與代碼分離原則、不可預測性原則服務器
第二篇 客戶端腳本安全框架
瀏覽器的同源策略,限制了來自不一樣源的 「document」 或腳本,對當前 「document」 讀取或設置某些屬性。
瀏覽器沙箱
惡意網址攔截基於黑名單,常見的惡意網址分爲兩類:一類是掛馬網站,一般包含惡意的腳本如 JavaScript 或 Flash,經過利用瀏覽器的漏洞(包括一些插件、控件漏洞)執行 shellcode,在用戶電腦中植入木馬;另外一類是釣魚網站
瀏覽器的安全以同源策略爲基礎,加深理解同源策略,才能把握住瀏覽器安全的本質。
XSS 攻擊手法略,XSS的防護是複雜的,流行的瀏覽器都內置了一些對抗 XSS 的措施,好比 Firefox 的 CSP、Noscript 擴展,IE 8 內置的 XSS Filter 等。HttpOnly 解決的是 XSS 後的 Cookie 劫持攻擊。輸入檢查、輸出檢查(分析情景正確編碼)、處理富文本。
注:XSS 技巧(gainover、mramydnei 等師傅的案例)
瀏覽器所持有的 Cookie 分爲兩種:一種是 「Session Cookie」,另外一種 「Third-party Cookie」,前者瀏覽器關閉失效,後者到了 Expire 時間後失效
CSRF 的防護 Referer Check、Anti CSRF Token
ClickJacking 的防護 frame busting、X-Frame-Options
HTML5 安全
第三篇 服務端應用安全
SQL 注入是基於數據庫的一種攻擊。不一樣的數據庫有着不一樣的功能、不一樣的語法和函數,所以針對不一樣的數據庫,SQL 注入的技巧也有所不一樣。
LOAD_FILE() 文件讀取,INTO DUMPFILE() 適用於二進制文件寫入,OUTFILE() 適用於文本文件
MySQL UDF 命令執行,版本 5 以後經過 lib_mysqludf_sys 主要函數 sys_eval() 和 sys_exec()
存儲過程爲數據庫提供了強大的功能。在MS SQL Server 和 Oracle 數據庫中有大量存儲過程可以使用 CALL 或者 EXECUTE 來執行。
EXEC master.dbo.xp_cmdshell 'cmd.exe dir c:'
xp_regread 等能夠操做註冊表,存儲過程自己也可能會存在注入漏洞。
寬字節注入 當MySQL 使用了 GBK 編碼時,0xbf27 和 0xbf5c 都會被認爲是一個字符。
正確地防護 SQL 注入:使用預編譯語句、使用安全的存儲過程對抗 SQL 注入、檢查數據類型、使用安全你函數
XML 注入
對抗代碼注入、命令注入時,須要禁用 eval()、system()等能夠執行命令的函數,必定要使用這些函數,則須要對用戶的輸入數據進行處理。
CRLF 注入 \r\n 這兩個字符用於表示換行,其十六進制編碼分別爲 0x0d、0x0a
注入攻擊是應用違背了 「數據與代碼分離原則」 致使的結果。兩個條件:一是用戶可以控制數據的輸入;二是代碼拼湊了用戶輸入的數據,把數據看成代碼執行了。
PHP CGI 路徑解析問題 /test.jpg/xxx.php 會將 jpg 看成 PHP 解析,在 fastcgi 方式下,PHP 獲取環境變量 cgi.fix_pathinfo 默認開啓,建議關閉
設計安全的文件上傳功能:文件上傳的目錄設置爲不可執行、判斷文件類型(結合使用 MIME Type、後綴檢查等方式)、隨機數改寫文件名和文件路徑、單獨設置文件服務器的域名。
認證的目的是爲了認出用戶是誰,而受權的目的是爲了決定用戶能作什麼。
認證明際上就是一個驗證憑證的過程,密碼是最多見的一種認證手段,密碼必須以不可逆的加密算法,或者是單向散列函數算法,加密後存儲在數據庫中。
在 Web 應用中,用戶登錄以後,服務器端一般創建一個新的 Session 跟蹤用戶的狀態。SessionID 用來標識用戶身份,通常是加密保存在 Cookie 中,有的網站也會將 Session 保存在 Cookie 中,減輕服務器維護 Session 的壓力。
單點登錄(SSO)
關於水平權限越權,系統只會驗證用戶 A 是否輸入角色 RoleX,而不會判斷用戶 A 是否可以訪問只屬於用戶 B 的數據 DataB,所以致使越權訪問。對於一個大型的複雜系統來講,難以經過掃描等自動化測試方法將這些問題所有找出來,其次理解清除不一樣業務的不一樣需求不容易,系統上線後再來處理數據級訪問控制問題,則可能會涉及跨表、跨庫查詢,對系統的改動較大,同時會影響性能。這些緣由致使沒有通用的解決方案,具體問題具體解決。一個簡單的數據級訪問控制,能夠考慮使用 「用戶組」 的概念。
常見的加密算法一般分爲分組加密算法與流密碼加密算法兩種,二者的實現原理不一樣。
分組加密算法基於 「分組」 (block) 進行操做,根據算法的不一樣,每一個分組的長度可能不一樣。分組加密算法的表明有 DES、3-DES、Blowfish、IDEA、AES 等
流密碼加密算法,加密算法表明有 RC四、OPYX、SEAL 等
僞隨機數
MVC 框架,將 Web 應用分爲三層,View 層負責用戶視圖、頁面展現等工做;Controller 負責應用的邏輯實現,接受 View 層傳入的用戶請求,並轉發給對應的 Model 作處理;Model 層則負責實現模型,完成數據的處理。
第四篇 互聯網公司安全運營