security - session 重放、 session 固定、 session 劫持

标签 security session session-hijacking session-fixation

谁能明确区分 session 固定、 session 重放和 session 劫持攻击吗?我看了很多文章,但 session 劫持和 session 重放攻击之间的问题仍然不清楚。

最佳答案

固定和劫持最终都有相同的目标 - 获取 session 的访问权限。它们的区别仅在于实现这一目标的方式不同。

session 劫持只是窃取现有的有效 session cookie 的行为。最常见的是通过嗅探网络流量(MITM 攻击),但也可以通过任何其他可能泄露 session ID 的方式。

session 固定类似,但相反 - 预定义的 session cookie 被植入到受害者的浏览器中。因此,受害者登录网站后,他们将使用攻击者已知的相同 session cookie,因此攻击者拥有的 cookie 现在已通过身份验证并且可以被利用。
当然,这需要攻击者能够临时访问受害者的浏览器本身,但原理非常简单 - 如果数据一开始就在您的控制之下,则无需窃取数据。

重播有点不同,可能意味着两件事......

如果攻击者已经可以访问 session cookie(通过固定或劫持),那么这只是重复使用 cookie 来达到他们想要的目的的行为。
否则,它可以指欺骗受害者重新提交以前有效的请求(使用相同的 session cookie)。例如,用户可能会被诱骗购买多种数量的商品,而他们只想要一个单位。

注意:我在各处都使用了“ session cookie”来简化说明,但当然还有其他传输 session ID 的方法。

如何保护自己免受这些攻击:

  • 使用 TLS (HTTPS) 来防止 MITM 攻击,从而防止最常见的劫持方式。还设置Secure标记 Cookie,以防止通过纯文本连接提交它们(即浏览器仅在使用 https:// 方案时才会发送)。
  • 设置HTTPOnly cookie 上的标记,以便例如JavaScript 无法访问 cookie。如果 JS 无法访问 cookie,这也意味着它不能泄露它们(不能被劫持),但是还有很多其他方法可以利用客户端代码。
  • 针对用户执行的每个权限更改操作(登录、注销、以管理员身份登录 - 如果有额外的表单)以及定期的短时间间隔重新生成 session ID。这是针对这 3 种攻击所有的缓解机制。
  • 让您的应用程序拒绝与服务器端记录不匹配的 session Cookie,以防止固定。

关于security - session 重放、 session 固定、 session 劫持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43752890/

相关文章:

php - 我不明白为什么 session_regenerate_id 在低连接情况下很危险?

iframe - X-Frame-Options header 在防止恶意框架方面有多有用?

security - 如何在 React Native 应用程序中保持客户端 JSON Web token 的安全?

javascript - 为什么在脚本标签有效时禁止跨域ajax?

php - 如何保护登录 session

php - 如何在 Symfony 中注销被禁止的用户?

asp.net - 避免 ASP.NET 中的 session 劫持

java - 用于 java 的 AES CS2Padding

mysql - 即使未加载 codeigniter session 库,也会在数据库中创建新的 session 条目。为什么?

PHP session - 具有 1 个 IP 的多个用户