《Web应用漏洞侦测与防御:揭秘鲜为人知的攻击手段和防御技术》——1.4 Web存储

简介:

本节书摘来自华章计算机《Web应用漏洞侦测与防御:揭秘鲜为人知的攻击手段和防御技术》一书中的第1章,第1.4节,作者:(美) 希马(Shema, M.)著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.4 Web存储

20世纪90年代末,许多网站被定性为大规模数据库的HTML前端。Google早期的主页自豪地宣布已经收集了十亿个页面。今天,Facebook已经存储了大约一亿人的数据。现代的网站能够处理PB级规模的数据集,比十年前增长了几个数量级。过去的口号是“网络即计算机”,现在的趋势是“云计算”和“软件即服务”,这都表明网络为中心的数据存储仍将持续。
这并不意味着Web开发人员想要把所有数据保存在以网络服务器为前端的数据库中。把数据存储转移到浏览器中有很多好处,包括带宽、性能、存储成本。HTTP Cookie一直是浏览器存储的主力,然而,cookie在数量(每个域最多20个)、大小(每个cookie 4KB)和安全性(没有用处的path属性)上有局限,这些限制主要是由浏览器制造商所采纳的,而不是标准规定的。
Web存储的目的是使用跨浏览器的标准API来在浏览器中为Web开发人员提供存储大量数据的机制。Web存储的主要特性类似于HTTP Cookie:数据通过键值对保存,Web存储对象可以分为sessionStorage或者localStorage(类似于会话和持久cookie)。
存储对象中的键和值是JavaScript字符串。sessionStroage对象与浏览上下文绑定。例如,两个不同的浏览器标签页会有独立的sessionStroage对象,对其中一个sessionStorage的修改不会影响另外一个。localStroage对象的内容对所有浏览器标签页都是可访问的,在一个标签页中修改键值对将会影响每个标签页的存储。在上述情况中,访问都受同源策略的限制。
Web存储安全性一个重要的方面是数据可以被用户查看和修改(参见图1.1)。

image

下面的代码演示了通过循环来枚举存储对象的键的常见模式。
image

最后,请记住下面这些安全方面的考虑。就像本章大部分内容一样,重点在于Web应用程序如何使用HTML5技术,而不是浏览器在该技术的实现或设计中产生的漏洞。
有机会便清理数据,即为敏感数据设定适当的生命周期。因为浏览器的关闭并不意味着sessionStorage对象中的数据会被删除。应用程序可能会在一段时间后(当然是在浏览器运行期间)或在beforeunload事件中(或onclose事件,只要确实是由浏览器触发的)删除数据。
记住放置在存储对象中的数据和使用cookie的数据有着相同的暴露风险。它的安全性依赖于浏览器的同源策略、浏览器的补丁程度、插件、底层操作系统。对存储对象数据加密的安全性与对cookie加密的安全性一样。把解密密钥放置到存储对象(或者发送到浏览器)会降低被加密数据的安全性。
把sessionStorage对象的生命周期和“会话”的概念联系在一起是一种弱安全依赖。现代浏览器会在它们关闭之后甚至是系统重启后重新建立会话。因此,两种类型的Web存储对象的生命周期在安全性方面就没有多少区别。
考虑将要存储到Web存储对象中的数据的隐私性和敏感性,不要把存储大量数据的能力理解成存储更敏感数据的能力。
做好被攻破的准备:在Web存储对象所位于的域内执行的HTML注入攻击,将会有能力获取该对象中的数据。当你选择要保存在浏览器中的数据的种类时,要把这个因素考虑进去(第2章会介绍HTML注入攻击)。
HTML5并不会使你的站点更加安全。像< iframe>沙盒和Origin标头等特性都是增进安全性设计的好方法。然而,配置不当的代理可能会将标头去除,陈旧的浏览器可能不支持上述特性,数据验证不充分使得恶意内容能够篡改Web页面,以上这些都会使得上述措施失效。
IndexedDB
IndexedDB API有自己的规范(http://www.w3.org/TR/IndexedDB/),同WebStorage API不同。它的状态还不够固定,而且支持它的浏览器也比较少,但从概念角度而言,它同WebStorage类似,都是为浏览器提供数据存储机制。因此,同WebStorage相关的安全性和隐私性方面的考虑也适用于IndexedDB。
IndexedDB和WebStorage的主要区别是IndexedDB的键值对不局限于JavaScript字符串。键可以是类型为Array、Date、float或String的对象,值可以是HTML5的“按结构复制(structured clone)”算法所支持的任何对象。按结构复制是比JSON更加灵活的序列化方法。例如,它能够处理Blob对象(WebSocket的重要方面)以及递归的、自引用对象。在实际应用中,这意味着IndexedDB可以存储更复杂的数据类型。

相关文章
|
17天前
|
前端开发 JavaScript 关系型数据库
从前端到后端:构建现代化Web应用的技术探索
在当今互联网时代,Web应用的开发已成为了各行各业不可或缺的一部分。从前端到后端,这篇文章将带你深入探索如何构建现代化的Web应用。我们将介绍多种技术,包括前端开发、后端开发以及各种编程语言(如Java、Python、C、PHP、Go)和数据库,帮助你了解如何利用这些技术构建出高效、安全和可扩展的Web应用。
|
1月前
|
监控 Serverless 测试技术
Serverless 应用引擎常见问题之做的web服务计费如何解决
Serverless 应用引擎(Serverless Application Engine, SAE)是一种完全托管的应用平台,它允许开发者无需管理服务器即可构建和部署应用。以下是Serverless 应用引擎使用过程中的一些常见问题及其答案的汇总:
407 3
|
4天前
|
SQL 存储 前端开发
< 今日份知识点:web常见的攻击方式(网络攻击)有哪些?如何预防?如何防御呢 ? >
网络安全威胁日益严重,2017年的永恒之蓝勒索病毒事件揭示了网络攻击的破坏力。为了防御Web攻击,了解攻击类型至关重要。Web攻击包括XSS、CSRF和SQL注入等,其中XSS分为存储型、反射型和DOM型,允许攻击者通过注入恶意代码窃取用户信息。防止XSS攻击的方法包括输入验证、内容转义和避免浏览器执行恶意代码。CSRF攻击则伪装成用户执行操作,防范措施包括同源策略和CSRF Token验证。SQL注入则通过恶意SQL语句获取数据,预防手段包括输入验证和使用预编译语句。面对网络威胁,加强安全意识和实施防御策略是必要的。
|
1天前
|
前端开发 JavaScript UED
Web前端开发:探索技术与艺术的交融
Web前端开发:探索技术与艺术的交融
8 1
|
1天前
|
存储 中间件 Go
探索Gin框架:快速构建高性能的Golang Web应用
探索Gin框架:快速构建高性能的Golang Web应用
|
1天前
|
前端开发 JavaScript Java
前端与后端:构建现代Web应用的双翼
前端与后端:构建现代Web应用的双翼
|
1天前
|
安全 前端开发 JavaScript
在Python Web开发过程中:Web框架相关,如何在Web应用中防止CSRF攻击?
在Python Web开发中防范CSRF攻击的关键措施包括:验证HTTP Referer字段、使用CSRF token、自定义HTTP头验证、利用Web框架的防护机制(如Django的`{% csrf_token %}`)、Ajax请求时添加token、设置安全会话cookie及教育用户提高安全意识。定期进行安全审计和测试以应对新威胁。组合运用这些方法能有效提升应用安全性。
5 0
|
2天前
|
设计模式 存储 前端开发
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
|
10天前
|
缓存 负载均衡 数据库
优化后端性能:提升Web应用响应速度的关键策略
在当今数字化时代,Web应用的性能对于用户体验至关重要。本文探讨了如何通过优化后端架构和技术手段,提升Web应用的响应速度。从数据库优化、缓存机制到异步处理等多个方面进行了深入分析,并提出了一系列实用的优化策略,以帮助开发者更好地应对日益增长的用户访问量和复杂的业务需求。
15 1
|
10天前
|
缓存 监控 数据库
Flask性能优化:打造高性能Web应用
【4月更文挑战第16天】本文介绍了提升Flask应用性能的七大策略:优化代码逻辑,减少数据库查询,使用WSGI服务器(如Gunicorn、uWSGI),启用缓存(如Flask-Caching),优化数据库操作,采用异步处理与并发(如Celery、Sanic),以及持续监控与调优。通过这些手段,开发者能有效优化Flask应用,适应大型或高并发场景,打造高性能的Web服务。