php中的安全会话/cookie
我有一个关于会议的问题。如何创建安全的登录会话/cookie。 我在看这个例子,他们将这个数组添加到会话中:php中的安全会话/cookie,php,session,cookies,Php,Session,Cookies,我有一个关于会议的问题。如何创建安全的登录会话/cookie。 我在看这个例子,他们将这个数组添加到会话中: $data = array{ username = $_POST['username']; is_logged = true; } 我想知道这是否足够?无法将cookie中的用户名更改为任何内容或任何人吗?有什么好办法可以解决这个问题 或者这是完全安全的,我错过了什么 另外,你们觉得在数据库中存储会话怎么样?我知道tha CI有一个内置的功能来实现这一点。这会导致性
$data = array{
username = $_POST['username'];
is_logged = true;
}
我想知道这是否足够?无法将cookie中的用户名更改为任何内容或任何人吗?有什么好办法可以解决这个问题
或者这是完全安全的,我错过了什么
另外,你们觉得在数据库中存储会话怎么样?我知道tha CI有一个内置的功能来实现这一点。这会导致性能方面的问题吗,或者值得启用吗?是的,这是一种非常不安全的方法,如果您想防止会话劫持,就不应该在任何地方使用 更可靠的方法是在用户登录时为其生成唯一的会话ID(例如哈希),并将会话与此ID服务器端关联。然后仅将cookie中的此会话ID发送回客户端。当客户端发送带有cookie的请求时,您获取会话ID并恢复用户名以及与之相关的任何其他信息,以便处理请求
客户端可以访问cookie中的会话ID,但该值对他来说毫无意义,因为他无法从中推断出任何信息,并且发送随机会话ID的成功几率很小。我相信您误解了PHP会话的工作原理。您可以将用户名、登录状态和其他内容安全地存储到
$\u会话
数组中,因为它存储在服务器端。发送到浏览器的唯一内容是一个cookie(名为PHPSESSID,除非您在php.ini
中对此进行了更改),其中包含会话ID,这是一个唯一的随机数
一旦访问者每次请求顶部有session\u start()
的页面时都有一个活动会话,session\u start()
将查看名为PHPSESSID的cookie请求,读取服务器端会话文件(如果会话存在且有效)并还原已归档的$\u session
数组。此阵列永远不需要离开服务器
会话cookie的设置没有过期日期(除非您弄乱了php.ini中的session.cookie\u life
选项),因此浏览器会在关机时删除它。服务器上的会话文件本身有一个过期时间,由session.gc\u maxlifest
管理(以秒为单位)
安全会话的路径:
- 确保仅使用cookies将会话id传递到浏览器设置
,会话。使用\u cookies=1
,会话。仅使用\u cookies=1
(我将为您提供备用语法的详细信息)会话。使用\u trans\u id=0
- 防止会话劫持(即其他人伪造现有会话)将识别浏览器的内容存储到$\u会话中-一种常见模式是存储浏览器的用户代理头、接受头、远程IP地址或其组合的
;检查它是否在每个新请求时与现有会话id匹配md5()
- 如果您在共享服务器上,您确实应该将您的会话文件与服务器邻居的会话文件分开:设置
到只有您和PHP可以访问的文件夹session.save_path
<?php
session_start();
$params = session_get_cookie_params();
setcookie(session_name(), '', 1, $params['path'], $params['domain'], $params['secure'], isset($params['httponly']));
session_regenerate_id(true);
session_destroy();
session_write_close();
header('Location: your_login_page.php');
exit;
我无法从您的代码片段中理解您到底在做什么。我正在将$data数组传递给会话,以便会话使用它创建cookie。但这看起来不安全,我想知道如何使其安全…你的意思是,例如,当我将用户ID发送到cookie时,我应该对其应用md5函数,还是应该在生成哈希时使用某种密钥,以便恢复用户ID?非常感谢。您应该生成一些不可预测的内容,否则恶意用户可能会不断生成具有不同用户ID的值并对其进行散列。您可以生成一个[userID][一些随机数据]形式的字符串,然后对其进行散列。可以使用PHP的uniqid()函数生成随机数据。那样你就很安全了。谢谢,你说得对,我把会话和饼干混淆了!解释得很清楚!