注入攻擊透過惡意代碼/參數在應用安全上下文中執行。著名案例:XSS(跨站腳本)、SQL Injection。核心難點:同樣代碼在不同上下文(SQL/HTML/Shell/Ruby 方法)危害截然不同。
白名單永遠優於黑名單:
before_filter :only => [...] 代替 :except,避免新增 Action 忘記保護attr_accessible 代替 attr_protected(大量賦值白名單)<strong> 等安全標籤,而非嘗試過濾 <script>(XSS 白名單)# 黑名單失效範例
"ript>".gsub("').to_html # => ""
# :filter_html 選項可移除非原生標籤,但 <a href="javascript:..."> 仍保留
對策:RedCloth + 白名單輸入過濾。
h() 轉義escape_javascript(),HTML 部分用 h()# 危險
system("echo #{user_input}") # 輸入 "hello; rm *" 會執行刪除
# 安全
system("/bin/echo", "hello; rm *") # 參數分離,僅輸出字串
redirect_to params[:referer] 允許注入 %0d%0a(CRLF)竄改 Location 標頭:
https://app.com/action?referer=https://evil.com%0d%0aLocation:+https://evil.com
# 產生雙重 Location,第二個覆蓋第一個 → 釣魚重導向
Rails 2.1.2+ 已修復 redirect_to,但自建標頭仍需自行過濾。
注入雙 CRLF + 惡意 HTML 體,構造偽裝回應。更新 Rails 2.0.5/2.1.2+ 緩解。