安全 – 常見 Web 攻擊
前言
最近在研究 WAF, 順便記入一下常見的 Web 攻擊.
SQL Injection
SQL injection 是指程式設計師直接拿 client input, 拼接到 SQL query 中. 從而導致 client 有能力可以操作 SQL.
這個是年代久遠的攻擊了. 現在一般上都會使用 parameter 的方式把 client input 輸入進 query 裡, 而不是用拼接.
或者直接用 ORM 框架. 跳過寫 query 這個環節.
不只是 SQL Injection, 任何一種 XXX injection 原理都是一樣的, 程式設計師對 client input 使用要敏感一些.
不要拿了就用, 要假設 client 都是壞人, 用他們給的東西要先檢查, 限制, 過濾.
比如用 Enum, int, 正則去確保使用者只能給小範圍的表達, 使用的時候要依據場合做 encode.
除了 SQL, 經常會用到 client input 做邏輯的還有 : Path, 反射呼叫, rich text 等等
Cross-site Scripting (XSS)
也算 injection 的一種, 它指的是用 client input 去拼接 HTML. 從而導致 client 有能力操作 HTML 頁面.
解決方法就是消毒. 限制. 過濾, Encode, 就那一套啦.
Command Injection
也是 injection 的一種, 只是攻擊的地方是呼叫 shell 這類的, 所以叫 command injection.
參考:詳解php命令注入攻擊
解決方法一樣.
HTTP Request Smuggling
請求走私, 這個只會發生在, 有用 load balance, reverve proxy 反向代理, 這種情況.
它會通過一些手法騙過代理, 讓它分發錯誤的資訊給伺服器.
我沒有用過 load banlance 和反向代理, 所以也不清楚它具體怎樣 hack.
HTTP Response Splitting
參考:
它也有點像 injection, 伺服器在處理 302 時把 client input 直接寫入 header location 裡, 導致了 client 有能力控制 response.
我沒有深入研究, 想了解更多看上面的連結吧. 解決方法還是一樣.
Remote File Inclusion
參考:前端 RFI詳解
也算 injection 的一種, 直接用 client input 去拼接 file path.
其它
其餘的還有 HTTP 協議檢查, user-agent, accept headers, IIS configuration, protect 爬蟲, scanner 等等啦.
詳細的 rules 保護看這裡Web Application Firewall CRS rule groups and rules
此外, 它還防 DDos attack
DDoS 和 CC Attack
DDoS 攻擊就是一直訪問你的伺服器, 造成巨大的壓力, 讓伺服器卡死掉. 阻止它的方法一般上是去檢查 IP, 放 cookie 做識別.
然後阻止它一直訪問. 自己防的話, 也是挺多工作要做的.