网络安全
网站包含多种不同类型的信息。其中一些是非敏感的,例如公用页面上显示的副本。一些是敏感的,例如客户用户名、密码和银行信息,或内部算法和私有产品信息。
敏感信息需要保护,这就是网络安全关注的重点。如果这些信息落入坏人之手,可能会被用来
- 通过与竞争对手分享信息,使公司处于竞争劣势。
- 禁用或劫持其服务,再次导致其运营出现严重问题。
- 将客户的隐私置于危险之中,使他们容易受到个人资料分析、目标定位、数据丢失、身份盗窃甚至经济损失的影响。
现代浏览器已经拥有多种功能来保护用户在网络上的安全,但开发人员也需要使用最佳实践并谨慎编写代码,以确保其网站安全。即使代码中的简单错误也可能导致漏洞,恶意行为者可以利用这些漏洞窃取数据并获得对服务的未经授权的控制。
本文介绍了网络安全,包括帮助您理解网站漏洞的概念信息以及有关如何保护网站安全的实用指南。
安全和隐私之间的关系
安全和隐私是截然不同的但密切相关的主题。了解两者之间的差异以及它们之间的关系是很有必要的。
- **安全**是指保护私人数据和系统免受未经授权的访问的行为。这包括公司(内部)数据和用户以及合作伙伴(外部)数据。
- **隐私**是指赋予用户控制权,让他们控制如何收集、存储和使用其数据,同时确保数据不会被不负责任地使用。例如,您应该让用户了解您从他们那里收集了哪些数据、将与哪些方共享这些数据以及如何使用这些数据。用户必须有机会同意您的隐私政策,访问您存储的其数据,以及选择删除其数据。
良好的安全对于良好的隐私至关重要。您可以遵循我们在网络隐私指南中列出的所有建议,但如果您网站不安全,攻击者可以随时窃取数据,那么以诚信行事并制定健全的隐私政策将是徒劳的。
浏览器提供的安全功能
Web 浏览器遵循严格的安全模型,为内容、浏览器和服务器之间的连接以及数据传输实施强大的安全机制。本节将介绍支持此模型的功能。
同源策略和 CORS
同源策略是网络的基本安全机制,它限制了从一个来源加载的文档或脚本如何与来自另一个来源的资源进行交互。它有助于隔离潜在的恶意文档,减少可能的攻击媒介。
通常情况下,来自一个来源的文档不能向其他来源发出请求。这是有道理的,因为您不希望网站能够相互干扰并访问未经授权的数据。
但是,您可能希望在某些情况下放宽此限制;例如,如果您有多个相互交互的网站,您可以允许它们使用fetch()
相互请求资源。这可以使用跨域资源共享 (CORS)来允许,CORS 是一种基于 HTTP 标头的机制,允许服务器指示浏览器应允许加载资源的任何来源(域、方案或端口),除了它自己的来源之外。
用于通信的 HTTP 模型
Web 浏览器和服务器使用HTTP协议相互通信,请求资源,提供响应(例如,提供请求的资源或详细说明请求失败的原因),以及为该通信提供安全功能。
传输层安全 (TLS) 通过在网络传输过程中对数据进行加密来提供安全性和隐私,并且是HTTPS协议背后的技术。TLS 有利于隐私,因为它可以阻止第三方拦截传输的数据并恶意使用它。
所有浏览器都正在默认要求使用 HTTPS;这实际上已经成为现实,因为您无法在没有此协议的情况下在网络上执行太多操作。
相关主题
- 传输层安全 (TLS)
-
TLS 协议是使两个联网应用程序或设备能够私密而稳健地交换信息的标准。使用 TLS 的应用程序可以选择其安全参数,这些参数可能会对数据的安全性和可靠性产生重大影响。
- HTTP 严格传输安全
-
Strict-Transport-Security
HTTP 标头允许网站指定它只能通过 HTTPS 访问。 - 证书透明度
-
证书透明度 (CT) 是一个开放框架,旨在防止和监控证书签发错误。新签发的证书被“记录”到公开运行的、通常是独立的 CT 日志中。这些日志提供了已签发 TLS 证书的追加式、密码学保障的记录。
- 混合内容
-
包含使用明文 HTTP 获取的内容的 HTTPS 页面称为混合内容页面。这类页面只被部分加密,导致未加密的内容可供嗅探器和中间人攻击者访问。
- 弱签名算法
安全上下文和功能权限
浏览器以不同的方式控制“强大功能”的使用。这些“强大功能”包括在网站上生成系统通知、使用用户的网络摄像头获取媒体流、操作系统 GPU 以及使用网络支付。如果某个网站能够在没有限制的情况下使用控制这些功能的 API,恶意开发人员可能会尝试执行以下操作
- 用不必要的通知和其他 UI 功能打扰用户。
- 在没有警告的情况下打开他们的网络摄像头,以便监视他们。
- 阻塞他们的浏览器/系统,以制造拒绝服务 (DoS) 攻击。
- 窃取数据或金钱。
这些“强大功能”以以下方式进行控制
- 仅在安全上下文中允许使用这些功能。安全上下文是指
window
或worker
,对于这些上下文,可以合理地确信内容已通过安全方式(通过 HTTPS/TLS)传递。在安全上下文中,与不安全的上下文的通信可能性是有限的。安全上下文还有助于防止中间人攻击者访问强大功能。若要查看仅在安全上下文中可用的 Web 平台功能列表,请参阅受限于安全上下文的的功能. - 这些功能的使用受用户权限系统的控制:用户必须明确选择加入提供对这些功能的访问,这意味着它们不能自动使用。用户权限请求会自动发生,您可以使用权限 API查询 API 权限的状态。
- 某些其他浏览器功能只能在响应用户操作(例如单击按钮)时使用,这意味着它们需要在适当的事件处理程序内调用。这称为瞬态激活。有关更多信息,请参阅用户激活的功能.
高级安全注意事项
负责任地存储客户端数据
负责任地处理数据主要与减少第三方 Cookie的使用以及谨慎对待您存储和与第三方共享的数据有关。传统上,Web 开发人员使用 Cookie 来存储各种数据,并且攻击者很容易利用这种趋势。因此,浏览器已开始限制您可以对跨站点 Cookie 执行的操作,目标是将来完全取消对跨站点 Cookie 的访问权限。
您应该通过限制您依赖的跟踪活动的数量和/或通过以其他方式实现所需信息的持久性来为跨站点 Cookie 的删除做好准备。有关更多信息,请参阅从第三方 Cookie 过渡和替换第三方 Cookie。
保护用户身份并管理登录
在实施涉及数据收集的安全解决方案时,尤其是在数据敏感(例如登录凭据)的情况下,使用信誉良好的解决方案是明智之举。例如,任何值得信赖的服务器端框架都将具有内置功能来防止常见的漏洞。您还可以考虑使用专门的产品来满足您的目的,例如身份提供商解决方案或安全在线调查提供商。
如果您想自己构建解决方案来收集用户数据,请确保您了解所有方面和要求。聘请经验丰富的服务器端开发人员和/或安全工程师来实施系统,并确保对其进行彻底测试。使用多因素身份验证 (MFA) 提供更好的保护。考虑使用专用的 API,例如Web 身份验证或联合凭据管理,以简化应用程序的客户端。
以下是一些提供安全登录的其他提示
- 在收集用户登录信息时,强制执行强密码,这样您的用户帐户详细信息就无法轻易被猜测。弱密码是安全漏洞的主要原因之一。此外,鼓励您的用户使用密码管理器,以便他们可以使用更复杂的密码,无需担心记住它们,并且不会因为写下密码而造成安全风险。另请参阅我们关于不安全密码的文章。
- 您还应该教育您的用户了解网络钓鱼。网络钓鱼是指向用户发送包含指向看起来像他们每天使用的网站但实际上不是的网站链接的消息(例如电子邮件或短信)。该链接附带一条消息,旨在诱骗用户在该网站上输入他们的用户名和密码,以便攻击者可以窃取这些信息,然后将其用于恶意目的。
注意:一些网络钓鱼网站可能非常复杂,难以与真实网站区分开来。因此,您应该教育您的用户不要相信电子邮件和短信中的随机链接。如果他们收到类似于“紧急情况,您需要立即登录以解决问题”的消息,他们应该直接在新标签页中访问该网站,并尝试直接登录,而不是单击消息中的链接。或者他们可以打电话或发邮件与您联系,讨论他们收到的消息。
- 使用速率限制、在一定数量的尝试失败后锁定帐户以及CAPTCHA 挑战来防止对登录页面的暴力攻击。
- 使用唯一的会话 ID管理用户登录会话,并在用户长时间不活动后自动注销用户。
不要在 URL 查询字符串中包含敏感数据
作为一般规则,您不应该在 URL 查询字符串中包含敏感数据,因为如果第三方拦截了 URL(例如,通过Referer
HTTP 标头),他们可能会窃取该信息。更严重的是,这些 URL 可以被公开的网络爬虫、HTTP 代理和存档工具(例如互联网档案)索引,这意味着您的敏感数据可能会持久存储在公开可访问的资源中。
使用POST
请求而不是GET
请求来避免这些问题。我们的文章 Referer 标头策略:隐私和安全问题 更详细地描述了与Referer
标头相关的隐私和安全风险,并提供了减轻这些风险的建议。
强制执行使用策略
考虑使用 Web 平台功能,例如 内容安全策略 (CSP) 和 权限策略,以对您的网站强制执行一组功能和资源使用规则,从而更难引入漏洞。
例如,CSP 允许您通过仅允许从特定可信来源加载图像或脚本来添加一层安全性。这有助于检测和缓解某些类型的攻击,包括跨站点脚本 (XSS) 和数据注入攻击。这些攻击涉及各种恶意活动,包括数据盗窃、网站篡改和恶意软件传播。
权限策略的工作方式类似,只是它更关注允许或阻止访问特定的“强大功能”(如前所述)。
注意:此类策略对于帮助保持网站安全非常有用,尤其是在您的网站上使用大量第三方代码时。但是,请记住,如果您阻止使用第三方脚本依赖的某个功能,最终可能会破坏您网站的功能。
维护数据完整性
承接上一节,当您允许在网站上使用功能和资源时,您应该尝试确保资源没有被篡改。
相关主题
- 子资源完整性
-
子资源完整性 (SRI) 是一种安全功能,它使浏览器能够验证它们获取的资源(例如,从 CDN)是否在未经意外操作的情况下交付。它通过允许您提供一个加密哈希来工作,该哈希必须与获取的资源匹配。
- HTTP Access-Control-Allow-Origin
-
Access-Control-Allow-Origin
响应标头指示响应是否可以与来自给定 来源 的请求代码共享。 - HTTP X-Content-Type-Options
-
X-Content-Type-Options
响应标头是服务器使用的标记,用于指示 MIME 类型 在Content-Type
标头中广告的 MIME 类型不应更改,并且必须遵循。此标头是一种选择退出 MIME 类型嗅探 的方法,或者换句话说,指定 MIME 类型是故意配置的。
清理表单输入
一般来说,不要信任用户输入表单的任何内容。在线填写表单既复杂又乏味,用户很容易输入不正确的数据或格式错误的数据。此外,恶意人士擅长将特定字符串的可执行代码输入表单字段(例如,SQL 或 JavaScript)。如果您在处理此类输入时不小心,它们可能会在您的网站上执行有害代码或删除您的数据库。请参阅 SQL 注入,了解这将如何发生的示例。
为了防止这种情况,您应该彻底清理输入您表单的数据。
- 您应该实现客户端验证,以便在用户以错误格式输入数据时通知用户。您可以使用内置的 HTML 表单验证功能来实现这一点,或者您可以编写自己的验证代码。请参阅 客户端表单验证 以获取更多信息。
- 在应用程序 UI 中显示用户输入时,您应该使用输出编码来安全地显示用户输入的数据,并避免将其作为代码执行。请参阅 输出编码 以获取更多信息。
您不能仅依靠客户端验证来保证安全性——它应该与服务器端验证结合使用。客户端验证通过提供即时验证反馈来增强用户体验,而无需等待往返服务器。但是,恶意方很容易绕过客户端验证(例如,通过关闭浏览器中的 JavaScript 来绕过基于 JavaScript 的验证)。
任何信誉良好的服务器端框架都将提供验证表单提交的功能。此外,常见的最佳实践是转义任何构成可执行语法一部分的特殊字符,从而使任何输入的代码不再可执行并被视为纯文本。
防止点击劫持
在 点击劫持 攻击中,用户会被欺骗点击一个 UI 元素,该元素执行与用户期望的操作不同的操作,通常会导致用户的机密信息被传递给恶意第三方。这种风险是嵌入的第三方内容固有的,因此请确保您信任嵌入到您网站的内容。此外,请注意点击劫持可以与网络钓鱼技术相结合。您可以在上一节 保护用户身份和管理登录 中了解有关网络钓鱼的信息。
以下功能可以帮助防范点击劫持
- HTTP X-Frame-Options
-
X-Frame-Options
HTTP 响应标头可用于指示浏览器是否允许在<frame>
、<iframe>
、<embed>
或<object>
中呈现页面。网站可以使用它来避免 点击劫持 攻击,通过确保其内容不会嵌入到其他网站中。 - CSP: frame-ancestors
-
HTTP
Content-Security-Policy
(CSP)frame-ancestors
指令指定可以使用<frame>
、<iframe>
、<object>
或<embed>
嵌入页面的有效父级。