2011-06-18 126 views
0

人們通常會如何驗證從數據庫中獲取的信息是否確實與活動用戶相關?檢查權限?

例如:假設我們在用戶x的收件箱中列出了一組PM,我如何確保只有用戶x可以從收件箱中獲取某些內容,而不是其他人(這可以通過「hacking」課程地址)。

很明顯,我可以將活動用戶名與數據庫表中的內容進行比較,但是有沒有簡單的方法可以在某種程度上控制全局,而無需將活動用戶名與數百個不同表格進行比較以執行不同的操作?

+0

這應該是這樣做到這一點或$ _SESSION鍵!否則就是非常昂貴的方式......爲每個用戶分別創建不同的數據庫和表(這會不會很緊張?)。 – doNotCheckMyBlog

+1

當你在它只是購買每個用戶一臺服務器。 –

+1

另外,查看'Authentication'和'Authorisation'之間編程的區別。你需要先認證你的用戶證明他們的ID,然後一旦完成授權他們檢查他們的收件箱(但不是其他人) – CResults

回答

3

假設您正在提取登錄用戶的消息開頭,否?例如:

"SELECT * FROM `messages` WHERE `recipient` = '$loggedInUserId'" 

如果是這樣,我不明白這個問題。如果這不是你正在做的事情,那麼你做錯了什麼。

+0

是的。但是我想知道的是,如果有一種方法可以全局控制這些**,而不是對每個函數使用新的查詢。 – Nisto

+0

@Nisto如果你需要這些消息,你將不得不爲他們查詢。 「爲每個函數使用新的查詢」是什麼意思?你沒有給我們提供任何功能 –

+0

@Nisto然後沒有。你的數據庫不知道你的用戶的任何信息,所以你不能告訴它「無論我要查詢什麼,我只是指只有當前用戶」。這不是它的工作原理,而且很可能不是你想要的。您可以做的最好的做法是自己創建包裝器對象/函數*自動*將用戶標識插入到查詢中。 – deceze

2

那麼你的應用程序跟蹤用戶會話,並確保安全性。即當用戶登錄服務器設置cookie與會話ID,並通過會話變量你的服務器的請求頁面將知道什麼用戶真正要求的東西(或者可能根本沒有登錄的用戶,如果沒有cookie),因此您的應用程序可能會使用用戶會話和請求URL中的id來確定它是否應顯示請求的內容,或顯示錯誤消息或重定向,因爲用戶正試圖訪問不是他的內容。當然這是更多的涉及,但這是一個開始。我建議閱讀php會話和cookie。

1

這是數據庫查詢條件用於......僅選擇相關數據。

一般人一旦被記錄在你從$_SESSION變量得到他們的用戶名和密碼,查詢數據庫,以確保它們是有效的用戶,然後抓住任何你需要使用WHERE username = '$username'