本章概述#

要成為 web 安全專家,必須紮實理解網際網路底層的技術與協定。本章介紹 Internet Protocol Suite,說明電腦如何透過網路交換資料,並涵蓋 stateful connections 與 encryption 等現代 web 的關鍵元素。

The Internet Protocol Suite#

  • 網際網路早期的資料交換並不可靠 — ARPANET 傳送的第一個 LOGIN 指令只送出了前兩個字母就當機了
  • 為解決可靠性問題,工程師開發了 Transmission Control Protocol (TCP)
  • TCP 是約 20 個網路協定的集合(統稱 internet protocol suite)之一

TCP 的運作方式#

  • 發送端將訊息拆分為 data packets,每個封包帶有目的地位址
  • 網路中的電腦將封包逐步推向目的地,無需處理完整訊息
  • 接收端根據每個封包上的 sequence number 重新組裝訊息
  • 每收到一個封包就回傳收據;若未收到收據,發送端會重發該封包(可能走不同路徑)

TCP 的改進#

  • 封包現在附帶 checksum,讓接收端偵測資料損壞並要求重發
  • 發送端會根據接收端的處理速度調整傳輸速率,避免壓垮對方

TCP 因其可靠的傳輸保證至今仍是最常用的協定。另一個較新的協定 UDP (User Datagram Protocol) 則允許封包被丟棄,以維持穩定的串流速率,常用於影片直播等場景。

Internet Protocol Addresses#

  • 網路上的封包被發送到 IP address — 分配給每台連網電腦的唯一數字
  • ICANN 將 IP 位址區塊分配給區域管理機構,再分配給 ISP 和主機商
  • 當你上網時,ISP 會分配一個 IP 位址給你的電腦,通常固定數月後會輪換

IPv4 與 IPv6#

  • IPv4:二進位數字格式,可容納 2^32(約 43 億)個位址,例如 8.8.8.8
  • IPv6:使用八組四位十六進位數字,以冒號分隔,例如 2001:0db8:0000:0042:0000:8a2e:0370:7334
  • 由於 IPv4 位址即將耗盡,網際網路正逐步轉向 IPv6

