【发布时间】:2018-05-01 19:54:22
【问题描述】:
我想确保$_SESSION 不会在涉及它的登录方案中被愚弄。我在这里过度简化了,只保留问题的核心。
使用时
<?php
$password = "...";
session_set_cookie_params(3600, dirname($_SERVER['SCRIPT_NAME']));
session_start();
if (isset($_POST['pass']) && $_POST['pass'] === $password) {
$_SESSION['iamlogged'] = 1;
}
if (!isset($_SESSION['iamlogged']) || !($_SESSION['iamlogged'] == 1)) {
echo '<html><body><form action="." method="post"><input type="password" name="pass" '
. 'value=""><input type="submit" value="Submit"></form></body></html>';
exit;
}
echo "You logged in in the last 30 minutes.";
// Now we can do some work
确定对于没有密码的任何人都无法显示最后一行吗? 或者 PHP 中是否存在当前已知的技术来手动强制此 $_SESSION['iamlogged'] 值?
注意:当然,我确实使用密码 hasing+salting 等,但我删除了所有这些,只关注$_SESSION 安全性。
注意 2:我假设 register_globals 已关闭,因为 PHP 比 5.4 更新。
注意3:这里是live 版本。
【问题讨论】:
-
我一定已经读了 10 遍了,但我没有掌握。你说的“被愚弄”是什么意思?就像“被黑/欺骗/绕过/中间人”一样?而这个
echo "Can we arrive here without the password?";,是问题的一部分吗? -
@Fred-ii- 我的意思是,除了强制所有密码,除了中间的人,不知道密码的用户是否有可能显示最后一行(
echo ...)?示例:你能在secret-ravine-92114.herokuapp.com 中显示这一行吗? -
无论如何都会出现回声。您需要将其放在已登录用户的条件语句中并设置会话。
-
@Fred-ii- 不,它不会:如果你没有登录,它会在之前的
exit;停止,并且不会执行最后一行。 -
会话数据存储在服务器上,不能由客户端设置。欺骗会话的唯一方法是让某人猜测别人的
PHPSESSIDcookie。
标签: php security session cookies session-variables