一道面试题牵出12个前端硬核知识点,你知道几个?(下)

简介: 一道面试题牵出12个前端硬核知识点,你知道几个?(下)

2.3 两种攻击方式


2.3.1 XSS


2.3.1.1 定义


跨站脚本攻击(XSS;Cross Site Scripting) 是指黑客往 HTML 文件中或者 DOM 中注入恶意脚本,从而在用户浏览页面时利用注入的恶意脚本对用户实施攻击的一种手段。

2.3.1.2 产生的影响


XSS攻击产生的影响主要有:盗取Cookie信息、监听用户行为、修改DOM、在页面内生成浮窗广告等。

640.png

2.3.1.3 注入方式


XSS注入方式有存储型XSS攻击、反射型XSS攻击、基于DOM的XSS攻击。


640.png



2.3.1.4 什么情况容易发生XSS攻击


容易发生XSS攻击的位置主要有两个:


  1. 数据从一个不可靠的链接进入到一个web应用程序
  2. 没有过滤掉恶意代码的动态内容被发送给Web用户

640.png


2.3.1.5 如何阻止XSS攻击


阻止XSS攻击的方式主要有三种:


  1. 服务器对输入脚本进行过滤或转码;
  2. 充分利用CSP;
  3. 使用HttpOnly属性

640.png



2.3.2 CSRF


2.3.2.1 定义

跨站请求伪造(CSRF;Cross-site request forgery)指的是黑客引诱用户打开黑客的网站,在黑客的网站中,利用用户的登录状态发起的跨站请求


2.3.2.2 产生影响


产生影响主要有以下几点:


640.png


2.3.2.3 攻击原理


640.png


2.3.2.4 攻击的前提条件


攻击的前提条件主要有以下三点:

640.png


2.3.2.5 攻击方式


实施CSRF攻击的方式主要有以下三点:

  1. 自动发起Get请求;
  2. 自动发起POST请求;
  3. 引诱用户点击链接


640.png


2.3.2.6 防止CSRF攻击的策略


防止CSRF攻击的策略主要有以下三种:

  1. 充分利用好Cookie的SameSite属性;
  2. 在服务器端验证请求的来源站点;
  3. CSRF Token。



640.png


三、浏览器安全


3.1 请求报文


HTTP请求报文主要包括:请求行、请求头部以及请求的数据(实体),下面一起看看其组成内容:


3.1.1 请求行


请求行包含:方法字段、URI字段和协议版本


  1. 方法字段


GET(请求获取内容);
POST(提交表单);
HEAD(请求资源响应消息报头);
PUT(传输文件);
DELETE(请求删除URI指向的资源);
OPTIONS(查询针对请求URI指定的资源支持的方法);
TRACE(追踪请求经过路径);
CONNECT(要求用隧道协议连接代理)。

  1. URI字段


  1. 协议版本


指的就是本次请求的HTTP协议版本,例如HTTP/0.9、HTTP/1.0、HTTP/1.1、HTTP/2.0、HTTP/3.0.


3.1.2 请求头部


常见标头有:Connection标头(连接管理)、Host标头(指定请求资源的主机)、Range标头(请求实体的字节范围)、User-Agent标头(包含发出请求的用户信息)、Accept标头(首选的媒体类型)、Accept-Language(首选的自然语言)


640.png


3.1.3 请求实体


HTTP请求的body主要用于提交表单场景。实际上,http请求的body是比较自由的,只要浏览器端发送的body服务端认可就可以了。一些常见的body格式是:


  • application/json
  • application/x-www-form-urlencoded
  • multipart/form-data
  • text/xml


使用html的form标签提交产生的html请求,默认会产生 application/x-www-form-urlencoded 的数据格式,当有文件上传时,则会使用multipart/form-data。


3.2 响应报文


HTTP响应报文分为三个部分:状态行、首部行和响应体.


3.2.1 状态行


状态行是由版本、状态码和原因语句组成,下面来看看一些常用的状态码。


  1. 1xx:这一类型的状态码,代表请求已被接受,需要继续处理。这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束
  2. 2xx:这一类型的状态码,代表请求已成功被服务器接收、理解并接受


200---OK/请求已经正常处理完毕;

204---请求处理成功,但没有资源返回;

206---表示客户端进行了范围请求,而服务器成功执行了这部分的GET请求;


  1. 3xx:这类状态码代表需要客户端采取进一步的操作才能完成请求。通常,这些状态码用来重定向,后续的请求地址(重定向目标)在本次响应的Location域中指明


301---请求永久重定向 被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个 URI 之一。如果可能,拥有链接编辑功能的客户端应当自动把请求的地址修改为从服务器反馈回来的地址。

