2010-03-30 59 views
1

嘿,我正在掃描我的網站以確保安全,並且我注意到非用戶可能發送請求和發佈信息,因此我決定在所有信息帖子中加入登錄檢查。我想知道是否爲每個用戶在會話變量$_SESSION['id']=md5(uniqid());中爲md5(uniqid());保留一個會話ID,然後將該會話ID存儲在該用戶的活動用戶下的數據庫中是一種好方法。然後,當用戶嘗試插入信息時,請確認其$ _SESSION ['id']變量等於數據庫中用戶名等於$ _SESSION ['username']的變量。你對這個傢伙有什麼想法?提前致謝!關於會話安全性的快速提問

+0

這樣做的目的是爲了讓用戶不能在多個地方登錄?作爲一個用戶,我發現這非常討厭我遇到它的地方。 – 2010-03-30 00:14:09

+0

沒有目標是阻止未登錄的用戶向數據庫提交信息 – Scarface 2010-03-30 00:23:58

回答

1

一種解決方案是在用戶登錄時設置一個名爲「loggedin」的會話變量或其他內容,並確保在執行數據庫更新時設置變量(在執行SQL調用之前調用session_start(),以及在發送查詢之前檢查$ _SESSION中的變量)。這樣,未登錄的用戶無法更新數據庫,除非他們從已經登錄的用戶那裏竊取了會話。從我所瞭解的問題來看,這聽起來像是最簡單的解決方案。

這聽起來像是你想出的解決方案已經內置到SESSIONID的PHP會話中。 PHP中的新會話自動生成一個隨機字符串,用於標識來自其他會話的會話。不過,我可能會誤解。

+0

我很擔心人們舉起高峯會,所以這就是爲什麼我認爲做id檢查可能是個好主意,因爲那時我認爲黑客很難猜測他們的信息被接受所需的必要ID 。 – Scarface 2010-03-30 00:49:13

+0

防止會話劫持的最佳方法是使用HTTPS通過SSL執行會話。否則,最終用戶應該避免被劫持。 – 2010-03-30 00:51:09

+1

對不起,我剛剛看到你對丹故事的評論。 HTTPS使用SSL加密用戶和服務器之間的數據傳輸。如果您已經使用了每個銀行網站,則會注意到該URL以HTTPS而不是HTTP開頭。這意味着他們擁有一個加密數據傳輸的SSL證書,以便可能被劫持者無法看到來回的數據,包括cookie和會話。這篇Wiki文章可能會有所幫助:http://en.wikipedia.org/wiki/HTTP_Secure – 2010-03-30 00:54:40

0

我之前在網站上做過這件事,但這不是一種安全措施,而是一種允許用戶擁有多個併發會話的功能。真正的關鍵是在執行需要授權的操作時檢查有效的登錄令牌,並通過HTTPS運行您的站點以便會話cookie不被劫持。

+0

該檢查的主要目的是讓未登錄的用戶無法向數據庫提交信息。你能否詳細說明登錄令牌,以及通過https運行站點的含義,我如何知道我是否是服務器配置?(對不起,我對PHP的安全性有些不熟悉)。 – Scarface 2010-03-30 00:26:24

1

爲什麼不檢查是否設置了$ _SESSION ['username']?

+0

,因爲它很容易欺騙 - 他擔心非用戶發佈。 – Val 2010-03-30 06:48:47

+1

@Val whata廢話。誰說這很容易欺騙?非用戶只是不會有$ _SESSION ['用戶名'] varibale集。 – 2010-03-30 07:05:00