2012-02-23 26 views
2

我注意到,SO和其他網站使用用戶表的自動遞增主鍵作爲公開可見的用戶ID(至少我認爲這是他們在做什麼)。就SO而言,如果您知道或可以猜出他們的用戶ID,則可以查看用戶的個人資料。使auto_incremented用戶標識可見的注意事項?

執行類似風格的用戶標識生成之前需要考慮的事項有哪些?我正在開發一個非商業應用程序,它依賴於「朋友」的概念來指定用戶之間的各種權限,但我希望所有用戶的基本配置文件都可以通過簡單的URL(如app.com/users/userid)進行查看。更詳細的配置文件信息只能由該用戶已經確認的該用戶的「朋友」訪問。

我想我的問題是,用戶ID的「可猜測性」是否表明系統的固有安全性,或者說,是否所有的方式都是單個功能實際實現的?有什麼我可能沒有考慮到這個會使它變得不明智嗎?任何我應該完全避免使用這些用戶id的方法?

附註:我不擔心「競爭對手」會根據最近用戶的數量或用戶之間的變化率知道或猜測我有多少用戶。

+1

我給每個用戶一個auto-inc id和一個32個字符的隨機哈希,這取決於我在哪裏使用它們,哈希提供了防止猜測id的保護。 – 2012-02-23 19:46:44

+0

我同意@Dagon。 Keys將您的表格鏈接在一起,您還可以創建可公開共享的唯一'ID',並仍可用於識別單個記錄。這些ID可以改變,而鍵不應該改變。 – 2012-02-23 19:48:46

+0

之前已經詢問過這個問題,可以自由地搜索該網站以找到一些有見地的以前的討論,例如, [在Web應用程序中使用「自定義」用戶ID而不是用戶的真實auto_incremented數據庫ID?](http://stackoverflow.com/questions/3739833/using-a-custom-user-id-as-opposed-到用戶實際自動增量數據庫)或[是mysql自動增量安全作爲用戶ID使用?](http://stackoverflow.com/q/8078912/367456) – hakre 2012-02-23 19:50:58

回答

1

這根本不是問題。事實上,我幾乎會說相反的話:如果你爲了安全而不得不掩蓋URL中的參數,那麼你就錯了;應該在代碼中處理安全性。

從你的問題看來,你已經在考慮正確的安全方式了,所以你應該在URL中使用主鍵。

擁有一個不存儲信息的primary_key(如auto_incremented id)也很好,因爲它永遠不會改變。如果您要將網址中的用戶名這樣的信息放入網址中,您可能希望永遠不要實施能夠修改其用戶名的人員,或者處理他們在進行操作時可能遺留的鏈接(請記住,他們可能位於除您以外的網站上)。

在您的網址中只有auto_incremented id可能會泄漏的唯一信息是,一個用戶會知道他們是否是用戶之前或之後的用戶。這不太可能是一個問題(反正也不可靠)。

+1

只要確保你使他們的登錄ID不同。每個人都會想要較低的數字,因爲較低的數字很酷。 :) – 2012-02-23 20:02:42

+0

@馬庫斯亞當斯說實話,我有點像這就是爲什麼我真的想用它作爲用戶ID,如果它本質上不危險。謝謝! – itsmequinn 2012-02-23 20:04:37

2

OWASP - Insecure Direct Object References

是對主題的一個很好的治療方法。事實上,在開發Web應用程序時,我強烈建議OWASP總體上提供安全準則。我總是評估我的網站項目與網站上發現的十大安全威脅。

+0

哇,這是一個很好的資源,謝謝 – itsmequinn 2012-02-23 20:11:40