2017-02-26 221 views
1

我使用會話變量進行登錄。如果登錄成功,則設置$_SESSION['userName']。在一些頁面有代碼,如if(isset($_SESSION['userName'])) echo $_SESSION['userName]; 我不知道如果$_SESSION['userName']已被其他網站設置在某人的瀏覽器,這將導致一個巨大的問題。我該如何克服這個問題,請建議。安全登錄按會話在php

+0

問你如何解決問題之前,你有沒有問自己如何可以複製嗎?你可能會意識到這個問題畢竟不存在...... – rlanvin

回答

2

會話值通過HTTP cookie在瀏覽器和服務器之間傳遞。 HTTP cookie只與(* .stackoverflow.com)相同的主機名共享 因此,我認爲另一個網站無法獲得其他網站的會話值。

+0

我沒有意識到這些東西。謝謝,我從你的回答中得到了我的解決方案。 – Harshanil

1

這就是PHP會話的工作原理。

PHP爲特定用戶生成會話ID。然後它將該ID進行散列並將散列作爲cookie傳遞給用戶。

在每個後續請求中,用戶都將該cookie發送回PHP,並查找該會話散列的會話數據。然後它可以啓動與該用戶相關的會話。在這種意義上,沒有其他用戶能夠在不知道會話散列的情況下訪問第一個用戶的會話。

但是,最終用戶很容易受到會話劫持的情況,以防其他人竊取他們的cookie,並且可能會發生多種方式。

  1. 會話固定您的網站的用戶使用它的人的技巧,有人爲他們提供了一個會話ID(有沒有什麼可以做這個)。

  2. 中間人攻擊,其中有人位於用戶和您的網站之間,並攔截所有傳遞的數據。這通常可以通過在HTTPS下提供頁面來保護,但並不總是如此,但有人竊取通過HTTPS傳輸的數據要困難得多。

  3. 跨站點腳本(XSS),當有人使用客戶端代碼(可以訪問cookie)來模擬該用戶時。您可以通過實施CORS限制併發送一個"nonce"以防止用戶在發送下一個請求時返回的每個響應。

  4. 利用瀏覽器漏洞將用戶的Cookie暴露給其他網站。瀏覽器製造商通常需要阻止網站訪問他們未設置的cookie,但有時會出現一些可以阻止這種情況的錯誤。如果用戶使瀏覽器保持最新(通常不是因爲漏洞利用不存在,而是因爲大多數人還沒有找到它們),通常需要處理這些問題。

  5. 有人闖入用戶家中並使用用戶的瀏覽器(對此無法做任何事情)。

很可能有更多的方式