【利用AI让知识体系化】深入浅出HTTP(近2w字)(二)

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 【利用AI让知识体系化】深入浅出HTTP(近2w字)

【利用AI让知识体系化】深入浅出HTTP(近2w字)(一)https://developer.aliyun.com/article/1426048


4. Cookies和Session

Cookies的原理和应用

Cookies是指服务器通过HTTP响应头设置在客户端浏览器上的一些小文本文件,通常用于识别用户身份、保存用户个性化设置、记录用户浏览历史等应用场景。

其原理是客户端浏览器首次访问服务器时,服务器将该浏览器生成一个唯一的标识符并存储在Cookies中,随后在该浏览器访问同一域名下的网站时,该标识符会被附加在每一次HTTP请求头中发送给服务器,服务器通过解析HTTP请求头中的Cookies字段来判断该请求来自哪个用户。

Cookies的应用包括但不限于:

  1. 用户登录状态的记录:通过设置一个包含用户ID的Cookie,为用户提供即使在浏览器关闭后重新打开浏览器仍能保持登录状态的体验。
  2. 购物车:通过将商品ID、数量等信息存储在Cookies中,在用户多次打开同一网站或在不同产品之间切换时能够保留上一次选择的商品信息。
  3. 用户偏好设置的记录: 比如页面语言、字体大小、宽窄版式等信息,使得用户访问同一网站时能够保留上一次的喜好设置。

需要注意的是,Cookies中的数据可以被篡改和窃取,因此浏览器通常会限制Cookies只能访问同一域名下的网站,禁止跨域访问,以保持Cookies的安全性。此外,随着浏览器出现新的隐私和安全特性,例如Safari的Intelligent Tracking Prevention和Chrome的SameSite Cookies等,Cookies的应用也会受到影响。

Session机制

Session机制是指服务器在保存用户状态时,将用户个人信息存储在服务器上,产生一个对应的Session ID,并将该ID发送给客户端。在客户端浏览器关闭前,可以通过Cookie或URL的方式来将Session ID传递给服务器,从而让服务器能够识别用户身份并提供相应的服务。

Session机制的原理与Cookies相似,但是本质上有一些区别。Session机制的实现方式是将用户状态信息存储在服务器上,而不是存储在浏览器的Cookies中。当用户打开浏览器访问Web应用时,Web应用会自动生成一个全局唯一的Session ID用于标识用户,这个Session ID会被服务器存储在内存中或者数据库中。在用户请求中包含Session ID,服务器端通过Session ID来识别用户身份,提供相应的服务。

Session机制通常用于需要保存用户状态信息的Web应用程序,比如购物车、用户认证、表单数据等。由于Session ID是从服务器端产生和管理的,相比Cookies来说更安全,因为它可以防止用户篡改和窃取客户端的信息,并遵循了“数据只存储在服务器”的安全原则。

需要注意的是,Session ID也有一些安全风险,例如Session劫持、Session固定攻击等,需要在实现Session机制时采取相应的安全措施如Session ID加密、定期更新Session ID等来加强安全性。

使用Cookies和Session进行用户认证

用户认证是一个常见的Web应用程序中的功能,它通常使用Cookies或Session机制来实现。

采用Cookies实现用户认证的流程如下:

  1. 用户在Web应用上输入用户名和密码。
  2. Web应用验证用户名和密码是否匹配。
  3. 如果匹配,则Web应用会向该用户设置一个名为auth或token的Cookie,其中包含某些具有唯一性的令牌或认证信息。
  4. 在下一次用户访问Web应用时,Web应用从请求中提取Cookies并检查其值,如果Cookie的值有效,用户将被认为是已经被验证过的用户并允许访问受保护的资源。

采用Session实现用户认证的流程如下:

  1. 用户在Web应用上输入用户名和密码。
  2. Web应用验证用户名和密码是否匹配,并在服务器端创建一个Session对象。
  3. 服务器将session ID 存储在一个名为JSESSIONID的 Cookie中,然后再通过HTTP响应头将该Cookie发送给客户端浏览器。
  4. 在下一次用户访问Web应用时,浏览器会将JSESSIONID的Cookie包含在请求中,并将其发送给Web服务器。
  5. Web服务器使用Cookies中的SessionID来唯一的标识用户,从而来确定用户是否已经通过认证并允许访问受保护的资源。

