Cookie 安全问题

在浏览器中,Cookie 是服务器让浏览器帮忙携带信息的手段,就像饼干里的纸条,浏览器会储存它,并且在后续的 HTTP 请求中再次发送给服务器。

我们可以通过浏览器的开发者工具,在Application页面中查看浏览器存储的Cookies信息。

通常我们会在Cookies中记录:

  • 会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息)
  • 个性化设置(如用户自定义设置、主题等)
  • 浏览器行为跟踪(如跟踪分析用户行为等)

以上这些数据不可能通过链接参数进行传递,因此 Cookies 就是一个很好的容器。

那Cookies又会发生什么安全问题呢?

01 CSRF 攻击

CSRF:跨站请求攻击,简单地说,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并运行一些操作(如发邮件,发消息,甚至财产操作如转账和购买商品),也可以这么理解:使已登陆用户在不知情的情况下执行某种动作的攻击手段。

举个例子,一家银行用以运行转账操作的 URL 如下:

ini 复制代码
http://www.examplebank.com/withdraw?account=AccoutName&amount=1000&for=PayeeName

那么,一个恶意攻击者可以在另一个网站上放置如下代码:

ini 复制代码
<img src="<http://www.examplebank.com/withdraw?account=scar&amount=1000&for=Badman>">

如果有账户名为 scar 的用户访问了恶意站点,而她之前刚访问过银行不久,登录信息尚未过期,导致发起请求后后端以为是用户正常操作,于是进行扣款操作,那么她就会损失 1000 资金。通过设置 sameSite 可以防止跨域发送 Cookie,抵御 CSRF。

02 XSS 攻击

跨站脚本攻击(XSS),是最普遍的Web应用安全漏洞。这类漏洞能够使得攻击者嵌入恶意脚本代码到正常用户会访问到的页面中,当正常用户访问该页面时,则可导致嵌入的恶意脚本代码的执行,从而达到恶意攻击用户的目的。

说得简单一点,在上面的案例中,我们介绍过,Cookie可以用来存储用户的登录信息,自己的登录信息,可以直接通过开发者工具查看,但是我们没有办法直接获取别人的Cookie信息,而XSS攻击,就是希望通过恶意脚本获取其他用户的个人信息,因此,Cookie的安全问题,同样不可小视。

XSS 容易引起的安全问题:

网络钓鱼 盗取各类用户信息、账号、银行卡信息等。 信息窃取 窃取 Cookie,获取用户隐私信息,利用用户身份进一步对网站执行操作,如 Web 管理员 Cookie 泄露,导致攻击者非法登录管理平台。

劫持会话 执行任意操作,如进行非法转账、发送电子邮件等。 流量劫持 刷流量、强制弹出广告页面等。 恶意操作 任意篡改页面信息、删除文章等。 DDoS 攻击 控制受害者机器向其他网站发起攻击,针对同一目标进行大量的客户端攻击访问。 获取客户端信息 获取用户的浏览历史、真实IP、开放端口等。 病毒传播 传播跨站脚本蠕虫、网页挂马,非法提升用户权限,使攻击者可能得到更高的权限。 结合其他漏洞进行攻击 如 CSRF 漏洞,实施进一步攻击,它具有前端页面的全部权限。

03 如何保护Cookie信息

03.01 HttpOnly

HttpOnly 可以防止 JavaScript 脚本通过 document 对象获取 Cookie 参数,即用户无法通过脚本主动获取这些敏感数据。

常见的做法是设置 Ajax 的 withCredentials 参数为 true,来让 Ajax 在进行请求时,自动携带当前页面的 Cookie 参数。

  • true:在跨域请求时,会携带用户凭证
  • false(默认):在跨域请求时,不会携带用户凭证;返回的 response 里也会忽略 cookie

注意:同域名下,即使没有设置 withCredentials 参数,也会自动携带 Cookie参数。

03.02 Secure

Secure参数是为了保证 Cookie 只有在 HTTPS 下才能上传至服务器,防止 Cookie 被窃取。

SSL数据加密(SSL encryption)是指在客户端与服务器之间建立SSL连接后,通过使用加密算法对传输的数据进行加密处理,以保证数据在传输过程中不被窃听、篡改或伪造。

这里其实还有一个知识点,同类型的SSL证书为什么不同的厂家价格不一样?

品牌和声誉是影响SSL证书价格的一个主要因素。知名证书颁发机构(CA)往往以其在业界的信誉和专业知识而著称。这些CA经历了严格的安全审查,以确保其证书提供的保护是可靠的。因此,这些知名CA的SSL证书通常会比较昂贵,因为它们提供高质量的安全保护,并享有良好的声誉。

03.03 指定使用范围

Cookie 一定要设置超时和 Domain,敏感信息尽量不要保存在 Cookie 中,Cookie中的数据尽量进行加密,设置 Domain 时尽量不要设置 *.aleshu.com 之类的通配域名,以避免其他同根域网站的XSS漏洞引起的跨站 Cookie 窃取。

注意:Cookie 尽可能不要存储敏感信息,如果一定需要存储,例如账户信息,一定要采用更安全的认证方式,例如:token,千万不要直接把用户的真实账号以及密码存在这里。 还是需要再三提醒,不要存储敏感信息,即使是token,也需要该token具备自动过期以及续期的功能,防止有人在获取该参数后,能够随时伪造用户身份。

将用户的 Cookie 信息和客户端的 IP 进行绑定,即使 Cookie 被攻击者拦截,通过判断来源 IP 是否是登陆时用户IP可以在一定程度上防止用户会话被劫持的风险。

因此,在乐述云享中,即使你获取了其他用户的身份信息,只要不在源 IP 下使用,该身份验证信息就是无效的。

想要了解更多PHP开发的安全问题可以关注我哟,或者加入下面的社群也是ok的,

Cookie 安全问题 - 乐述云享 (aleshu.com)

【社群】PHP开发(安全问题) - 乐述云享 (aleshu.com)

相关推荐
李云龙I10 分钟前
解锁高效布局:Tab组件最佳实践指南
前端
程序员大阳12 分钟前
闲谭Scala(1)--简介
开发语言·后端·scala·特点·简介
直裾13 分钟前
scala图书借阅系统完整代码
开发语言·后端·scala
m0_7482370514 分钟前
Monorepo pnpm 模式管理多个 web 项目
大数据·前端·elasticsearch
JinSoooo17 分钟前
pnpm monorepo 联调方案
前端·pnpm·monorepo
m0_7482449625 分钟前
【AI系统】LLVM 前端和优化层
前端·状态模式
明弟有理想26 分钟前
Chrome RCE 漏洞复现
前端·chrome·漏洞·复现
平行线也会相交26 分钟前
云图库平台(二)前端项目初始化
前端·vue.js·云图库平台
shimmer00828 分钟前
抖音小程序登录(前端通过tt.login获取code换取openId)
前端·小程序·状态模式