攻击者不能仅仅更改他/她的会话(或 cookie,因为它存储在本地)信息然后欺骗服务器他是合法用户吗?
例如,如果一个网站使用数据库 id 作为标识符,攻击者会登录到他的帐户来获取他的 cookie。然后只需修改他的 ID 以冒充另一个合法用户。
攻击者不能仅仅更改他/她的会话(或 cookie,因为它存储在本地)信息然后欺骗服务器他是合法用户吗?
例如,如果一个网站使用数据库 id 作为标识符,攻击者会登录到他的帐户来获取他的 cookie。然后只需修改他的 ID 以冒充另一个合法用户。
是的,如果你能猜出另一个用户的会话密钥,那么你就可以成为他们。这就是为什么您需要有一个可以撤销的不可预测的会话密钥。
在某些情况下没有遵循最佳实践,例如 Moonpig 生成的 API 使用会话密钥,该会话密钥是用户 ID,在创建帐户时设置为连续数字。这意味着您可以是任何用户。如果该用户想阻止您,他们不能,因为它是他们参与的所有会话的关键,并且无法更改,因为它是他们在 Moonpig 数据库中的唯一 ID。
这是一个很好的例子来说明如何做错。会话密钥应该是不可预测的并且能够被丢弃(一个用户可能拥有多个会话密钥)。
正如@Mindwin 在评论中提到的,会话密钥应该在 HTTP 有效负载(cookie 或表单数据 [最佳实践在 cookie 中])中,而不是在 URL 中。这是因为在 URL 中包含会话数据,因此您必须将其放在每个链接的 URL 中,如果用户离开并返回,则阻止您保持会话,复制 URL 并将其发送给某人给他们您的会话数据,并且 URL 可以包含的字符数有限制。
您还应该尽可能使用 HTTPS,以便攻击者无法窥探 HTTP 有效负载并以这种方式获取会话密钥的副本(这就是 Firesheep 的工作方式)。
是的。它可以。
会话信息存储在服务器端(会话令牌除外),而另一种方式的 cookie 存储在客户端(浏览器)中。因此,攻击者可能会更改会话令牌以劫持会话。
这种攻击通常被称为通过 cookie 操作进行的会话劫持。但攻击者必须使用有效的会话令牌,如果站点配置不当,则可以轻松找到该令牌。配置不当的站点可能会在 url 中存储令牌,或者不会生成随机令牌等...
以下是用于劫持会话的四种主要方法:
受保护的最佳实践是将会话令牌存储在 cookie 中。但是,如果会话令牌不符合强标准,例如随机性、唯一性、对统计和密码分析的抵抗力,则攻击者可能会操纵会话。
这里的 cookie 和会话信息之间似乎有些混淆,所以让我们从整理一下开始:
Cookie存储在客户端上。因此,用户可以根据需要更改它们。
会话信息存储在服务器上。这意味着用户无法更改它。
“永远不要相信客户”是安全领域的老规矩。这意味着您永远不能信任 cookie 中的信息 - 仅仅因为用户名 cookie 具有值“Alice”并不意味着“Mallory”不是登录的人。
因此,重要信息通常不会存储在客户端的 cookie 中,而是存储在服务器的会话中。然后,您使用带有会话 ID 的 cookie 来连接两者。会话 ID 是一个长随机数。如果 Alice 会话 ID 是20349023490324
服务器,则服务器会将她的所有会话信息(例如她的用户名)归档在该编号下。
用户可以更改会话 ID,但由于有很多可能的会话 ID,她极不可能猜到实际连接到用户的 ID。
在某些情况下,您可能仍希望将数据存储在 cookie 中。为了防止用户摆弄他们,您可以使用您仅在服务器上拥有的密钥对其进行签名。由于用户没有密钥,服务器将能够检测到 cookie 的任何更改,因为签名不再匹配。
会话 ID 需要在密码学上是安全的,因为您不能简单地猜测它们。通常,它只是一个随机的 128 位数字,与它所识别的用户绝对没有明显的联系。因此,为了冒充其他人,您需要找到该用户的 ID。有很多方法可以做到这一点,但它们与“只是修改”它以成为其他人不同。
但是,服务器有一个匹配真实用户信息和属于该用户的会话 ID 的表,因此它可以使用该信息。但是,您永远无法仅通过查看存储在浏览器中的会话 ID 来知道其他人的会话 ID。