需要注意的是,Session机制相比Cookies来说更加安全,因为session中的信息保存在服务器端,无法被客户端篡改和盗用。Cookies虽然比较方便,但存在安全隐患,有可能被黑客截获进而获取敏感信息,因此在实现用户认证时需要根据自己需要选择适合的验证机制。

5. HTTP缓存

缓存概述

HTTP缓存是指客户端浏览器或服务器保存已经请求过并得到响应的资源的副本,以便在将来的请求中能够直接使用该副本,而无需再次请求服务器。

HTTP缓存分为两种:客户端缓存和服务器缓存。

客户端缓存

客户端缓存是指浏览器在本地缓存请求过的资源,使得在后续请求该资源时可以直接从本地缓存读取,而无需再次向服务器请求该资源。当浏览器需要请求某个资源时,它会检查是否存在缓存副本,如果存在且未过期,则可以从缓存中获取该资源,而不必真正地向服务器发送请求,从而可以加快资源的加载速度。常见的客户端缓存策略包括强缓存和协商缓存。

服务器缓存

服务器缓存是指服务器在响应请求时将该资源缓存下来,并在后续请求中将该资源直接返回给客户端,而无需重新计算或读取该资源。与客户端缓存不同的是,服务器缓存是在服务器端维护的,客户端并不知道有缓存,也不能对缓存进行控制。常见的服务器缓存策略包括代理缓存和CDN缓存。

使用HTTP缓存可以显著提高Web应用程序的性能和响应速度,减少带宽使用和网络延迟。但是,如果缓存策略过于强大或不适当,可能会导致更新后的内容无法及时展现,从而影响用户体验。因此,在实际应用中,需要根据自己的业务需求进行缓存策略的设计和配置。

浏览器缓存

浏览器缓存是指客户端浏览器将最近请求的资源保存在缓存中,以便在下一次需要访问该资源时可以直接从缓存中获取,而不必重新从服务器下载

浏览器缓存可以加快资源的加载速度,减少请求次数和网络流量,并且可以减轻服务器的负担,降低响应时间。但是,如果缓存策略不当,可能会导致更新后的内容无法及时展现或者存在安全隐患。

浏览器缓存主要分为两种类型:强缓存和协商缓存。

  1. 强缓存

强缓存使用Expires或Cache-Control来指定过期时间,浏览器在缓存过期之前,不会发送请求到服务器,直接从本地缓存中获取资源。指定缓存的方式如下:

  • Expires:设置一个固定的过期时间。
  • Cache-Control:设置max-age指令,表示资源可以缓存的最大秒数。
  1. 协商缓存

协商缓存使用Last-Modified和ETag来验证资源是否变化,如果资源未变化,服务器会向浏览器返回304 Not Modified,浏览器根据该响应从本地缓存中获取资源。指定协商缓存的方式如下:

  • Last-Modified:指定资源的最后修改时间。
  • ETag:指定资源的实例标识符。

需要注意的是,浏览器缓存只对静态资源有效,对于动态页面或者需要频繁更新的内容,不适合使用缓存。此外,在实际应用中,需要权衡缓存带来的性能优势和更新与安全的需求,尽量采用合理的缓存策略,以满足不同的业务需求。

服务器端缓存

服务器端缓存是指服务器在响应请求时将该资源缓存下来,并在后续请求中将该资源直接返回给客户端,而无需重新计算或读取该资源

服务器端缓存可以显著提高Web应用程序的性能和响应速度,减少服务器的负载,尤其是对于频繁访问和少变化的数据,可以提高应用的并发处理能力。常见的服务器端缓存策略包括代理缓存和CDN缓存。

  1. 代理缓存

代理缓存是指位于客户端和服务器之间的代理服务器,在处理请求时将缓存的数据返回给客户端,减少服务器的负载和延迟时间,提高响应速度。