302---请求临时重定向 由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求。只有在Cache-Control或Expires中进行了指定的情况下,这个响应才是可缓存的。

303---表示由于请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源

304---表示客户端发送附带条件的请求(指采用GET方法的请求报文中包含If-Match,If-Modified-Since,If-None-Match,If-Range,If-Unmodified-Since中任一首部)时,服务端允许请求访问资源,但未满足条件的情况

307---临时重定向,与302含义相同,但是307会遵照浏览器标准,不会从POST变成GET


  1. 4xx:这类状态码代表客户端类的错误


400---客户端请求存在语法错误

401---当前请求需要用户验证。

403---服务器已经理解请求,但是拒绝执行它。与401响应不同的是,身份验证并不能提供任何帮助

404---请求失败,请求所希望得到的资源未被在服务器上发现。

405---请求行中指定的请求方法不能被用于请求相应的资源。


  1. 5xx:服务器类的错误


500---服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。

501---服务器不支持当前请求所需要的某个功能。当服务器无法识别请求的方法,并且无法支持其对任何资源的请求。

503---由于临时的服务器维护或者过载,服务器当前无法处理请求。

505---服务器不支持,或者拒绝支持在请求中使用的 HTTP 版本。


3.2.2 响应首部


常见的响应首部有:Date(响应的时间)、Via(报文经过的中间节点)、Last-Modified(上一次修改时间)、Etag(与此实体相关的实体标记)、Connection(连接状态)、Accept-Ranges(服务器可接收的范围类型)、Content-Type(资源类型)


640.png


3.2.3 响应体


响应体就是响应的消息体,如果是纯数据就是返回纯数据,如果请求的是HTML页面,那么返回的就是HTML代码,如果是JS就是JS代码等。


3.2 HTTP的缺点


正是由于HTTP存在一系列的缺点,所以才会出现HTTPS,那么HTTP存在哪些缺点呢?该如何解决的呢?下面来进行简要概述


1.HTTP通信使用明文(不加密),内容可能会被窃听;


TCP/IP是可能被窃听的网络:按TCP/IP协议族的工作机制,通信内容在所有线路上都有可能遭到窥视。所以需要加密处理防止被窃听,加密的对象如下:


(1)通信的加密


通过和SSL(Secure Socket Layer,安全套接层)或TLS(Transport Layer Security,安全层传输协议)的组合使用,加密HTTP的通信内容。用SSL建立安全通信线路之后,就可以在这条线路上进行HTTP通信了。与SSL组合使用的HTTP称为HTTPS,通过这种方式将整个通信线路加密。


(2)内容的加密


由于HTTP协议中没有加密机制,那么就对HTTP协议传输的内容本身加密。为了做到有效的内容加密,前提是要求客户端和服务器同时具备加密和解密机制。该方式不同于将整个通信线路加密处理,内容仍有被篡改的风险。


2.不验证通信方的身份,因此有可能遭遇伪装;


(1)任何人都可发起请求


HTTP协议不论是谁发送过来的请求都会返回响应,因此不确认通信方,会存在以下隐患:


1)无法确定请求发送至目标的Web服务器是否是按真是意图返回响应的那台服务器,有可能是已伪装的Web服务器;


2)无法确定响应返回到的客户端是否是按照真实意图接收响应的那个客户端,有可能是伪装的客户端;


3)无法确定正在通信的对方是否具备访问权限,因为某些Web服务器上保存着重要的信息,只想发给特定用户通信的权限;


4)无法判断请求是来自何方、出自谁手,即使是无意义的请求也会照单全收,无法阻止海量请求下的Dos攻击(Denial of Service,拒绝服务攻击)。


(2)查明对手的证书


SSL不仅提供加密处理,还使用了一种被称为证书的手段,可用于确定通信方。证书由值得信任的第三方机构颁发,用以证明服务器和客户端是实际存在的。使用证书,以证明通信方就是意料中的服务器,对使用者个人来讲,也减少了个人信息泄露的危险性。另外,客户端持有证书即可完成个人身份的确认,也可用于对Web网站的认证环节。


3.无法证明报文的完整性,所以有可能已遭遇篡改。


在请求或响应送出之后直到对方接收之前的这段时间内,即使请求或响应的内容遭到篡改,也没有办法获悉。在请求或响应的传输途中,遭攻击者拦截并篡改内容的攻击称为中间人攻击(Man-in-the-Middle attack)。仅靠HTTP确保完整性是非常困难的,便有赖于HTTPS来实现。SSL提供认证和加密处理及摘要功能。


3.3 HTTPS基础知识点


HTTPS 并非是应用层的一种新协议。只是 HTTP 通信接口部分用SSL(Secure Socket Layer)和TLS(Transport Layer Security) 协议代替而已,简言之就是HTTP+通信加密+证书+完整性保护构成HTTPS,是身披TLS/SSL这层外壳的HTTP。

