《第三方JavaScript编程》——第7章 安全性 7.1Cookie,会话和会话窃取

简介: 当服务器接收到包含该cookie的请求时,会在本地查找同传递的会话令牌相匹配的用户记录。如果查找到对应的用户,服务器便会将该用户作为请求方,并返回相应的内容,直至cookie过期或者被删除(用户自己删除或者通过服务端设置的Set-Cookie头删除)。

本节书摘来自异步社区《第三方JavaScript编程》一书中的第7章,第7.1节,作者:[美] Ben Vinegar Anton Kovalyov著,更多章节内容可以访问云栖社区“异步社区”公众号查看

第7章 安全性

本章包括

  • 跨站脚本攻击(XSS)
  • 跨站请求伪造(XSRF)
  • 发布者模拟,点击劫持和拒绝服务

在前面章节中,你已经学到了如何创建一个实用且可配置的第三方应用程序,以及如何同服务端通信,如何验证用户是否能够使用受限或部分受限的功能,本章介绍第三方JavaScript应用所涉及的另外一个重要话题:应用的安全性。

最初,网络非常简单,只是一个相互关联的网站系统。这些网站通常都是普通的文档,并且多数是静态页面。Web服务器的工作就是从文件系统中检索文件,并将其发送到浏览器。在该过程中,工作在客户端的浏览器接收到文档后为用户显示。很少有网站对它们的用户进行身份验证,因为最初设计的网络是一个开放的系统,用于超文本文件的共享。这个阶段的安全威胁通常与服务端的漏洞有关,这也是攻击者的首要目标。

而如今的网络截然不同。不仅有复杂的应用,从我们喜欢的新闻阅读到我们个人的健康记录,这些应用几乎涵盖了一切,还有内嵌在其他Web容器内的应用,或者说是第三方JavaScript应用(本书的主题)。因为现代Web应用有对敏感数据的处理,因此网络不再是文档共享时那样的开放系统,这一变化同样改变了安全领域。针对浏览器有了新的安全威胁,比如恶意攻击者可以盗取用户的个人信息,进行金融诈骗,也可以执行未经授权的操作,从而威胁到你的应用。

当提到第三方应用的安全性时,每个人的风险都很大。用户信任你使用他们的数据,发布者允许你访问他们的Web页面并且希望你能合理的使用,同时你获得的这些信任都存在有很大风险。无论你的第三方应用有多好,只要它可能威胁到财产安全,就没有网站会安装它们,因此信任起着至关重要的作用。

在本章中,我们会介绍第三方JavaScript应用最为关注的安全漏洞,并介绍如何防止这些漏洞。首先我们会对会话和cookie进行快速回顾,因为你很快会了解到,这些是许多Web攻击的首要目标。接着我们会深入了解两个主要的安全漏洞:跨站脚本攻击(Cross-site Scripting,XSS)和跨站请求伪造(Cross-site Request Forgery,XSRF)。最后,我们将介绍如何解决这两个安全问题。

7.1 Cookie,会话和会话窃取

在深入了解这些事情之前,让我们快速回顾一下cookie在Web应用中的作用。也许你还记得,cookie是浏览器在HTTP请求中发送的一个数据片段。这是在原本无状态的协议(HTTP)中保存状态的一种简单方式。

Web服务器通过在HTTP响应中返回Set-Cookie头来设置cookie。cookie的内容可以是任意不含空格的字符串,但它通常是一组键值对。下述HTTP响应示例中,演示了如何设置一个名为sessionid的cookie。
screenshot
在Web应用中cookies的一个典型应用场景就是保持用户会话。在这种情况下,用户登录后,服务端会生成一个令牌,唯一标识当前用户同服务端的会话,并将其作为cookie存储在浏览器中。后续用户向服务器发起任何请求时,浏览器都会将存储sessionid的cookie值作为HTTP的Cookie请求头,自动发送到服务端。
screenshot
当服务器接收到包含该cookie的请求时,会在本地查找同传递的会话令牌相匹配的用户记录。如果查找到对应的用户,服务器便会将该用户作为请求方,并返回相应的内容,直至cookie过期或者被删除(用户自己删除或者通过服务端设置的Set-Cookie头删除)。

浏览器会话的主要问题在于,它们只是通过cookie中的一个会话令牌值来表示对应的会话。一旦攻击者获取到会话令牌的值,便可以很容易的以该用户的身份通过当前Web服务的验证。然后,攻击者便可以用该用户的身份执行任意操作,比如访问或者获取他们的私人数据。显然,这种场景是灾难性的,但是如果不是物理窃取了用户的计算机,攻击者如何才能获取到用户的cookie呢?

在第6章中,介绍了cookie被攻击者窃取或者劫持的一种情况:使用中间人攻击(MITM)。这种攻击利用了普通HTTP请求通过纯文本传输数据的特性,因此很容易通过包嗅探获取cookie。这就意味着在未加密的网络(比如附近的咖啡馆的免费Wi-Fi网络)中,恶意的攻击者可以通过扫描网络流量找到包含会话cookie的HTTP请求并复制它们。

在第6章中,也介绍了防御MITM攻击最好的方式就是使用安全的HTTP(HTTPS)对所有服务端和浏览器之间的HTTP请求进行加密。因为HTTP请求加密后,就不再受包嗅探的威胁,从而防止了中间人攻击[1]。