代理缓存可以根据资源的类型、大小、访问频率等信息来决定是否缓存该资源,并设置相应的缓存策略,例如缓存时间、缓存容量、缓存淘汰机制等。常见的代理缓存服务器包括Nginx、Squid等。

  1. CDN缓存

CDN缓存是指使用分布式的全球性的网络来缓存相同的内容,可以将内容缓存到离用户最近的服务器上,从而降低网络延迟和流量,提高请求的响应速度。

CDN缓存可以根据资源的类型、大小、访问热度等信息来决定是否缓存该资源,并设置相应的缓存策略,例如缓存时间、缓存容量、缓存淘汰机制等。常见的CDN服务提供商包括阿里云CDN、腾讯云CDN、网宿CDN等。

需要注意的是,服务器端缓存需要根据不同的业务需求来设置不同的缓存策略,以满足资源的更新和安全的需求。同时,缓存过期时间和淘汰机制等因素也需在实际应用中进行不断调整和优化。

6. HTTPS

SSL/TLS协议

SSL(Secure Sockets Layer)TLS(Transport Layer Security)协议是用于Web服务器和浏览器之间进行安全数据传输的协议,用于保证网络通信的安全性和可靠性

SSL协议是由Netscape公司发明,现在已经逐渐被TLS协议取代,它使用公共密钥和私有密钥来加密网络通信过程中的数据。TLS协议是SSL协议的继承者,它和SSL基本相同,但还提供了其他加密机制和密码算法。

SSL/TLS协议的工作原理如下:

  1. 客户端向服务器发送SSL/TLS连接请求。
  2. 服务器向客户端发送证书,证书中包含了对应网站的公钥和证书的签发单位和有效期等信息。
  3. 客户端验证服务器证书是否合法,如果证书被正确签发,且证书没有过期,则客户端使用证书中的公钥来加密一个随机生成的密钥,并将加密后的密钥发送给服务器。
  4. 服务器使用自己的私钥来解密客户端发来的密钥,然后使用该密钥来加密和解密客户端和服务器之间的数据。
  5. 数据加密后,经过通信双方协商,确定使用的加密算法与密钥长度,并在SSL握手过程结束后进行使用。

SSL/TLS协议可以保护用户数据,防止数据在网络中被窃取和篡改,使得数据传输更加安全和可靠。常见的采用SSL/TLS协议的Web服务包括HTTPS、SMTPS、IPSec等。

HTTPS的握手过程

HTTPS(Hyper Text Transfer Protocol Secure)是一种安全的Web通信协议,它采用了SSL(Secure Socket Layer)或TLS(Transport Layer Security)协议进行加密和认证。HTTPS通信的握手过程一般分为以下步骤:

  1. 客户端向服务器发送一个HTTPS请求。
  2. 服务器返回一个数字证书
  3. 客户端使用CA根证书验证服务器的数字证书有效性。如果证书有效,则继续执行下一步;否则,连接将被中断。
  4. 客户端生成一个随机的对称加密密钥(称为会话密钥)。
  5. 客户端使用服务器的公钥加密这个随机密钥,并发送给服务器。
  6. 服务器使用自己的私钥解密客户端发送的随机密钥。
  7. 服务器和客户端使用这个随机密钥进行对称加密通信,确保通信内容的机密性和完整性。

这些步骤都是在握手期间完成的。一旦通过握手,客户端和服务器之间的通信就被加密了,确保了数据的安全性和私密性。

HTTPS的证书认证

HTTPS的证书认证过程是使用数字证书来验证服务器的身份,以确保通信的安全性和正确性。具体过程如下:

1.服务器获得证书:服务器需要从证书认证机构(CA)申请数字证书。该证书中包含服务器公钥、服务器信息及证书颁发机构等信息,并由证书颁发机构数字签名验证。

2.浏览器获得证书:客户端(通常指浏览器)收到服务器的证书后,会从自己的证书库中查找是否存在该证书的颁发机构和有效期信息等。如果证书有效,则继续执行下一步。