The Domain Name System (DNS)#

  • DNS 是一個全球目錄,將人類可讀的 domain name(如 example.com)轉譯為 IP 位址(如 93.184.216.119
  • Domain name 必須向 domain registrar 註冊,且名稱是唯一的
  • 瀏覽器首次遇到一個 domain 時,會透過本地 domain name server(通常由 ISP 提供)查詢,並快取結果

DNS 快取與安全風險#

  • 快取存活時間由 TTL (time-to-live) 變數控制
  • 新 domain 或 domain 變更需要時間在網路中傳播
  • DNS 快取機制衍生出 DNS poisoning 攻擊 — 攻擊者故意污染本地 DNS 快取,將流量導向惡意伺服器

DNS 記錄類型#

  • CNAME records:domain 別名,允許多個 domain name 指向同一 IP
  • MX (mail exchange) records:用於路由電子郵件

Application Layer Protocols#

Internet protocol suite 分為多層:

  • Network layer:ARP、MAC、NDP、OSPF、PPP
  • Internet layer:IPv4、IPv6
  • Transport layer:TCP、UDP
  • Application layer:DNS、FTP、HTTP、IMAP、POP、SMTP、SSH、XMPP

底層協定提供基本的資料路由,高層協定則為應用程式提供更多結構化的資料交換方式。常見的 application layer protocol 包括:

  • SMTP — 電子郵件
  • XMPP — 即時通訊
  • FTP — 檔案傳輸
  • HTTP — 網頁傳輸(本書的重點)

HyperText Transfer Protocol (HTTP)#

HTTP 用於將網頁及其資源傳輸給 user agent(如瀏覽器)。在一次 HTTP 對話中,user agent 發送 request,web server 回傳 response

本書描述的所有 exploit 都以某種方式使用 HTTP,因此深入了解 HTTP request 與 response 的運作方式非常重要。

HTTP Requests#

一個 HTTP request 包含以下元素:

  • Method(也稱 verb):描述要執行的動作
  • URL (Universal Resource Locator):描述要操作的資源
  • Headers:提供 metadata,如內容類型、接受的壓縮格式等
  • Body:可選,包含需要送到 server 的額外資料
GET http://example.com/
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6)
Accept: text/html,application/xhtml+xml,application/xml; */*
Accept-Encoding: gzip, deflate
Accept-Language: en-GB,en-US;q=0.9,en;q=0.8

常見 HTTP Methods#

  • GET:最常見的請求類型,用於取得資源(網頁、圖片、搜尋結果等)
  • POST:將資料送到 server(例如提交表單)
  • PUT / PATCH / DELETE:上傳、編輯或刪除 server 上的資源,通常由 JavaScript 觸發

使用 GET request 來傳送資料到 server 是常見的安全錯誤,這會讓網站容易受到 cross-site request forgery 攻擊。應使用 POST request。

其他 HTTP Methods#

Method說明
HEAD與 GET 類似但 response 不含 body
CONNECT建立雙向通訊,用於通過 proxy 連線
OPTIONS查詢資源支援哪些 method
TRACE回傳原始 request 的完整副本,建議關閉以避免被惡意 JavaScript 利用

HTTP Responses#

HTTP response 包含:

  • Protocol description(如 HTTP/1.1
  • Status code(三位數字代碼)
  • Status message(如 OK
  • Headers(如 Content-TypeCache-Control
  • Body(通常是 HTML、CSS、JavaScript 或二進位資料)

HTTP Status Codes#

範圍意義
2xx請求被理解、接受並回應
3xx重導向到不同的 URL
4xx客戶端錯誤(如 404 Not Found
5xx伺服器錯誤(請求有效但 server 無法完成)

Stateful Connections#

  • HTTP 本身不區分來自不同 user agent 的請求 — 它是 stateless
  • 現代網站需要追蹤使用者的登入狀態與活動,因此需要 stateful 的連線
  • 當 client 與 server 進行 handshake 後持續交換封包,這就是 stateful connection

HTTP Sessions 與 Cookies#

  • 完整的 user agent 與 web server 之間的對話稱為 HTTP session
  • 最常見的追蹤方式是 server 在初始 response 中送回 Set-Cookie header
  • Cookie 是一小段文字資料,與特定 web domain 關聯
  • User agent 在後續的每個 request 中將 cookie 放入 Cookie header 送回 server
  • Cookie 的來回傳遞唯一識別了 user agent,建立起 HTTP session

Cookie 中的 session 資訊是駭客的重要目標。若攻擊者竊取了使用者的 cookie,就能冒充該使用者;若成功偽造 cookie,則能假冒任何使用者。各種竊取與偽造 cookie 的手法將在 Chapter 10 詳述。

Encryption#

  • 早期的 HTTP request 和 response 以明文傳送,任何攔截封包的人都能讀取內容 — 這種攻擊稱為 man-in-the-middle attack
  • 現代 web 使用 encryption(加密)來保護通訊內容

TLS 與 HTTPS#

  • Transport Layer Security (TLS) 是一種加密方法,確保隱私與資料完整性
  • TLS 保證被攔截的封包無法被解密(除非擁有正確的加密金鑰),且任何竄改都能被偵測到
  • 使用 TLS 的 HTTP 對話稱為 HTTPS (HTTP Secure)
  • HTTPS 要求 client 和 server 進行 TLS handshake,協商加密方法(cipher)並交換金鑰
  • Handshake 完成後,所有後續的 request 和 response 都對外部不可見

Encryption 是保護網站安全的關鍵技術。如何為你的網站啟用加密將在 Chapter 13 詳細說明。

本章總結#

  • TCP 在不可靠的網路上實現可靠的通訊
  • 每台連網電腦都有 IP addressDNS 提供人類可讀的別名
  • HTTP 建立在 TCP 之上,透過 request/response 模式在 user agent 與 web server 之間傳輸資料
  • Web server 透過 cookie 建立 stateful connection
  • HTTPS 透過 encryption 保護 user agent 與 web server 之間的通訊安全