前言
前端关于网络安全问题看似高深莫测,其实来来回回就那么点东西,我总结一下就是 3 + 1 = 4,3个用字母描述的【分别是 XSS、CSRF、CORS】 + 一个中间人攻击。当然 CORS 同源策略是为了防止攻击的安全策略,其他的都是网络攻击。除了这 4 个前端相关的面试题,其他的都是一些不常用的小喽啰。
4个重要的安全相关内容我已经总结完,链接如下:
彻底理解前端安全面试题(1)—— XSS 攻击
彻底理解前端安全面试题(2)—— CSRF 攻击
彻底理解前端安全面试题(3)—— CORS 跨域资源共享
彻底理解前端安全面试题(4)—— 中间人攻击
这篇文章是第五篇总结篇,总结前端安全相关的所有面试题目,并且补充一些其他的网络攻击。
一、什么是 XSS 攻击
XSS 跨站脚本攻击,请参考这篇文章。
二、什么是 CSRF 攻击
CSRF 跨站请求伪造,请参考这篇文章。
三、CORS 跨域资源共享
CORS 跨域资源共享,解决浏览器的同源策略,请参考这篇文章。
四、什么是中间人攻击
MITM 中间人攻击,请参考这篇文章。
五、什么是DOS / DDOS 攻击
5.1 DOS
DOS(denial of service)是拒绝服务攻击,是大量发送合理请求、恶意注入流量等方式,占用服务器的资源,其目标是通过超过目标系统、服务或网络的处理能力,使其无法提供正常的服务或响应用户请求。DOS 攻击通常由单一的来源发起。
5.2 DDOS
DDOS 是分布式拒绝服务攻击,在这种攻击中,攻击者通过控制多台计算机和设备来协同发动攻击,发起大规模的网络请求,恶意流量的注入、连接耗尽(TCP)等。这使得攻击更难被阻止,因为流量来自多个来源。
5.3 DOS 原理
- 占用带宽
- 资源耗尽
- 连接耗尽(TCP连接耗尽,服务器可以承受的连接数是有限的)
- 服务请求洪范(SYN Flood => SYN洪泛)【攻击者发送许多数据包,但不向服务器发送“ACK”】
5.4 对抗 DOS
- 使用防火墙【防止内部或私有的网络遭受外来的未经授权的访问】
- 入侵检测系统IDS ( Intrusion Detection System)
- 入侵防御系统IPS (Intrusion Prevention System)
- 机构内容分发网络CDN,负载均衡器
- 流量过滤
- 加强认证和授权
- 升级硬件和软件
- 限制带宽
六、什么是SQL注入攻击?
利用应用程序对用户输入的不充分验证和过滤,向数据库中插入恶意的SQL代码,通过这种攻击,攻击者可以执行未经授权的数据库操作,导致信息泄漏、数据破坏,甚至完全控制受害大的数据库。
6.1 攻击原理
攻击者通常通过在应用程序的输入字段中注入恶意的SQL语句来实施SQL注入攻击,这些输入字段可能包括登录表单,搜索框,评论框等与数据库交互的地方,如果应用程序未正确验证和处理这些输入,攻击者可以在输入字段中插入恶意SQL代码的内容
6.2 防范SQL注入攻击
开发人员应该采取严格的输入验证和参数化查询,而不是直接拼接用户输入到SQL语句中,使用预编译语句或存储过程,以及最小权限原则,都是减轻SQL注入风险的有效手段
七、缓冲区溢出攻击
缺乏边界检查和验证的漏洞。缓冲区溢出攻击是一种利用程序在处理数据时没有足够边界检查或验证的漏洞,导致数据溢出到内存缓冲区之外的攻击方式。攻击者通过输入超出预期大小的数据,覆盖或改写了程序的内存区域,可能导致程序崩溃、执行恶意代码或者执行未授权的操作。
7.1 攻击步骤
- 找到漏洞点: 攻击者首先需要找到程序中存在缓冲区溢出漏洞的地方,通常是在处理用户输入或外部数据的部分。
- 构造恶意输入: 利用找到的漏洞,攻击者构造特定的输入数据,使其长度超过程序为相应缓冲区分配的空间。
- 覆盖内存: 当程序接受攻击者构造的输入时,由于缺乏足够的边界检查,攻击者的数据超出了原始分配的缓冲区大小,导致溢出。
- 执行恶意代码: 溢出的数据可能包含恶意代码,攻击者的目标是通过覆盖内存中的程序指令或返回地址,强制程序执行攻击者植入的恶意代码。
- 获取控制权: 一旦攻击者成功执行恶意代码,他们可能获得对系统或程序的控制权,执行未授权的操作,或者窃取敏感信息。
缓冲区溢出攻击是一种广泛存在的威胁,尤其在使用低级编程语言(如C和C++)编写的程序中更为常见。为了防范缓冲区溢出攻击,开发者应该使用安全的编程实践,如输入验证、边界检查、使用安全的标准库函数等,以确保程序能够正确处理各种输入并防范溢出漏洞。另外,采用内存保护技术如地址空间布局随机化(ASLR)和栈保护(StackGuard)等也可以增加系统的安全性。
八、常见的网络钓鱼技术?
网络钓鱼(Phishing)是一种通过伪装成合法实体,诱导用户提供敏感信息的欺骗性手段。以下是一些常见的网络钓鱼技术:
- 欺骗性链接: 攻击者会通过电子邮件、社交媒体消息或其他渠道发送包含欺骗性链接的信息。这些链接看起来像是合法的网站,但实际上是攻击者控制的恶意站点。
- 钓鱼电子邮件: 攻击者发送伪装成合法机构、公司或服务提供商的电子邮件,诱导受害者点击链接、下载附件或提供敏感信息。这些电子邮件通常会使用社会工程学手法,制造紧急性或引起受害者的注意。
- 社交工程: 攻击者通过社交媒体或其他在线渠道获取目标的个人信息,然后使用这些信息制作钓鱼攻击。这可能包括使用目标的姓名、职务、公司信息等,使攻击看起来更加真实可信。
- 恶意附件: 钓鱼邮件中可能包含看似无害的附件,实际上是恶意软件,一旦受害者打开,恶意软件就会感染其系统。
- 欺诈性网站: 攻击者可能创建与合法网站外观相似的假冒网站,通过欺骗用户输入敏感信息。这可能是银行、电子支付服务、电子邮件提供商等机构的模仿。
- Spear(矛) Phishing: 针对特定目标的高度个性化的钓鱼攻击。攻击者通常在此类攻击中使用目标特定的信息,如姓名、职务、关系等,使攻击更具说服力。
- 电话钓鱼: 攻击者通过电话与受害者联系,声称代表合法机构,并试图获取敏感信息。这也被称为“Vishing”(Voice Phishing)。
- 短信/短信钓鱼: 攻击者通过短信发送虚假信息,引导受害者点击链接或回复包含敏感信息的信息。
九、什么是社交工程攻击?
社交工程攻击是一种利用心理学和人类社交行为的技术,通过欺骗、误导或引导个人或组织来获取敏感信息、未经授权地访问或实施其他恶意活动的攻击手段。社交工程攻击的目标通常是人,而不是计算机系统本身。攻击者利用人们的信任、好奇心、无知或恐惧等情感来达到他们的目的。
十、什么是零日漏洞?
零日漏洞(Zero-Day Vulnerability)是指已经被发现但尚未被软件供应商修补的安全漏洞。这种类型的漏洞被称为“零日”,因为从漏洞被公开或被利用的那一天开始,厂商还没有提供修复措施,用户无法通过更新软件来弥补漏洞。
零日漏洞通常是由独立的安全研究人员、黑客或其他利益相关方发现的。攻击者可能会利用这些漏洞来入侵系统、执行恶意代码或进行其他危害性的活动。因为零日漏洞尚未被修复,所以用户和组织无法采取已知的对策来防范这些攻击。
一旦零日漏洞被发现,有责任的安全研究人员通常会尽快通知软件供应商,以便尽快推出修复措施。然而,直到修复措施发布之前,用户仍然可能处于潜在的风险之中。零日漏洞的广泛关注表明了对软件安全性的重要性,并强调了需要及时修复和更新系统以保护用户免受潜在威胁的必要性
十一、如何防范网络攻击
防范网络攻击是一个综合性的任务,涉及多个层面的措施,包括技术、教育、管理等。
防范网络攻击的方法:
- 更新和维护系统: 及时更新操作系统、应用程序和防病毒软件等软件,以确保系统能够获得最新的安全补丁和防护措施。
- 强化身份验证: 使用强密码,并考虑采用多因素身份验证(MFA)来提高账户的安全性。
- 网络防火墙: 部署防火墙以监控和过滤进出网络的流量,阻止潜在的恶意流量。
- 反病毒和反恶意软件工具: 使用最新的反病毒和反恶意软件工具,定期进行扫描以检测和清除潜在的威胁。
- 加密通信: 使用加密协议(如HTTPS)来保护敏感数据在传输过程中的安全性。
- 员工培训: 提供定期的网络安全培训,使员工能够识别和避免潜在的网络威胁,强调社交工程攻击的风险。
- 访问控制: 限制对系统和数据的访问权限,确保只有授权人员能够访问敏感信息。
- 监控和日志记录: 实施实时监控和详细的日志记录,以及时检测异常活动并进行调查。
- 漏洞管理: 定期进行漏洞扫描和评估,及时修复发现的安全漏洞。
- 应急响应计划: 制定和实施应急响应计划,以便在发生安全事件时能够迅速而有效地应对。
- 网络隔离: 将网络分割为不同的区域,限制攻击者在网络中的扩散能力。
- 物理安全: 确保物理访问控制,防止未经授权的人员访问服务器房间和网络设备。
- 定期审计: 进行定期的安全审计和评估,以确保安全策略和措施的有效性。
- 采用安全标准和最佳实践: 遵循并实施相关的安全标准和最佳实践,如ISO 27001等。
十二、网络劫持有哪几种,如何防范?
网络劫持是指攻击者篡改或控制网络通信,以获取、修改或拦截通信流量。这可以包括DNS劫持、BGP劫持和HTTP劫持等形式。以下是其中一些主要的网络劫持类型以及防范方法:
12.1 DNS劫持
- 描述: 攻击者修改DNS(域名系统)响应,将合法域名映射到恶意IP地址,从而重定向用户的流量。
- 防范方法: 使用安全的DNS解析服务,启用DNSSEC(DNS安全扩展),定期检查DNS记录,避免使用不受信任的公共Wi-Fi网络。
12.2 BGP劫持
- 描述: 攻击者在BGP(边界网关协议)路由表中发布虚假的IP地址,导致流量被重定向到攻击者控制的网络。
- 防范方法: 使用BGP监控工具,实施BGP路由验证,采用BGP Route Origin Validation(ROV)等机制,与ISP合作实施防范措施。
12.3 HTTP劫持
- 描述: 攻击者通过修改或注入恶意的HTTP响应,篡改网页内容,可能包括注入广告、恶意脚本等。
- 防范方法: 使用HTTPS协议,确保网站的内容被加密传输,使用HSTS(HTTP Strict Transport Security)以防止协议降级攻击,实施内容安全策略(CSP)限制网页中加载的资源。
12.4 ARP劫持
- 描述: 攻击者发送虚假的ARP(地址解析协议)响应,将合法IP地址映射到攻击者的MAC地址,使流量经过攻击者的设备。
- 防范方法: 使用静态ARP绑定,启用ARP检测机制,使用网络入侵检测系统(NIDS)来检测异常ARP流量。
12.5 Wi-Fi劫持
- 描述: 攻击者创建伪造的Wi-Fi热点,欺骗用户连接,并拦截流量。
- 防范方法: 避免连接到未经验证的Wi-Fi网络,使用虚拟专用网络(VPN)来加密通信,启用Wi-Fi加密协议(如WPA3)。
12.6 VPN劫持
- 描述: 攻击者利用虚拟专用网络(VPN)漏洞或恶意VPN服务,监视、篡改或拦截用户的VPN流量。
- 防范方法: 选择受信任的VPN服务提供商,使用最新的VPN协议,定期更新VPN客户端和服务器
12.7 点击劫持
点击劫持是一种视觉欺骗的攻击手段,攻击者将需要攻击的网站iframe嵌套的方式嵌入自己的网页中,并将iframe设置为透明,在页面中透出一个按钮诱导用户点击。我们可以在http相应头中设置x-frame-options来防御iframe嵌套的点击劫持攻击,通过不同的值,可以规定页面在特定的一些情况才能作为iframe来使用
防范网络劫持需要综合使用多层次的安全措施,包括使用加密通信、启用安全协议、定期监控网络流量、更新系统和应用程序、加强身份验证等。此外,用户和组织应保持对网络劫持威胁的警惕,并及时采取适当的安全措施。
十三、有哪些可能引起前端安全的问题
前端安全问题主要涉及用户在浏览器中与网站交互的方面。以下是一些可能引起前端安全问题的情况:
- 跨站脚本攻击(XSS): 攻击者注入恶意脚本到网页中,当用户访问时,脚本在用户浏览器中执行,可用于窃取用户信息、会话劫持等。
- 跨站请求伪造(CSRF): 攻击者通过欺骗用户在已认证的会话中执行非预期的操作,利用用户在目标网站上的身份进行操作。
- 点击劫持: 攻击者将目标网站嵌入到一个透明的iframe中,并诱使用户在该iframe上进行点击,从而触发用户在未知情况下执行了恶意操作。
- 内容嗅探: 攻击者可能通过嗅探网络流量,了解用户在网站上的行为和访问内容,造成隐私泄露。
- 不安全的第三方资源: 使用不受信任或未经验证的第三方库、插件或内容分发网络(CDN)可能引入恶意代码,导致安全问题。
- 不安全的跳转: 未经验证的跳转链接可能导致打开恶意站点,或者用于进行钓鱼攻击。
- 不安全的密码存储: 如果前端应用在本地存储用户密码或敏感信息,而没有适当的加密和保护机制,就可能导致信息泄漏。
- 不安全的文件上传: 如果网站允许用户上传文件,但没有进行适当的文件类型验证和限制,可能导致上传恶意文件,例如包含恶意代码的文件。
- 未加密的通信: 如果网站在用户和服务器之间的通信中未使用加密协议(如HTTPS),可能导致信息泄露和中间人攻击。
- 未验证的用户输入: 如果网站未对用户输入进行充分的验证和过滤,可能受到SQL注入、命令注入等攻击。
- 跨站脚本 (Cross-Site Scripting, XSS): ⼀种代码注⼊⽅式, 为了与 CSS 区分所以被称作 XSS。早期常⻅于⽹络论坛, 起因是⽹站没有对⽤户的输⼊进⾏严格的限制, 使得攻击者可以将脚本上传到帖⼦让其他⼈浏览到有恶意脚本的⻚⾯, 其注⼊⽅式很简单包括但不限于 JavaScript / CSS / Flash 等;
- iframe的滥⽤: iframe中的内容是由第三⽅来提供的,默认情况下他们不受控制,他们可以在iframe中运⾏JavaScirpt脚本、Flash插件、弹出对话框等等,这可能会破坏前端⽤户体验;使用X-Frame-Options:DENY/SAMEORIGIN限制页面使用iframe
- 跨站点请求伪造(Cross-Site Request Forgeries,CSRF): 指攻击者通过设置好的陷阱,强制对已完成认证的⽤户进⾏⾮预期的个⼈信息或设定信息等某些状态更新,属于被动攻击
恶意第三⽅库: ⽆论是后端服务器应⽤还是前端应⽤开发,绝⼤多数时候都是在借助开发框架和各种类库进⾏快速开发,⼀旦第三⽅库被植⼊恶意代码很容易引起安全问题。
防范这安全问题的措施:
- 实施内容安全策略(CSP)以限制允许加载的资源和脚本。
- 对用户输入进行充分验证和过滤,避免XSS和其他注入攻击。
- 使用HTTPS来保护通信的隐私和完整性。
- 避免使用不受信任的第三方资源,谨慎使用外部库和插件。
- 针对CSRF攻击采用合适的防护机制,如同步令牌(Synchronizer Token)。
- 使用安全的跳转机制,避免开放性的跳转。
- 定期审查代码和依赖项,及时更新和修复潜在的安全漏洞。
十四、Iframe安全
- 嵌入第三方有很多不可控的问题,第三方 iframe出 现问题或者被劫持会诱发安全问题
- 点击劫持:将 iframe 设置成透明,诱导用户点击
- 会导致 CSRF 攻击
预防
- 服务端设置相应头:X-Frame-Options
十五、静态资源完整性校验
使用 内容分发网络 (CDNs) 在多个站点之间共享脚本和样式表等文件可以提高站点性能并节省带宽。然而,使用CDN也存在风险,如果攻击者获得对 CDN 的控制权,则可以将任意恶意内容注入到 CDN 上的文件中 (或替换、篡改文件),因此可能潜在地攻击所有从该 CDN 获取文件的站点。
预防方案
使用哈希值来实现完整性校验,将使用 base64 编码过后的文件哈希值写入你所引用的 integrity 属性是html标签的规范,是浏览器标签的功能
浏览器校验:当浏览器加载页面并请求静态资源时,它会同时接收到资源的哈希值。浏览器会计算下载资源的哈希值,然后将其与嵌入在页面中的哈希值进行比对,哈希值不匹配就阻止资源的加载。
十六、前端的常规安全策略
- 定期请第三方机构做安全性测试,漏洞扫描
- 使用第三方开源库做上线前的安全测试,可以考虑融合到CI中
- code review 保证代码质量
- 默认项目中设置对应的 Header 请求头,如 X-XSS-Protection、 X-Content-Type-Options 、X-Frame-Options Header、Content-Security-Policy 等等
- 对第三方包和库做检测:NSP(Node Security Platform),Snyk
- 跨域配置
- 图片的防掉链
十七、前端数据安全
反爬虫
- 动态加载内容
- 使用字体图标
- 图片验证码
- 用户行为检测
- ip封禁
- 设置请求头
- ssr渲染
- 限制访问频率
总结
关于前端网络安全相关的面试题已经全部总结完毕,一共5篇文章,在我的《面试题一网打尽》的专栏中,欢迎大家收藏关注。
内容很多,难免疏漏,有任何问题,欢迎在评论区指出。
这是一系列文章,我在持续更新中,欢迎大家关注,也欢迎大家关注我的另一个专栏《前端工程化》干货满满!