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

Rails 安全指南(五):用戶管理、暴力破解、帳號劫持、驗證碼、日誌與權限提升

     編輯:Java 相關知識

第 7 章:用戶管理最佳實踐

建議使用成熟插件(如 restful_authentication),但必須保持更新。早期版本存在 params[:id] = nil 導致首個已啟用用戶被登入的漏洞:

User.find_by_activation_code(params[:id])
# params[:id]=nil → WHERE activation_code IS NULL → 返回第一個已啟用用戶

7.1 暴力破解防禦

  • 統一錯誤訊息:「用戶名或密碼錯誤」,避免枚舉用戶名
  • 忘記密碼頁同樣需統一訊息,否則成用戶名枚舉入口
  • IP 限流 + 驗證碼(注意:攻擊者可換 IP)

7.2 帳號劫持防護

密碼修改

  • 需驗證舊密碼
  • 表單加入 CSRF Token

Email 修改

  • 需驗證當前密碼,否則攻擊者改 Email → 重設密碼 → 劫持帳號

其他向量

Google Mail CSRF 漏洞:誘導受害者載入含 <img src="https://mail.google.com/mail/?ui=2&ik=...&view=fl&ft=...&cf=...&em=attacker@evil.com"> 的頁面,竄改過濾規則轉發郵件。根治:徹查 XSS/CSRF 漏洞。

7.3 驗證碼(CAPTCHA)

  • reCAPTCHA:舊書數位化雙贏,Rails 插件 recaptcha,View 用 recaptcha_tags,Controller 用 verify_recaptcha
  • Negative CAPTCHA:蜜罐欄位(CSS/JS 隱藏),機器人會填寫,人類不會。進階:時間戳驗證、隨機欄位名、多重蜜罐。僅防自動腳本,針對性攻擊無效。

7.4 日誌敏感資料過濾

# Controller 中
filter_parameter_logging :password
# 日誌將顯示 [FILTERED] 而非明文密碼

原則:假設攻擊者取得伺服器完整存取權,日誌不得含明文密碼/信用卡號。

7.5 強密碼策略

Bruce Schneier 分析 34,000 MySpace 洩露密碼,前 20 名:password1, abc123, myspace1, password, blink182, qwerty1, **you, 123abc, baseball1, football1, 123456, soccer, monkey1, liverpool1, princess1, jordan23, slipknot1, superman1, iloveyou1, monkey。

建議:句子首字母法 —— "The quick brown fox jumps over the lazy dog" → Tqbfjotld。避免知名語錄。

7.6 正則表達式陷阱

Ruby ^ $ 匹配行首行尾,非字串首尾(應用 \A \z)。

# 危險驗證
validates_format_of :name, :with => /^[\w\.\-\+]+$/
# 繞過: "file.txt%0A" → 換行後內容不被檢查

# 正確
/\A[\w\.\-\+]+\z/

7.7 權限提升防範

用戶可竄改任何參數(id、隱藏欄位、JS 驗證均可繞過)。

# 危險
@project = Project.find(params[:id])
# 安全:授權查詢
@project = @current_user.projects.find(params[:id])

工具:Firefox Web Developer Toolbar(改隱藏欄位)、Live HTTP Headers(重放/竄改請求)、Client-side proxies(攔截所有流量)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved