2011-09-14 48 views
1

Authlogic讓我很緊張,因爲它強制要求用戶模型,:password是attr_accessible:用戶的密碼字段應該是attr_protected嗎?

class User < ActiveRecord::Base 

    attr_accessible :password, :email 
    ... 

end 

我與這種不舒服的原因是,在某人的設置密碼字段正常的設計模式是你在進入新密碼之前需要重新確認舊密碼。

這可以防止某人更改某人的密碼(並且在csrf_meta_tag之前也可以防止跨網站的僞造)。

私自交換別人的密碼

然而,隨着以attr_accessible需要:password,這是簡單的人提交任何新的密碼,並打破自己好友的帳戶。

我想給:password場被默認爲attr_protected,這樣雖然可以更新,這是由我來啓用,而不是由我來保護它。

如果您有「忘記密碼」,這種保護方式甚至有問題嗎?

我不擔心什麼嗎?我不知道,因爲你有一個「密碼重設傳送到我的郵箱」功能,它是一種多餘的,但它還是把額外的屏障英寸

編輯

我措辭我最初的問題在令人困惑的方式。我不是說我使用attr_protected來阻止人們登錄對方的賬戶,我使用的是完全正常的身份驗證設置。

我指的是保護您免於從您的計算機上打開您的帳戶打開您的帳戶,某人坐下並更改密碼的攻擊類型。這可以(主要)通過在創建新密碼之前需要舊密碼來保護。即使密碼設置爲att_accessible,這也是完美的,但需要先刷新新密碼。

如果舊密碼需要更新,我會感覺更舒服,如果密碼是attr_protected,那麼這將更加清潔。

+0

但密碼不是按原樣使用;要更新某些內容,需要將其加密值與用戶的加密值進行比較。如果不匹配,操作應該失敗,不是? –

+0

不幸的是 - 沒有authlogic的默認設置,你只需提供一個新的密碼並更新 –

+0

我不確定我關注 - 是否有自動生成的「更改密碼」頁面? (如果有的話,我從來沒有使用過。)如果不是這樣,這仍然很容易處理,因爲你仍然可以保護它免受大規模分配和手動設置,和/或仍然按照我上面所說的去做,不是嗎? –

回答

0

好,

  1. 更新密碼,必須先登錄,因此您可以輕鬆地放棄對別人的個人資料變更

  2. ,如果你願意,你可以添加一個密碼確認(個人,我會這樣做)

  3. 即使你有一些「忘記密碼」功能,你應該讓用戶隨時更改他們的密碼。

2

然而,隨着以attr_accessible需要:password,這是簡單的人提交任何新的密碼,並打破自己好友的帳戶。

您需要確保用戶擁有他們試圖更新的記錄,無論是帖子,評論還是他們自己的用戶帳戶。 attr_protected不會爲您做這件事,並將其更改爲attr_accessable不會引入您認爲它存在的問題。 attr_protected什麼都沒有與控制哪些用戶可以更新哪些記錄有關,它只指定哪些字段可以通過批量分配更新。

如果您依靠attr_protected來防止用戶更改他們不擁有的記錄,那麼您的系統就會被破壞。訪問控制方法不爲你做這個。每個寫入操作都應該檢查以確保用戶有權寫入該對象。

這一切說,你:password應該attr_accessable,讓你可以用password_confirmation連同validates_confirmation_of :password大衆分配給它,在一起。這是完全典型的,並沒有引入新的問題。

+0

謝謝你的回答。不幸的是,我原來的問題似乎沒有那麼清楚,所以我已經糾正了它。我並不是指將attr_protected用作常規安全步驟,只是爲了防止在未先輸入原始密碼的情況下更新密碼 –

相關問題