【发布时间】:2020-04-16 05:04:18
【问题描述】:
我知道这已经被问了数十亿次,但我对我的编码安全性非常偏执/强迫症。我正在做一个小项目。会话数据将仅包含:
user_id 1
user_name 我的用户名
logged_in true
csrf_token 87cc51ee94178df79cccce2aebc45d53 p>
这是我的代码。在小型 CMS 上使用是否安全?
session_start();
ini_set('session.cookie_httponly', 'On');
ini_set('session.cookie_secure', 'On');
ini_set('session.use_cookies', 'On');
ini_set('session.use_only_cookies', 'On');
$rand = rand(1, 10);
if ($rand != 1 || $rand != 3 || $rand != 5)
session_regenerate_id();
$user_ip = md5($_SERVER['REMOTE_ADDR']);
$user_agent = md5($_SERVER['HTTP_USER_AGENT']);
if (isset($_SESSION['user_ip'], $_SESSION['user_agent'])) {
$session_user_ip = $_SESSION['user_ip'];
$session_user_agent = $_SESSION['user_agent'];
if ($session_user_ip != $user_ip || $session_user_agent != $user_agent) {
unset($_SESSION);
session_destroy();
die('Error');
}
} else {
$_SESSION['user_ip'] = $user_ip;
$_SESSION['user_agent'] = $user_agent;
}
然后调用会话:
$_SESSION['user_id'] = 1;
$_SESSION['user_name'] = 'MyUsername'; // etc.
额外信息
我将使用会话数据来检查用户是否有权做某事。示例:if ( user_has_perm( $_SESSION['user_id'] ) )
提前感谢您的帮助。
【问题讨论】:
-
而你的问题究竟是......?
-
@PHPNooB 引用:
Here's my code. Is it secure enough to use on a small CMS? -
我相信他的问题是“在小型 CMS 上使用是否足够安全?”,尽管它需要更多细节。就其本身而言,该部分是安全的。如果通过安全,您的意思是如果 ip 或用户代理更改,会话将被重置...
-
另外你不应该直接
unset($_SESSION); -
@Zanathel 我不确定这如何解决这里的安全问题。
标签: php security session suhosin