2012-02-10 43 views
0

有幾個jQuery插件(jqgrid,DataTables等)用於在具有高級功能的html表中顯示數據。那些具有實時編輯能力的人可以將mysql行ID存儲在表本身中(並使其不可編輯),或者像源行中的行ID一樣。在源代碼中顯示MySQL行ID:好還是壞?

我也讀過,揭示任何關於你的數據庫設計是一個壞主意。

在源代碼或表本身揭示一個MySQL行ID是一個大問題?它僅取決於數據的敏感性?

在javascript中匹配html錶行id與mysql行id的哈希表是否會更好?

+0

向用戶公開主鍵通常是非常嚴格的 - 他們可以依賴於它,使得改變(如果/必要時)變得困難。這也是一個安全問題 - SQL注入可能會造成更多的損害。 – 2012-02-10 04:53:32

回答

2

如果您要依據數據模型的「obscurity」來保護您免受像SQL Injection這樣的問題,那麼您將非常失望。另外,如果您不是用戶正在提供的理智檢查值(例如rowid進行更新),那麼您的應用程序中會出現漏洞。這與您在應用程序中用於識別數據的內容無關。主鍵本身通常不是敏感數據。

簡而言之,使用行ID通過您的應用程序識別來自您的用戶的數據不是一個問題,只要您有理智地檢查用戶輸入,就像您需要做的一樣。請注意,如果您在網址中顯示ID,則可能會遇到一些問題,因爲用戶傾向於在最奇怪的地方爲書籤添加書籤。這聽起來不像你想要那樣做。

查看Should I obscure primary key values?的相關討論。

+0

我嘗試和清理所有數據(我使用mysql真正的轉義字符串)。 此外,該ID不會在URL中,它只是一個行的HTML ID。所以書籤問題並非如此。 謝謝。 – dewyze 2012-02-10 05:13:23

1

正如您所說,它取決於數據的敏感性。不過,我想向你解釋我爲這種情況所做的一切。可能會幫助你。

我添加了數據庫錶行的ID作爲HTML錶行ID。當有人編輯。一旦我收到請求,我檢查了幾件事情。

  1. 是該用戶進行身份驗證
  2. 這是否用戶有權限編輯這個模塊
  3. 中的行,該行的選擇可以通過該用戶編輯。

您也可以將2和3個步驟組合在一起。如果你想要更多的安全性或審計,你也可以保留一個日誌。

如果您需要,您可以對ID進行編碼並將其設置爲行ID。當你得到編輯請求時,你可以解碼並得到。