2012-12-29 64 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中*。那么它是干什么的? –