2012-04-21 94 views
0

我正在運行一些用戶帳戶(沒有cookie,php會話系統)的基本網站。 我想存儲用戶生成的一些數據,只能看到他們自己。用戶數據數據庫結構

對於我來自所有用戶的數據存儲在一個表中,以用於識別一個額外的列(這是從PHP會話用戶ID的輸入)的時刻。 (我們正在討論每個用戶最多50-100個關鍵字)。

在數據請求我有一個額外的參數在MySQL查詢(= X和「用戶ID」)。

  1. 這是存儲數據的安全(有在網站上沒有敏感數據,但帳戶必須是私人反正)的方式?

  2. 是否有更好的方式來處理呢? (我讀過關於單獨的數據庫等),如果是這樣,怎麼樣?

THX,

M.

+0

只要你使用轉義的數據/ PDO等你應該不錯。出於好奇,你的確切查詢是什麼?爲什麼不使用「從表user_id =」選擇數據。 intval($ x)。 「」;? 編輯,你也可以散列USER_ID等也確保它不被篡改可言,但似乎有點矯枉過正海事組織 – Bono 2012-04-21 15:34:53

+0

Srry如果我不清楚,但正是這就是我現在做的東西的方式。 :-) – 2012-04-21 15:38:50

回答

2

這是存儲數據的安全(有在網站上沒有敏感數據,但 賬戶必須是私人反正)的方式?

讓你的mysql查詢中的user-id=x從表中獲取數據沒有任何錯誤。但要確保你沒有直接從你的查詢字符串中讀取這個值,並追加到mysql查詢中,而沒有進行適當的清理和清理。 否則你將成爲SQL injection的vicitm。

是否有更好的方式來處理呢? (我讀了關於單獨的數據庫 等),如果是這樣,如何?

我看不出有任何理由有單獨的數據庫來處理這個問題。你可以使用你當前的數據庫。如果需要,您可以爲此創建附加表格。我不確定你的數據庫模式和實體關係是什麼。所以我無法告訴你如何做到這一點。看看你的表格,並確保它是正常化的。

如果希望存儲的數據只能被該特定用戶看到,那麼您可能需要檢查當前登錄的用戶標識(從會話變量?獲取)是否與db記錄的userId相同。也許你可以與「CreatedById」字段值比較,如果你有一個。

我相信這個鏈接是一個必須閱讀,如果「SQL注入」是給你的一個新名詞。 http://www.unixwiz.net/techtips/sql-injection.html

+1

Thx的提示,我清理登錄等,但我沒有考慮這個洞呢。我沒有閱讀這篇文章,但看起來很多重要的信息顯然都捆綁在那裏,Thx – 2012-04-21 15:51:01

0

只需使用PHP $SESSION

通過使用session_set_save_handler您可以定義自己的會話存儲方法,這可能是一個MySQL數據庫的實例。

在會話中的值不能直接由用戶改變(你可以用餅乾)。所以這種方法非常安全,只要您不會在任何地方暴露cookie值。

0

沒有辦法是100%安全。你的方法聽起來很不安全,但我看不到你的代碼。如果你正在清理輸入,以避免mysql注入,也沒有辦法讓用戶指定另一個用戶的密鑰,那麼你可能會沒事。