2012-12-29 190 views
0

我有一個網絡應用程序,用戶登錄後,他/她的cookie設置爲由setcookie()設置的用戶名。Cookie會話和安全

請提出更好的安全方法。

+0

使用'session'取代'cookie' – Sky

+0

你的意思是你檢測通過用戶名登錄的用戶在* *一個cookie存儲在您的服務器上「安全」以外的其他地方?或者,您正在使用Cookie進行會話,並將用戶名保存在cookie中會話標識的會話中? –

+0

不使用cookie進行身份驗證,使用會話它會自動設置cookie –

回答

1

使用PHP會話而不是cookie。會話變量是服務器端的。 PHP將自動處理會話管理。如果你想要更多的控制,你也可以重載它的功能。

http://php.net/manual/en/intro.session.php

session_start(); 

$_SESSION['user'] = 'michael' 

使用PHP的會話,只有會話標識符存儲在瀏覽器Cookie。您可以將任何信息存儲在超全局變量$_SESSION中,並且瀏覽器將無法查看或篡改這些變量。

爲了更加安全,您應該存儲用於登錄的遠程地址,並在每次頁面加載時進行比較。這是爲了確保沒有人劫持會話ID並假裝從另一個位置登錄。

session_start(); 

if (_logging_in__) { 
    $_SESSION['user'] = 'michael' 
    $_SESSION['ip'] = $_SERVER['REMOTE_ADDR']; 
} 

要查看用戶是否登錄。

session_start(); 

if (isset($_SESSION['user'])) { 
    // the user is logged in 
    if ($_SERVER['REMOTE_ADDR'] != $_SESSION['ip']) { 
     // the session id was hijacked so log out 
     session_destroy(); 
     exit; 
    } 
} 
+0

這並沒有真正得到關注的根源;會話固定在很多情況下都很容易,所以它有什麼重要*?兩者都是「邪惡」。對? –

+0

爲什麼會議是邪惡的? – Michael

+0

[Session fixation](http://phpsec.org/projects/guide/4.html),打開不安全的wifi網絡,[Firesheep](http://en.wikipedia.org/wiki/Firesheep)和wireshark,a設備和網絡暴露服務的泛濫,安全執行不力或遭受隧道洞察。不算太差」。但是你並沒有得到重要的改進。實際上,一些框架將會話數據*存儲在瀏覽器的Cookie中*。那麼它是幹什麼的? –