《第三方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应用中最常见的安全漏洞:跨站脚本。

相关文章
|
28天前
|
JavaScript 前端开发 安全
深入理解TypeScript:增强JavaScript的类型安全性
【10月更文挑战第8天】深入理解TypeScript:增强JavaScript的类型安全性
44 0
|
2月前
|
存储 JavaScript 前端开发
JavaScript编程实现tab选项卡切换的效果+1
JavaScript编程实现tab选项卡切换的效果+1
|
3月前
|
JavaScript 前端开发 编译器
解锁JavaScript模块化编程新纪元:从CommonJS的基石到ES Modules的飞跃,探索代码组织的艺术与科学
【8月更文挑战第27天】随着Web应用复杂度的提升,JavaScript模块化编程变得至关重要,它能有效降低代码耦合度并提高项目可维护性及扩展性。从CommonJS到ES Modules,模块化标准经历了显著的发展。CommonJS最初专为服务器端设计,通过`require()`同步加载模块。而ES Modules作为官方标准,支持异步加载,更适合浏览器环境,并且能够进行静态分析以优化性能。这两种标准各有特色,但ES Modules凭借其更广泛的跨平台兼容性和现代语法逐渐成为主流。这一演进不仅标志着JavaScript模块化的成熟,也反映了整个JavaScript生态系统的不断完善。
50 3
|
11天前
|
自然语言处理 JavaScript 前端开发
JavaScript闭包:解锁编程潜能,释放你的创造力
【10月更文挑战第25天】本文深入探讨了JavaScript中的闭包,包括其基本概念、创建方法和实践应用。闭包允许函数访问其定义时的作用域链,常用于数据封装、函数柯里化和模块化编程。文章还提供了闭包的最佳实践,帮助读者更好地理解和使用这一强大特性。
11 2
|
2月前
|
存储 缓存 数据处理
php学习笔记-php会话控制,cookie,session的使用,cookie自动登录和session 图书上传信息添加和修改例子-day07
本文介绍了PHP会话控制及Web常用的预定义变量,包括`$_REQUEST`、`$_SERVER`、`$_COOKIE`和`$_SESSION`的用法和示例。涵盖了cookie的创建、使用、删除以及session的工作原理和使用,并通过图书上传的例子演示了session在实际应用中的使用。
php学习笔记-php会话控制,cookie,session的使用,cookie自动登录和session 图书上传信息添加和修改例子-day07
|
1月前
|
存储 JavaScript 前端开发
JavaScript Cookie
JavaScript Cookie
15 0
|
2月前
|
存储 前端开发 Java
JavaWeb基础7——会话技术Cookie&Session
会话技术、Cookie的发送和获取、存活时间、Session钝化与活化、销毁、用户登录注册“记住我”和“验证码”案例
JavaWeb基础7——会话技术Cookie&Session
|
2月前
|
JavaScript 前端开发
JavaScript编程实现tab选项卡切换的效果
JavaScript编程实现tab选项卡切换的效果
|
2月前
|
JavaScript 前端开发
用JavaScript编程控制网页上checkbox选择状态:全选、全部取消、反选
用JavaScript编程控制网页上checkbox选择状态:全选、全部取消、反选
|
2月前
|
JavaScript 前端开发 安全
JavaScript编程实现字符和字符串翻转
JavaScript编程实现字符和字符串翻转