Securityð对Cookie-ªª的关注。
#javascript #网络开发人员 #初学者 #安全

真正的cookie是什么 Here
cookie是由网站存储在用户浏览器中的一小部分数据,以记住有关用户或跟踪其活动的某些信息。尽管正确实施时,cookie通常是安全的,但与之相关的是一些安全问题。让我们详细探讨这些安全问题:

ð中间人(MITM)攻击:

在MITM攻击中,恶意演员将自己定位在用户的浏览器(客户端)和Web服务器之间。这使攻击者可以拦截和查看双方之间的通信。如果没有加密通信,则攻击者可以读取敏感数据,包括cookie,在客户端和服务器之间传输。

Image description
资料来源:MITH

缓解

为了防止MITM攻击,网站应强制使用HTTPS(HTTP Secure)用于所有数据传输。 HTTPS对客户端和服务器之间交换的数据进行加密,这使攻击者难以阅读或修改信息,包括Cookie。

因此,开发人员应确保包含敏感信息或身份验证令牌的cookie具有安全的属性集。当存在安全属性时,浏览器将仅通过加密的HTTPS连接发送cookie,从而阻止其在不安全的HTTP连接上曝光。

示例:

document.cookie = 'dark_mode=false; Secure';

ð跨站点脚本(XSS)攻击:

当攻击者将恶意脚本注入其他用户查看的网站时,就会发生

XSS攻击。注入的脚本在受害者的浏览器的上下文中执行,允许攻击者窃取cookie,会话信息或代表用户执行未经授权的操作。

Image description
资料来源:XSS

缓解

开发人员必须采用严格的输入验证和输出编码实践,以防止XSS漏洞。网站上显示的任何用户提供的数据都应进行彻底消毒,以防止恶意脚本执行。

为了最大程度地减少XSS攻击对cookie的影响,应使用httponly属性。通过添加httponly,只能通过服务器端代码访问cookie,而不能通过在用户浏览器中运行的JavaScript访问。这样可以防止恶意脚本使用Document.Cookie API窃取cookie数据。

示例:

document.cookie = 'dark_mode=false; Secure; HttpOnly';

ð跨站点伪造(CSRF)攻击:

CSRF攻击涉及欺骗用户的浏览器,在不知不觉中向用户经过身份验证的其他网站提出意外请求。如果用户已登录到目标网站,则该请求将凭证执行,从而导致潜在的帐户妥协或未经授权的操作。

Image description
资料来源:CSRF

缓解

为了防止CSRF攻击,开发人员应在其Web应用程序中实现CSRF代币。这些令牌对于每个用户会话都是唯一的,应包含在执行敏感操作的所有请求中,例如更改帐户设置或进行交易。然后,服务器验证令牌以确保请求是合法的,而不是试图利用CSRF漏洞。

此外,可以与cookie一起使用Samesite属性来减轻CSRF风险。通过设置Samesite =严格,浏览器确保仅将Cookie发送到它们起源的同一站点,从而减少了来自其他域中未经授权请求的机会。

示例:

document.cookie = 'dark_mode=false; Secure; HttpOnly; SameSite=Strict';

饼干的替代方案:

虽然cookie已被广泛用于存储用户信息,但现代网络开发提供了替代方法:

  • ðsessionStorage和localStorage :这些是客户端存储机制,使开发人员可以将数据存储在用户的浏览器中。与cookie不同,这些存储量仅限于当前浏览器选项卡或窗口,并且每个请求都不会发送到服务器。虽然对于某些用例有用,但它们缺乏服务器端验证,并且不适合管理用户身份验证。
  • ð基于令牌的身份验证(例如JWT):基于令牌的身份验证提供了一种管理用户会话和身份验证的更安全的方法。当用户登录时,服务器会生成一个包含用户信息的唯一令牌,并在密码上签名。然后将令牌发送给客户端并包含在后续请求中。这种方法消除了cookie来管理用户会话的需求,并为各种攻击提供了更好的安全性。