640.png


  1. TLS/SSL功能


TLS/SSL协议使用通信双方的客户证书以及CA根证书,允许客户/服务器应用以一种不能被偷听的方式通信,在通信双方间建立起了一条安全的、可信任的通信通道。


  1. 对称加密和非对称加密(公开密钥加密)


(1)对称加密


对称加密指的是加密数据用的密钥,跟解密数据用的密钥是一样的,使用该方法的优缺点是:


1)优点:加密、解密效率通常比较高、速度快。对称性加密通常在消息发送方需要加密大量数据时使用,算法公开、计算量小、加密速度快、加密效率高。


2)缺点:数据发送方、数据接收方需要协商、共享同一把密钥,并确保密钥不泄露给其他人。此外,对于多个有数据交换需求的个体,两两之间需要分配并维护一把密钥,这个带来的成本基本是不可接受的。


(2)非对称加密


非对称加密指的是加密数据用的密钥(公钥),跟解密数据用的密钥(私钥)是不一样的。公钥就是公开的密钥,谁都可以查到;私钥就是非公开的密钥,一般是由网站的管理员持有。公钥与私钥之间有一定联系:简单来说就是,通过公钥加密的数据,只能通过私钥解开;通过私钥加密的数据,只能通过公钥解开。


  1. 非对称加密(公开密钥加密)存在的问题


非对称加密其实是存在一些问题需要解决的,主要有以下两个:公钥如何获取、数据传输单向安全。


  1. 非对称加密中公钥如何获取


为了获取公钥,需要涉及到两个重要概念:证书、CA(证书颁发机构),其主要用途如下:

(1)证书:可以暂时把它理解为网站的身份证。这个身份证里包含了很多信息,其中就包含了上面提到的公钥。当访问相应网站时,他就会把证书发给浏览器;

(2)CA:用于颁发证书,证书来自于CA(证书颁发机构)。


  1. 证书可能存在的问题


(1)证书是伪造的:压根不是CA颁发的

(2)证书被篡改过:比如将XX网站的公钥给替换了


  1. 证书如何防伪


数字签名、摘要是证书防伪非常关键的武器。“摘要”就是对传输的内容,通过hash算法计算出一段固定长度的串。然后,在通过CA的私钥对这段摘要进行加密,加密后得到的结果就是“数字签名”(明文 --> hash运算 --> 摘要 --> 私钥加密 --> 数字签名);数字签名只有CA的公钥才能够解密。证书中包含了:颁发证书的机构的名字 (CA)、证书内容本身的数字签名(用CA私钥加密)、证书持有者的公钥、证书签名用到的hash算法等。


(1)对于完全伪造的证书


这种情况对证书进行检查


1)证书颁发的机构是伪造的:浏览器不认识,直接认为是危险证书


2)证书颁发的机构是确实存在的,于是根据CA名,找到对应内置的CA根证书、CA的公钥。用CA的公钥,对伪造的证书的摘要进行解密,发现解不了。认为是危险证书

(2)篡改过的证书


1)检查证书,根据CA名,找到对应的CA根证书,以及CA的公钥。

2)用CA的公钥,对证书的数字签名进行解密,得到对应的证书摘要AA

3)根据证书签名使用的hash算法,计算出当前证书的摘要BB

4)对比AA跟BB,发现不一致--> 判定是危险证书

  1. HTTPS问题


(1)与纯文本相比,加密通信会消耗更多的CPU及内存资源

1)由于HTTPS还需要做服务器、客户端双方加密及解密处理,因此会消耗CPU和内存等硬件资源。


2)和HTTP通信相比,SSL通信部分消耗网络资源,而SSL通信部分,由因为要对通信进行处理,所以时间上又延长了。SSL慢分两种,一种是指通信慢;另一种是指由于大量消耗CPU及内存等资源,导致处理速度变慢。


(2)购买证书需要开销。


3.4 HTTPS流程


1.客户端发起HTTPS请求


2.服务端响应,下发证书(公开密钥证书)


3.客户端检查证书,如果证书没问题,那么就生成一个随机值,然后用证书(公钥)对该随机值进行加密。


4.将经过公钥加密的随机值发送到服务端(非对称加密),以后客户端和服务器的通信就可以通过这个随机值进行加密解密了。


5.服务端用私钥解密后,得到了客户端传过来的随机值,然后把内容通过该值进行对称加密。


6.后期的数据传输都是基于该随机值进行加密解密。




640.png



