首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Rails 安全指南完整版:注入攻擊、XSS、CSRF、大量賦值與用戶管理

     編輯:Java 相關知識

第 8 章:注入攻擊總論

注入攻擊透過惡意代碼/參數在應用安全上下文中執行。著名案例:XSS(跨站腳本)、SQL Injection。核心難點:同樣代碼在不同上下文(SQL/HTML/Shell/Ruby 方法)危害截然不同。

8.1 白名單 vs 黑名單:防禦原則

白名單永遠優於黑名單:

  • before_filter :only => [...] 代替 :except,避免新增 Action 忘記保護
  • attr_accessible 代替 attr_protected(大量賦值白名單)
  • 允許 <strong> 等安全標籤,而非嘗試過濾 <script>(XSS 白名單)
  • 驗證用戶輸入採「拒絕惡意」而非「移除已知惡意」
# 黑名單失效範例
"ript>".gsub("').to_html  # => ""
# :filter_html 選項可移除非原生標籤,但 <a href="javascript:..."> 仍保留

對策:RedCloth + 白名單輸入過濾。

8.6 Ajax / RJS 注入

  • Ajax 回傳字串而非渲染頁面時,Controller 必須 h() 轉義
  • RJS 模板:JS 部分用 escape_javascript(),HTML 部分用 h()

8.7 命令列注入

# 危險
system("echo #{user_input}")  # 輸入 "hello; rm *" 會執行刪除
# 安全
system("/bin/echo", "hello; rm *")  # 參數分離,僅輸出字串

8.8 Header 注入

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,但自建標頭仍需自行過濾。

8.9 回應標頭截斷

注入雙 CRLF + 惡意 HTML 體,構造偽裝回應。更新 Rails 2.0.5/2.1.2+ 緩解。

第 9 章:持續追蹤安全資訊

  • Rails Security Project: rorsecurity.info
  • 訂閱 Rails Security Mailing List
  • 關注應用層安全通訊(OWASP 等)
  • XSS Cheat Sheet 參考
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved