所有文章 > API安全 > 保护JavaScript客户端到API服务的通信
保护JavaScript客户端到API服务的通信

保护JavaScript客户端到API服务的通信

每当用户从互联网请求某些内容时,都会使用客户端到服务器的通信。互联网的主要功能是为计算机与另一台计算机通信提供基础设施。这种交换允许每台计算机共享和交换数据。 

其中一台计算机拥有并提供资源,这台计算机被称为服务器端。请求访问这些资源的另一台计算机被称为客户端。即使计算机拥有一些资源,如果它发送请求,它仍然可以被称为客户端。总之,这种双方之间的网络通信方法通俗地称为客户端-服务器架构。 

在客户端,进程由一种名为 JavaScript 的计算机编程语言来促进。保护 JavaScript 是阻止不良行为者拦截敏感信息和促进积极的用户体验不可或缺的部分。确保您的网络与客户端用户网络之间的安全通信应该是您的网络安全优先事项之一。在本指南中,我们将探讨为什么保护 JavaScript 客户端到服务器通信如此重要以及如何做到这一点。 

客户端到服务器通信的示例

为了更好地理解客户端-服务器架构,让我们回顾一些示例。客户端由用于与互联网交互的请求方法定义。您用于访问本文的 Web 浏览器是客户端。您手机上的 Web 浏览器是不同的客户端。手机、计算机或游戏机上的应用程序也是客户端。客户端始终是请求访问的用户的本地客户端,指的是最终用户的计算机、手机或其他个人硬件。 

服务器由用于处理请求和向客户端“提供”信息的访问方法定义。服务器端进程的示例包括保存和访问数据、重定向到其他网页或用户验证。服务器端进程发生在远程位置,Web 应用程序服务器在此处理来自客户端的 Web 请求。这些服务器是存储和传播数据的集中中心。 

想象一下你每次去 ATM 取款的情况。当客户插入银行卡时,ATM(客户端)如何解释与银行卡相关的数字数据?插入银行卡后,信息请求会发送到银行的中央软件(服务器),从而使 ATM 能够向客户显示正确的数据。 

HTTP/HTTPS 请求 

互联网上数据交换的基础是客户端-服务器协议,称为超文本传输​​协议 (HTTP)。这种类型的协议意味着客户端和 Web 服务器使用请求-响应方法相互通信。它们通过交换单独的消息进行通信。客户端发送的消息称为请求,服务器发送的消息称为响应。 

超文本传输​​协议安全 (HTTPS) 是 HTTP 的安全版本。它们之间的主要区别在于 HTTPS 使用加密来保护客户端和服务器之间的通信。HTTPS 使用传输层安全性 (TLS) 协议或安全套接字层 (SSL) 进行加密。

客户端请求 

让我们从 HTTP/HTTPS 的启动组件开始。Web 浏览器、移动浏览器或用户应用程序始终是发起请求的实体。要生成网页,客户端浏览器或 API 会发送请求,请求代表网页的 HTML 文件。接下来,会分析此文件,并对任何相邻的脚本、可视子资源(JPG 和 MP4 文件)和布局数据 (CSS) 发出其他请求。Web 浏览器或 API 会将这些请求中的资源组合起来,并向最终用户呈现完整的网页。 

网页是一种超文本文档,也就是说,网页的某些部分是交互式的,必须由最终用户的操作触发,例如使用光标/手指点击或输入信息以生成新网页。浏览器或 API 将这些操作转换为 HTTP 请求并解释 HTTP 响应,以便为最终用户提供可访问性。 

服务器端响应

通信链的另一端是服务器,它为客户端请求的资源提供服务。服务器可能看起来是一台机器,但它可能是一组共享负载的机器,或是一个多面软件,可以完全或部分分析其他计算机以按需生成请求的资源。

代理

在客户端浏览器或 API 与服务器之间,许多计算机和机器会中继 HTTP 消息。由于 Web 开发软件的分层设计,其中大多数都在物理、传输或网络级别运行,在 HTTP 层变得透明,这会严重影响性能。代理是在应用程序层运行的消息。代理可以执行许多功能,例如:

  • 过滤——确定哪些请求可以通过家长控制或防病毒扫描,哪些不能通过
  • 身份验证——控制数据访问 
  • 缓存——存储数据以供日后使用
  • 负载平衡——允许不同的服务器处理不同的请求

客户端 JavaScript

客户端 JavaScript 或 CSJS 是最常见的计算机语言类型。它允许在网页上实现复杂的功能。为了让浏览器解释代码以显示图形、视频、链接导航、按钮点击或其他复杂功能,需要引用或将脚本包含在 HTML 文档中。只有当用户提交包含完整、有效条目的表单时,请求才会提交给 Web 服务器。 

CSJS 的优势 

与其他计算语言相比,CSJS 方法具有许多优势。例如,您可以使用 JavaScript 来确认用户在表单字段中输入的信息是否有效。使用 CSJS 的其他好处包括: 

  • 即时反馈——用户无需等待页面重新加载即可知道是否忘记在表单字段中输入信息。
  • 动态界面– 网页不必保持静态。例如,可以实施滑块来展示旋转的产品轮播。
  • 减轻服务器负载– CSJS 可以在向服务器发送请求之前验证用户输入。这样可以减少服务器流量。
  • 增强互动性——CSJS 允许创建界面,当用户将光标放在界面上或向下滚动网页时,界面会做出反应。