尽管HTTPS令人振奋,而且能够有效防御MITM攻击,但并不是解决所有Web应用安全威胁的万能钥匙。MITM只是攻击者获取用户cookie的一种方式。不幸的是,在达到安全验收标准之前,你的Web应用还有其他漏洞需要处理。但不用先急着解决,我们会深入了解这些漏洞,并提出相应的解决方案和防御技术。

在开始之前,我们先来深入了解JavaScript应用中最常见的安全漏洞:跨站脚本。

相关文章
|
5月前
|
JSON JavaScript Java
【GoGin】(4)会话控制与参数验证:Cookie使用、Sessions使用、结构体验证参数、自定义验证参数
1. Cookie介绍 HTTP是无状态协议,服务器不能记录浏览器的访问状态,也就是说服务器不能区分两次请求是否由同一个客户端发出 Cookie就是解决HTTP协议无状态的方案之一,中文是小甜饼的意思 Cookie实际上就是服务器保存在浏览器上的一段信息。浏览器有了Cookie之后,每次向服务器发送请求时都会同时将该信息发送给服务器,服务器收到请求后,就可以根据该信息处理请求 Cookie由服务器创建,并发送给浏览器,最终由浏览器保存
270 5
|
11月前
|
JavaScript 前端开发 Java
JavaScript:编程宇宙的多面闪耀之星-揭秘 JavaScript,编程界的全能霸主如何炼成?-优雅草卓伊凡
JavaScript:编程宇宙的多面闪耀之星-揭秘 JavaScript,编程界的全能霸主如何炼成?-优雅草卓伊凡
376 24
JavaScript:编程宇宙的多面闪耀之星-揭秘 JavaScript,编程界的全能霸主如何炼成?-优雅草卓伊凡
|
8月前
|
存储 安全
Cookie会话跟踪的原理?
会话跟踪常用方案包括Cookie、Session和令牌技术。Cookie是客户端跟踪方式,存储在浏览器中。首次访问服务器时,服务器通过Set-Cookie响应头发送Cookie,浏览器将其保存。后续请求中,浏览器自动在请求头Cookie中携带该值,实现会话识别。但因Cookie存于客户端,用户可修改或禁用,安全性较低。
306 0
|
JavaScript 前端开发 编译器
解锁JavaScript模块化编程新纪元:从CommonJS的基石到ES Modules的飞跃,探索代码组织的艺术与科学
【8月更文挑战第27天】随着Web应用复杂度的提升,JavaScript模块化编程变得至关重要,它能有效降低代码耦合度并提高项目可维护性及扩展性。从CommonJS到ES Modules,模块化标准经历了显著的发展。CommonJS最初专为服务器端设计,通过`require()`同步加载模块。而ES Modules作为官方标准,支持异步加载,更适合浏览器环境,并且能够进行静态分析以优化性能。这两种标准各有特色,但ES Modules凭借其更广泛的跨平台兼容性和现代语法逐渐成为主流。这一演进不仅标志着JavaScript模块化的成熟,也反映了整个JavaScript生态系统的不断完善。
199 3
|
JavaScript 前端开发 安全
深入理解TypeScript:增强JavaScript的类型安全性
【10月更文挑战第8天】深入理解TypeScript:增强JavaScript的类型安全性
419 0
|
存储 JavaScript 前端开发
JavaScript编程实现tab选项卡切换的效果+1
JavaScript编程实现tab选项卡切换的效果+1
|
12月前
|
JavaScript Ubuntu Linux
如何在阿里云的linux上搭建Node.js编程环境?
本指南介绍如何在阿里云Linux服务器(Ubuntu/CentOS)上搭建Node.js环境,包含两种安装方式:包管理器快速安装和NVM多版本管理。同时覆盖全局npm工具配置、应用部署示例(如Express服务)、PM2持久化运行、阿里云安全组设置及外部访问验证等步骤,助你完成开发与生产环境的搭建。
|
JavaScript 前端开发 IDE
【编程向导】Js与Ts差异详解:选择与权衡
JavaScript 一直是 Web 开发的基石,以其灵活性和动态性著称,但其松散类型可能导致大型项目中出现难以调试的错误。TypeScript 作为 JavaScript 的超集,通过引入静态类型系统,提供了更高的类型安全性和更好的工具支持,尤其适合大型团队和复杂项目。本文详细对比了 JavaScript 和 TypeScript 的优缺点,并提供了实际代码示例,帮助开发者根据项目需求选择合适的工具。
1728 2
|
存储 安全
Cookie会话跟踪的原理
会话跟踪技术包括Cookie和Session。Cookie是客户端技术,首次访问时服务器通过Set-Cookie响应头发送Cookie,浏览器保存并在后续请求中通过Cookie请求头回传,实现会话跟踪。但Cookie易被用户修改或禁用,安全性较低。Session则是服务器端技术,每次会话生成唯一的Session ID,通过Cookie传递给客户端,客户端在后续请求中携带此ID,服务器据此识别会话。Session更安全,但在集群环境中需解决会话共享问题。
487 1
|
前端开发 JavaScript 持续交付
提高JavaScript编程效率
提高JavaScript编程效率
187 3