【发布时间】:2011-11-06 05:12:29
【问题描述】:
了解用户是否是正确的人而不是黑客的最佳方法是什么? 例如,在我的项目中,当用户登录时,我创建了一些带有一些数字的会话变量,然后在其他页面上我检查了这个会话变量,并根据它的值给用户一些选项。
那么黑客能否以某种方式更改此变量,以便服务器端授予他访问某些选项的权限?
如果是这样,持有某些用户权限并将其传递到不同页面的最佳方法是什么,以便服务器可以授予该用户一些选项?
【问题讨论】:
了解用户是否是正确的人而不是黑客的最佳方法是什么? 例如,在我的项目中,当用户登录时,我创建了一些带有一些数字的会话变量,然后在其他页面上我检查了这个会话变量,并根据它的值给用户一些选项。
那么黑客能否以某种方式更改此变量,以便服务器端授予他访问某些选项的权限?
如果是这样,持有某些用户权限并将其传递到不同页面的最佳方法是什么,以便服务器可以授予该用户一些选项?
【问题讨论】:
为了更清楚地理解会话劫持,有几种黑客劫持会话的方法让我对不同类型的会话劫持有所了解。
用于实施会话劫持的主要方法有四种:
会话固定,攻击者将用户的会话 ID 设置为他已知的,例如通过向用户发送一封电子邮件,其中包含包含特定会话 ID 的链接。攻击者现在只需要等到用户登录。
会话劫持,攻击者使用数据包嗅探来读取两方之间的网络流量以窃取会话 cookie。许多网站对登录页面使用 SSL 加密以防止攻击者看到密码,但一旦通过身份验证,就不会对站点的其余部分使用加密。这允许可以读取网络流量的攻击者拦截提交给服务器的所有数据或客户端查看的网页。由于此数据包含会话 cookie,因此即使密码本身没有泄露,他也可以冒充受害者。1 不安全的 Wi-Fi 热点特别容易受到攻击,因为共享网络的任何人通常都能够读取大部分内容其他节点和接入点之间的网络流量。
或者,具有物理访问权限的攻击者可以简单地尝试窃取会话密钥,例如,获取用户计算机或服务器适当部分的文件或内存内容。
跨站脚本,攻击者欺骗用户计算机运行被视为可信的代码,因为它似乎属于服务器,允许攻击者获取 cookie 的副本或执行其他操作
虽然有几种解决方案可以阻止这种劫持,例如第二种使用 SSL 或 https 的解决方案是避免这种劫持的合适方法。但是,如果您想为会话添加更多安全性,那么我遇到的一种解决方案是仅允许通过 Cookie 传递 seesionId,并生成通过 URL 传递的附加会话令牌。并且只有包含有效 Session toekn 的请求才能访问该会话。
以下是 Orielly PHP CookBook 所采用的示例。
ini_set('session.use_only_cookies', true);
session_start();
//Create a random salt value
$salt = 'Hjkhkjh9089&j98098';
$tokenstr = (str) date('W') . $salt;
//Create a md5 hash to be used for token.
$token = md5($tokenstr);
if (!isset($_REQUEST['token']) || $_REQUEST['token'] != $token) {
// prompt for login
exit;
}
$_SESSION['token'] = $token;
output_add_rewrite_var('token', $token);
现在output_add_rewrite_var 做了什么,它通过 Get 方法向 url 重写机制添加了另一个名称/值对。在此处阅读有关该功能的更多信息。 output_add_rewrite_var
要了解有关会话安全的更多信息,我建议您阅读这篇文章http://hungred.com/useful-information/solutions-session-attacks/
希望这可以帮助您了解会话的漏洞以及如何修复它。
【讨论】:
从 ip(最好不要)、会话 id 和用户 cookie 中的其他一些唯一数据创建哈希,并检查每个请求...通过这种方式,您可以控制会话劫持
另一方面,您必须拥有每个会话的表以获得 acl 系统等特权...将所有设置保存在数据库中并使用会话 ID 查找所有设置
【讨论】:
【讨论】: