随着互联网的高速发展,信息安全问题已经成为行业最为关注的焦点之一。总的来说安全是很复杂的一个领域,在移动互联网时代,前端人员除了传统的 XSS、CSRF 等安全问题之外,还时常遭遇网络劫持、非法调用 Hybrid API 等新型安全问题。
一、跨站脚本攻击(XSS)
Cross-Site Scripting(跨站脚本攻击)简称 XSS,是一种代码注入攻击。攻击者通过在目标网站上注入恶意脚本,使之在用户的浏览器上运行。利用这些恶意脚本,攻击者可获取用户的敏感信息如 Cookie、SessionID 等,进而危害数据安全。
XSS攻击流程如下:
1. 攻击者识别目标网站:攻击者首先选择目标网站,可能是一个在线社交媒体平台、论坛、博客等。
2. 构造恶意脚本:攻击者创建包含恶意代码的脚本,通常使用 JavaScript。恶意脚本可能包括窃取用户的敏感信息(如登录凭据、cookie)、篡改页面内容、重定向用户到恶意站点等。
3. 注入恶意脚本:攻击者将恶意脚本注入目标网站的用户可输入区域,如评论框、搜索框、用户个人资料等。这些输入区域未经适当的过滤和转义,导致恶意脚本被存储在目标网站的数据库中,或直接在用户访问页面时被执行。
4. 用户访问受感染的页面:当用户访问包含恶意脚本的页面时,恶意脚本会在其浏览器中执行。
5. 恶意脚本执行:一旦恶意脚本在用户浏览器中执行,它可以获取用户的敏感信息、篡改页面内容、发送请求到攻击者控制的服务器等。
XSS防范措施:
1.输入验证和过滤:对用户输入的数据进行验证和过滤,确保其符合预期的格式和类型。使用合适的输入验证机制,如正则表达式、白名单过滤等,防止恶意脚本注入。
2.输出转义:在将用户输入或其他动态内容展示在网页中时,使用适当的输出转义机制,确保任何特殊字符都被转义为其等效的文本表示形式。这样可以防止浏览器将输入解释为可执行的脚本。
3.Content Security Policy(CSP):实施 CSP 可以限制页面中可执行的脚本和资源来源。通过设置 CSP 标头或元标签,指定允许加载的脚本源和其他资源,限制恶意脚本的执行。
4.验证码:对于涉及敏感操作或高风险操作,如注册、登录、支付等,引入验证码机制,确保用户的操作由真实用户进行。
5.安全的开发框架和库:使用经过审查和安全性较高的前端开发框架和库,这些框架通常内置了安全性措施,可以减少安全漏洞的风险。
6.输入过滤白名单:使用输入过滤白名单机制,只允许特定的 HTML 标签和属性,过滤掉潜在的恶意标签和属性。
7.限制脚本执行权限:在页面中限制 JavaScript 的执行权限,仅允许从受信任的源加载脚本,可以使用沙箱技术或 CSP 的限制来实现。
8.安全意识培训:提高开发人员和用户的安全意识,教育他们如何避免常见的安全风险和采取正确的安全措施。
二、跨站请求伪造(CSRF)
CSRF (Cross-site request forgery)跨站请求伪造:攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求。利用受害者在被攻击网站已经获取的注册凭证(cookies 等),绕过后台的用户验证,达到冒充用户对被攻击的网站执行某项操作的目的。
CSRF攻击流程如下:
1. 受害者登录 a.com,并保留了登录凭证(Cookie)。
2. 攻击者引诱受害者访问了 b.com。
3. b.com 向 a.com 发送了一个请求:a.com/act=xx。浏览器会默认携带 a.com 的 Cookie。
4. a.com 接收到请求后,对请求进行验证,并确认是受害者的凭证,误以为是受害者自己发送的请求。
5. a.com 以受害者的名义执行了 act=xx。
6. 攻击完成,攻击者在受害者不知情的情况下,冒充受害者,让 a.com 执行了自己定义的操作。
CSRF防范措施:
1.使用 CSRF Token:在用户进行敏感操作(如更改密码、执行支付等)时,生成并在请求中包含一个 CSRF Token。该 Token 是服务器生成的随机值,存储在用户的会话中,并在每个请求中验证。攻击者无法获取到正确的 CSRF Token,因此无法成功发起 CSRF 攻击。
2.同源检测:在服务器端对请求进行同源检测,即检查请求的来源是否与预期的域名一致。如果请求的来源不是预期的域名,则可能是 CSRF 攻击,服务器可以拒绝该请求。
3.验证 Referer 头:在服务器端验证请求的 Referer 头,确保请求是从合法的页面发起的。这是一种简单的验证方式,但并不绝对可靠,因为某些浏览器或代理可能会篡改或不发送 Referer 头。
4.添加验证码:对于执行敏感操作的请求,引入验证码机制,要求用户在提交请求之前输入验证码。这可以防止 CSRF 攻击,因为攻击者无法获取到有效的验证码。
5.设置 SameSite Cookie 属性:在设置 Cookie 时,将 SameSite 属性设置为严格(Strict)或限制(Lax)。这可以限制 Cookie 只在同一站点上的请求中发送,阻止跨站点请求中的 Cookie 泄漏。
6.使用双重认证:对于涉及敏感操作的应用,引入双重认证机制,要求用户在进行敏感操作之前进行额外的身份验证,如输入验证码、使用指纹识别或一次性密码等。
三、点击劫持(ClickJacking)
点击劫持(Clickjacking)是一种通过视觉欺骗的手段来达到攻击目的手段。往往是攻击者将目标网站通过 iframe 嵌入到自己的网页中,通过 opacity 等手段设置 iframe 为透明的,使得肉眼不可见,这样一来当用户在攻击者的网站中操作的时候,比如点击某个按钮(这个按钮的顶层其实是 iframe),从而实现目标网站被点击劫持。
点击劫持的防范措施:
1. 在HTTP投中加入 X-FRAME-OPTIONS 属性,此属性控制页面是否可被嵌入 iframe 中。
DENY:不能被所有网站嵌套或加载;
SAMEORIGIN:只能被同域网站嵌套或加载;
ALLOW-FROM URL:可以被指定网站嵌套或加载
2. 判断当前网页是否被 iframe 嵌套。
四、CDN劫持
出于性能考虑,前端应用通常会把一些静态资源存放到 CDN(Content Delivery Networks)上面,例如 js 脚本和 style 文件。这么做可以显著提高前端应用的访问速度,但与此同时却也隐含了一个新的安全风险。如果攻击者劫持了 CDN,或者对 CDN 中的资源进行了污染,攻击者可以肆意篡改我们的前端页面,对用户实施攻击。
CDN劫持防范措施:
1.HTTPS 加密通信:使用 HTTPS 来加密与服务器之间的通信,确保传输的内容不被篡改。HTTPS 可以有效防止攻击者在网络传输过程中对内容进行篡改。
2.安全证书验证:在使用 CDN 服务时,确保服务器端和客户端都验证证书的合法性。服务器应使用受信任的证书机构签发的有效证书,并启用证书链验证。客户端应对证书进行验证,确保其有效性和正确性。
3.内容完整性验证:在客户端接收到来自 CDN 的响应后,可以对内容的完整性进行验证,比对响应内容的哈希值或签名。如果内容被篡改,验证过程将失败,客户端可以中断加载或采取其他适当的措施。
4.响应头验证:检查响应头中的内容,特别关注重要的安全头,如 Content-Security-Policy(CSP)、X-Content-Type-Options、X-XSS-Protection 等。确保这些头部的值符合预期,并且没有被恶意篡改。
5.监测异常行为:实施实时监测和日志分析,以便检测任何异常行为,如响应内容的变化、响应时间的显著增加等。监测可以帮助发现潜在的劫持问题并及时采取措施。
五、内容安全策略(CSP)
CSP(Content Security Policy)是一种安全策略,用于保护网站免受跨站脚本攻击(XSS)、数据注入等恶意行为的影响。它通过定义一组规则来限制网页内容的加载和执行,以减少潜在的安全风险。
CSP 的主要目标是控制网页中可执行的脚本和资源的来源,防止恶意脚本的注入和执行。通过实施 CSP,网站管理员可以指定哪些资源可以被加载,哪些不允许加载,从而减少攻击者可以利用的攻击向量。
CSP 通过指定策略指令来定义安全策略,这些指令可以通过 HTTP 标头(Content-Security-Policy)或 <meta> 标签嵌入到网页中。下面是一些常见的 CSP 指令:
default-src:定义默认的资源加载策略,如果其他指令未明确指定资源加载策略,则使用默认策略。
script-src:限制可执行的 JavaScript 脚本的来源。
style-src:限制可加载的样式表的来源。
img-src:限制可加载的图片的来源。
font-src:限制可加载的字体资源的来源。
connect-src:限制可以与之建立网络连接的来源,包括 AJAX、WebSockets 等。
object-src:限制可加载的嵌入对象的来源,如 Flash、音频、视频等。
frame-src:限制可以加载的框架(iframe)的来源。
media-src:限制可加载的音频和视频资源的来源。
child-src:限制可以嵌入到 <frame>、<iframe> 或者 <object> 中的内容的来源。
form-action:限制表单提交的目标地址。
sandbox:将网页置于沙箱中,限制其操作和访问权限。
六、安全沙箱(Sandbox)
Sandbox(沙箱)是一种安全机制或环境,用于限制程序或代码的执行范围,以防止恶意行为或不受信任的代码对系统造成损害。它提供了一种隔离的运行环境,可以限制应用程序的访问权限和操作范围,以防止恶意行为或意外的影响。
七、DOS攻击
DOS (Denial Of Service)攻击是一种恶意行为,旨在影响合法最终用户对目标系统(如网站或应用程序)的可用性。通常,攻击者会生成大量数据包或请求,最终使目标系统不堪重负。在发生分布式拒绝服务 (DDoS) 攻击时,攻击者使用多个被破坏或受控的来源生成攻击,耗尽目标的资源,造成正常流量无法到达预定目的地。
常见的DOS攻击类型包括:
1. 带宽洪泛攻击:攻击者通过发送大量的网络流量,占用目标系统的带宽资源,导致合法用户无法正常访问。
2. SYN Flood攻击:攻击者利用TCP协议中的三次握手过程,发送大量的伪造的TCP连接请求(SYN包),但不完成握手过程,从而耗尽目标系统的资源。
3. ICMP Flood攻击:攻击者通过发送大量的ICMP Echo请求(Ping请求),占用目标系统的网络带宽和处理能力。
4. HTTP Flood攻击:攻击者利用HTTP协议发送大量的HTTP请求,占用目标系统的处理能力和网络带宽。
5. DNS Amplification攻击:攻击者利用开放的DNS服务器,向其发送小型的DNS查询请求,但请求中的源IP地址被伪造成目标系统的IP地址,从而导致DNS服务器向目标系统发送大量的响应数据,消耗其网络带宽。
DOS攻击防范措施:
1. 流量分析和过滤:使用入侵检测系统(IDS)或入侵防御系统(IPS)对流量进行分析和过滤,识别和阻止异常流量。
2. 增加系统资源和容量:增加目标系统的带宽、处理能力和存储容量,以应对大规模的请求。
3. 配置防火墙和负载均衡器:通过配置防火墙规则和负载均衡器,限制对目标系统的访问和分散流量,防止攻击集中到单个系统。
4. SYN Cookies:启用 SYN Cookies 可以防止 SYN Flood 攻击,通过在服务端动态生成和验证 SYN Cookies,减少服务器资源消耗。
5. 响应速率限制:通过限制对某个特定IP地址或来源的请求速率,防止过多的请求集中到目标系统。
6. 安全更新和漏洞修复:及时更新和修复系统和应用程序的漏洞,以减少被攻击的风险。
7. 想象不同类型的攻击,如DDoS攻击,将网络流量分散到多个地理位置的边缘节点。
8. 云服务提供商:使用云服务提供商的 DDoS 防护服务,利用他们的网络和资源来防范和缓解DOS攻击。