注:图片来源于(https://blog.csdn.net/qq_33840251/article/details/91358884


四、浏览器系统安全


640.jpg


相关文章
|
14天前
|
SQL 分布式计算 监控
Sqoop数据迁移工具使用与优化技巧:面试经验与必备知识点解析
【4月更文挑战第9天】本文深入解析Sqoop的使用、优化及面试策略。内容涵盖Sqoop基础,包括安装配置、命令行操作、与Hadoop生态集成和连接器配置。讨论数据迁移优化技巧,如数据切分、压缩编码、转换过滤及性能监控。此外,还涉及面试中对Sqoop与其他ETL工具的对比、实际项目挑战及未来发展趋势的讨论。通过代码示例展示了从MySQL到HDFS的数据迁移。本文旨在帮助读者在面试中展现Sqoop技术实力。
27 2
|
14天前
|
监控 负载均衡 Cloud Native
ZooKeeper分布式协调服务详解:面试经验与必备知识点解析
【4月更文挑战第9天】本文深入剖析ZooKeeper分布式协调服务原理,涵盖核心概念如Server、Client、ZNode、ACL、Watcher,以及ZAB协议在一致性、会话管理、Leader选举中的作用。讨论ZooKeeper数据模型、操作、会话管理、集群部署与管理、性能调优和监控。同时,文章探讨了ZooKeeper在分布式锁、队列、服务注册与发现等场景的应用,并在面试方面分析了与其它服务的区别、实战挑战及解决方案。附带Java客户端实现分布式锁的代码示例,助力提升面试表现。
30 2
|
14天前
|
数据采集 消息中间件 监控
Flume数据采集系统设计与配置实战:面试经验与必备知识点解析
【4月更文挑战第9天】本文深入探讨Apache Flume的数据采集系统设计,涵盖Flume Agent、Source、Channel、Sink的核心概念及其配置实战。通过实例展示了文件日志收集、网络数据接收、命令行实时数据捕获等场景。此外,还讨论了Flume与同类工具的对比、实际项目挑战及解决方案,以及未来发展趋势。提供配置示例帮助理解Flume在数据集成、日志收集中的应用,为面试准备提供扎实的理论与实践支持。
25 1
|
21天前
|
前端开发 JavaScript 网络协议
前端最常见的JS面试题大全
【4月更文挑战第3天】前端最常见的JS面试题大全
43 5
|
1月前
|
消息中间件 NoSQL 网络协议
Java面试知识点复习​_kaic
Java面试知识点复习​_kaic
|
6天前
|
数据可视化 Python
Python模型评估与选择:面试必备知识点
【4月更文挑战第17天】本文深入探讨了Python模型评估与选择在面试中的关键点,包括性能度量、过拟合与欠拟合识别、模型比较与选择、模型融合和偏差-方差权衡。强调了避免混淆评估指标、忽视模型验证和盲目追求高复杂度模型的常见错误,并提供相关代码示例,如交叉验证、网格搜索和超参数调优。通过理解这些概念和技巧,可在面试中展示出色的数据科学能力。
31 12
|
14天前
|
机器学习/深度学习 分布式计算 BI
Flink实时流处理框架原理与应用:面试经验与必备知识点解析
【4月更文挑战第9天】本文详尽探讨了Flink实时流处理框架的原理,包括运行时架构、数据流模型、状态管理和容错机制、资源调度与优化以及与外部系统的集成。此外,还介绍了Flink在实时数据管道、分析、数仓与BI、机器学习等领域的应用实践。同时,文章提供了面试经验与常见问题解析,如Flink与其他系统的对比、实际项目挑战及解决方案,并展望了Flink的未来发展趋势。附带Java DataStream API代码样例,为学习和面试准备提供了实用素材。
37 0
|
15天前
|
分布式计算 资源调度 监控
Hadoop生态系统深度剖析:面试经验与必备知识点解析
本文深入探讨了Hadoop生态系统的面试重点,涵盖Hadoop架构、HDFS、YARN和MapReduce。了解Hadoop的主从架构、HDFS的读写流程及高级特性,YARN的资源管理与调度,以及MapReduce编程模型。通过代码示例,如HDFS文件操作和WordCount程序,帮助读者巩固理解。此外,文章强调在面试中应结合个人经验、行业动态和技术进展展示技术实力。
|
18天前
|
缓存 NoSQL 定位技术
深入探索Redis:面试中必须掌握的关键知识点
深入探索Redis:面试中必须掌握的关键知识点
|
1月前
|
存储 缓存 监控
2024年春招小红书前端实习面试题分享
春招已经拉开帷幕啦! 春招的拉开,意味着新一轮的求职大战已经打响,希望每位求职者都能充分准备,以最佳的状态迎接挑战,找到心仪的工作,开启职业生涯的新篇章。祝愿每位求职者都能收获满满,前程似锦!
75 3