3.浏览器验证证书:浏览器会验证证书颁发机构和证书的有效期等信息,判断是否能够可信地认证服务器的身份。如果证书没有过期并且已被受信任的CA机构签名,则浏览器会接受该证书,继续执行下一步;否则,会弹出警告提示。

4.浏览器生成密钥:浏览器生成一个临时的对称密钥,并使用服务器的公钥加密该密钥。

5.服务器验证密钥:服务器使用自己的私钥解密客户端发送的密钥,以确保通信双方都能使用该密钥进行加密和解密通信。

6.服务器确认身份:一旦服务器验证通过,服务器发送一个数字签名,确认自己的身份。

7.加密通信:互相验证通过后,浏览器和服务器之间的通信将使用该对称密钥进行加密,实现通信的保密性和安全性。

这就是HTTPS证书认证的过程。在整个过程中,数字证书(也称为SSL/TLS证书)扮演了至关重要的角色,确保HTTPS连接的安全性和准确性。

7. Web安全

XSS攻击

XSS(Cross-Site Scripting)攻击指的是攻击者利用Web应用程序中存在的漏洞,向网站中插入恶意代码,使用户在访问时受到攻击。XSS攻击主要分为反射型、存储型和DOM型三种类型。

  1. 反射型XSS:攻击者通过构造欺骗性的URL,将恶意脚本注入到网页中,毒害用户。在用户点击URL时,恶意脚本会被执行,攻击者便可以窃取用户登录、cookie等敏感信息。
  2. 存储型XSS:攻击者通过漏洞将恶意脚本存储到数据库中,当用户访问包含恶意脚本的页面时,攻击者便可以窃取用户的敏感信息。
  3. DOM型XSS:攻击者利用浏览器的DOM解析机制,将恶意脚本注入到网页中,攻击者可以通过截获用户的表单提交数据或用户操作等方式来进行攻击。

XSS攻击危害巨大,可能导致用户个人信息和敏感数据被窃取,甚至造成恶意程序的传播。

预防XSS攻击的方法包括用户端过滤、服务端过滤和安全的编程措施

用户可以通过使用具有XSS Filter功能的浏览器扩展程序、保持VPS升级、不轻易输入个人信息等方式自我防范。服务端开发人员可以对用户提交的信息进行过滤和转义、采用HTTPS等方式提高攻击难度。

CSRF攻击

CSRF(Cross-Site Request Forgery)攻击指的是通过利用用户在当前认证网站中的身份来进行非法操作。攻击者通过诱导用户点击恶意链接或访问特定网站,向目标网站提交恶意请求,从而利用用户在目标网站中的身份发送恶意请求。

一般来说,攻击者会伪造一个提交请求的页面,在该页面中包含目标网站的某个接口,然后欺骗用户执行该页面中的提交操作,将请求发送到目标网站,从而实施攻击。攻击者可以通过此方式进行一些危害性较大的操作,如代表用户发送电子邮件、发表评论、查询用户密码等。

为有效地防范CSRF攻击,可以采用以下措施:

  1. 使用token验证:为每个请求生成唯一的token标识,将token隐藏在用户提交的表单或链接中,当请求到达服务端时,服务端可以验证后进行处理。
  2. 验证HTTP Referer:检查来自客户端请求的HTTP Referer是否来自同一域名的请求,如果不是,则有可能是CSRF攻击,服务端可以返回错误码或报错信息。
  3. 增加验证码:对于某些敏感操作,如修改用户密码、删除评论等,需要在操作前增加验证码,确保操作是由人类而非机器完成的。
  4. 合理使用HTTP-only cookie和SameSite属性:使用HTTP-only cookie避免JavaScript窃取cookie,使用SameSite属性设置cookie的访问限制。

总之,防范CSRF攻击应该从增强系统的安全性考虑实现,包括对代码的审计、加强身份认证和授权、限制用户对敏感操作的访问等措施。

SQL注入

SQL注入攻击是一种基于Web应用程序的安全漏洞,攻击者利用这些漏洞来非法地操纵目标应用程序的数据库。SQL注入是指攻击者通过Web应用程序直接向后台数据库提交恶意SQL语句,从而使攻击者能够访问、篡改、删除、添加或导出数据。

