PHP。如果我把$_SESSION['userid']作为标识符,是否有安全问题?

问题描述 投票:0回答:1

我有一个登录系统。当用户登录时,用户数据会被存储在$_SESSION变量中(id, username, ...),像这样(login.php)。

$sql = 'SELECT * FROM users WHERE username = :username';
$statement = $con->prepare($sql);
$result = $statement->execute(array('username' => $username));
$userdata = $statement->fetch();
$hashedPassword = json_encode($userdata['password']);

//check password
if ($result && password_verify($password, $userdata['password'])) {
session_regenerate_id();
$_SESSION['loggedIn'] = true;
$_SESSION['username'] = $username;
$_SESSION['id'] = $userdata['id'];
echo $_SESSION['id'];
echo 'true';
} else {
exit('false');
}
}else{
    exit('false');
}

现在我的问题是: 当我使用这些数据作为可信数据的时候, 这是不是一个安全问题, 也许像:

INSERT INTO userRelatedTable (userId,data1,data2) VALUES ($_SESSION['userid'] (<= !!!) ,'data1','data2')

换句话说: 当我用sessionkey说session_start();时,php是否处理了安全部分,还是我必须自己生成一个key,存储它并将其作为标识符?

问候

php security session
1个回答
0
投票

客户端不能直接修改 $_SESSION 因为它是存储在服务器端的。然而,实现可能会使其成为可能。

$_SESSION['username'] = $_POST['username']; // Now $_SESSION['username'] can be anything

$_SESSION['id'] 不能SQL-inject,如果 id 是数据库中的一个整数字段。但是为了保持一致性和安全起见,你可能会希望在这里也使用准备好的语句。

© www.soinside.com 2019 - 2024. All rights reserved.