2012-07-12 80 views
2

只想問一下。在HTML中使用數據庫主鍵ID

我有一個網站,每個用戶鏈接到數據庫中的一個ID,這個主鍵包含在許多表中。我提取用戶信息的最快方法是獲得此ID。

將這個ID放入網站HTML代碼會被認爲是不好的做法嗎?例如id =「theIDnumber」

否則,我可以使用用戶名,然後在數據庫中引用此ID - 這很好,但使用ID會更快,我相信。

想法?

+0

你可以(更確切地說,你應該)用它的ID,因爲它們是主鍵 – hjpotter92 2012-07-12 11:44:22

+0

你的直覺是對的訪問。通常做什麼是表單中的隱藏參數,例如,將用戶標識作爲參數,並且只顯示相關信息,例如first,lastname。這樣,如果你有兩個人叫做John Doe,那麼當你與服務器通信時,你會準確地知道你在談論哪一個人。 – 2012-07-12 11:47:43

+0

是否可以在HTML代碼中添加此密鑰 - 意味着其他人可以在源代碼中讀取它?或者這並不重要......在這裏考慮更多關於安全的問題。 – Adam 2012-07-12 11:47:43

回答

3

我會說不,如果你的鑰匙是可預測。一個簡單的例子:如果您使用順序增加主鍵,用戶可以從數據中提取信息,這可能是隱私問題。例如他們可以推斷哪個帳戶在他們的帳戶之前創建。對於那些試圖系統地從您的網站挖掘信息的人來說,生活也變得很容易。

一些相關的閱讀

  1. https://stackoverflow.com/a/7452072/781695

    你給你的最終用戶有機會與這些變量亂 ,並通過他們喜歡的任何數據。減輕此 漏洞的對策措施是改爲創建間接對象引用。這個 可能聽起來像是一個巨大的變化,但它不一定非要。 您不必去重新輸入所有的表格或任何東西,只需通過使用間接 參考地圖對您的數據進行巧妙處理即可完成 。

  2. https://security.stackexchange.com/a/33524/37949

    隱藏數據庫鍵並不是十分必要,但它確實使生活 更加困難,如果攻擊者試圖在 攻擊引用內部的ID。直接引用文件名和其他此類內部標識符可能允許攻擊者映射 服務器的內部結構,這可能對其他攻擊很有用。這也會引起路徑 注入和目錄遍歷問題。

  3. https://www.owasp.org/index.php/Insecure_Direct_Object_Reference_Prevention_Cheat_Sheet

    的對象引用映射第一填充被暫時存儲在會話授權 值的列表。當用戶 請求一個字段(例如:color = 654321)時,應用程序會在該會話的 中查找以確定適當的列名稱。如果 該值不存在於此有限映射中,則該用戶不是 授權的。參考地圖不應該是全球性的(即包括每個 的可能值),它們是隻有 有史以來填充授權值的臨時地圖/字典。