SQL注入攻击主要分为以下两类:

  1. 基于错误的注入攻击:攻击者通过注入恶意SQL语句,产生数据库错误信息。通过错误信息,攻击者可以推断出数据库的种类,数据结构和表名称等信息。
  2. 基于盲点的注入攻击:攻击者通过注入恶意SQL语句,不会直接得到错误信息,但可以通过注入的方式判断出某些信息,例如判断数据库是否存在某些表和字段,判断敏感信息是否符合某种格式等。

为了防范SQL注入攻击,可以采取以下方法:

  1. 参数化查询:强烈建议使用参数化查询,这是防范SQL注入攻击最有效的方法之一。参数化查询可以预编译SQL语句并绑定参数,避免SQL注入攻击中恶意代码的注入。
  2. 输入过滤:使用正则表达式验证用户的输入是否符合预期格式,禁止用户输入特殊字符等。
  3. 使用prepared statements:使用prepared statements代替直接拼接SQL语句。prepared statements使用占位符代替SQL语句中的实际参数,从而防止注入攻击。
  4. 最小化数据库特权:将数据库用户的权限限制在应用程序所需的最低级别,避免攻击者通过获取高级别的权限来访问数据库。

综上所述,要防范SQL注入攻击,需要采用多种手段结合使用,例如参数化查询、输入过滤、prepared statements以及限制数据库用户的权限等。


【利用AI让知识体系化】深入浅出HTTP(近2w字)(三)https://developer.aliyun.com/article/1426050

相关实践学习
Serverless极速搭建Hexo博客
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
相关文章
|
5月前
|
缓存 算法 网络协议
(建议精读)HTTP灵魂之问,巩固你的 HTTP 知识体系
(建议精读)HTTP灵魂之问,巩固你的 HTTP 知识体系
171 0
|
5月前
|
设计模式 人工智能 自然语言处理
【利用AI让知识体系化】简要了解面向对象编程设计(二)
【利用AI让知识体系化】简要了解面向对象编程设计
|
5月前
|
人工智能 网络协议 安全
【利用AI让知识体系化】简要了解网络七层协议(二)
【利用AI让知识体系化】简要了解网络七层协议
|
5月前
|
人工智能 网络协议 数据安全/隐私保护
【利用AI让知识体系化】简要了解网络七层协议(一)
【利用AI让知识体系化】简要了解网络七层协议
|
5月前
|
设计模式 人工智能 关系型数据库
【利用AI让知识体系化】简要了解面向对象编程设计(一)
【利用AI让知识体系化】简要了解面向对象编程设计
|
12天前
|
缓存 安全 JavaScript
「offer来了」浏览器原理被问懵?5大知识板块巩固你的http知识体系(3.6w字)
该文章系统地整理了前端面试中有关浏览器原理的核心知识点,涵盖HTTP协议、浏览器缓存机制、请求过程及响应状态码等方面,并深入探讨了浏览器是如何解析与渲染页面的完整流程。
「offer来了」浏览器原理被问懵?5大知识板块巩固你的http知识体系(3.6w字)
|
3月前
|
人工智能
AI绘画,Stable Diffusion如何使用中文简体包,黑色页面切换参数http://127.0.0.1:7860/?__theme=dark 两个__,中文包下载和安装
AI绘画,Stable Diffusion如何使用中文简体包,黑色页面切换参数http://127.0.0.1:7860/?__theme=dark 两个__,中文包下载和安装
|
5月前
|
安全 前端开发 JavaScript
【利用AI让知识体系化】前端安全攻防知识点(二)
【利用AI让知识体系化】前端安全攻防知识点
|
5月前
|
存储 前端开发 安全
【利用AI让知识体系化】前端安全攻防知识点(一)
【利用AI让知识体系化】前端安全攻防知识点
|
5月前
|
人工智能 移动开发 前端开发
【利用AI让知识体系化】Webpack 相关配置技巧(三)
【利用AI让知识体系化】Webpack 相关配置技巧

热门文章

最新文章