CSJS 安全 

JavaScript 是互联网的核心技术之一。由于其重要性,不法分子试图渗透和扭曲其属性,以对客户端用户造成伤害。自 1995 年发布以来,JavaScript 一直存在一些问题,引起了更广泛的网络安全社区的关注。最突出的是,JavaScript 与文档对象模型 (DOM) 交互的方式允许不法分子通过网络发送恶意脚本来渗透客户端设备,从而给客户端的最终用户带来风险。 

有两种策略可以消除这种 JavaScript 安全风险:

  • 沙盒——单独运行脚本,限制对资源和任务的访问
  • 应用同源策略——阻止一个网站的脚本访问其他网站上的脚本数据

CSJS 风险 

跨站点脚本 (XSS) 是最常见的 JavaScript 安全风险之一。通过这种方法,黑客试图利用网站将恶意脚本返回给客户端用户。黑客确定这些脚本可以做什么,包括传播恶意软件、远程控制最终用户的浏览器、窃取敏感数据和篡改帐户。如果浏览器或应用程序的作者忽视实施同源策略,那么他们就创建了一个可以存在 XSS 篡改的环境。 

跨站点请求伪造 (CSRF) 是 CSJS 的另一个常见风险。CSRF 漏洞允许恶意行为者欺骗客户端的浏览器,使其在其他站点上进行无意的行为。如果目标站点仅使用 cookie 来验证请求,那么黑客就可以发送带有最终用户 cookie 的请求。XSS 和 CSRF 风险存在于应用程序层,需要作者使用正确的开发程序。

许多常见的 JavaScript 安全问题可能会增加最终用户的风险,例如浏览器和插件代码中的漏洞、沙盒或同源策略的执行不当以及客户端-服务器信任关系错误。作者规避这些安全风险的唯一方法是从一开始就开发没有 JavaScript 安全漏洞的应用程序和浏览器。 

跨源资源共享 

如上所述,实施同源策略是控制脚本从一个网页到另一个网页的权限的关键机制。这种保护 JavaScript 的方法有助于实现安全的客户端到服务器通信,但限制相当多。如果客户端脚本需要访问另一个域上的资源而没有必要的访问权限,会发生什么? 

跨域资源共享 (CORS) 是解决方案。CORS 是一种安全策略,它为服务器使用额外的 HTTP 标头,以允许一个来源的浏览器访问来自不同来源的资源。CORS 对于防止欺骗尝试至关重要。Web 应用程序通常具有由 HTML、JavaScript、CSS 和后端 API 组成的前端静态代码。 

恶意行为者可以复制该静态代码并将其托管在不同域(虚假网站)下,同时使用相同的后端 API。接下来,他们可以使用恶意脚本,将其发送到该域并利用请求,该请求将为他们提供页面内容和会话 cookie,这可以让他们窃取登录信息和其他敏感信息。CORS 的实施可以防止这种情况发生。 

域验证 

另一种保护客户端到服务器通信中 JavaScript 的策略是使用一种称为域验证的方法。域控制验证 (DCV) 是证书颁发机构使用的一种策略,用于在提供 SSL 证书之前验证发出请求的人是否有权访问与该请求相关的域。域验证可防止不良行为者发送来自虚假网站的请求和网络钓鱼尝试。 

客户端数据存储的最佳实践

保护敏感数据的策略有很多,我们在之前关于保护API 密钥身份验证的文章中已经介绍了其中许多策略。但是,客户端存储允许用户在用户许可的情况下在客户端上记录不同类型的数据,并在以后检索它们。这允许用户保存网页或文档以供离线使用,维护网站的自定义设置,并长期保存数据。 

本地存储

LocalStorage 允许用户永久存储整个网站的数据。服务工作者或 Web 工作者无法访问它。LocalStorage 只能包含字符串,并且限制为 5MB。它可能适用于存储少量特定存储数据。 

会话存储

SessionStorage 用于临时存储信息,并在网页会话结束时清除。与 LocalStorage 一样,它无法供服务工作者或 Web 工作者访问,因为它是特定于选项卡的,限制为 5MB,并且只能包含字符串。 

索引数据库 

IndexedDB 是一种基于事件的 API,用于客户端存储大量数据。此 API 使用关键字或列表对数据进行排序。在许多方面,IndexedDB 是 LocalStorage 的增强版本。无论网络连接如何,作者都可以创建具有许多请求容量的应用程序。此方法允许在有或没有连接的情况下访问应用程序。  

cookie

每个新的 HTTP 请求都带有 cookie,因此在其中存储数据会使 Web 请求的大小膨胀。它们是同步的,无法从 Web Worker 访问。与 LocalStorage 和 SessionStorage 一样,cookie 仅包含字符串。 

允许 Auth API 保护你的网络 

Auth API 消除了构建具有生命周期管理和不良行为者检测功能的强大密钥存储的风险。我们的平台已通过第三方行业领先安全公司的审核,通过利用客户端数据存储、API 密钥安全和身份验证协议的最佳实践来确保客户端到服务器通信的安全。

文章来源:Securing JavaScript Client-to-Server Communications

#你可能也喜欢这些API文章!