系统设计——系统安全

HTTPS 是如何工作的?

安全超文本传输​​协议(HTTPS)是超文本传输​​协议(HTTP)的扩展。HTTPS 使用传输层安全性(TLS)传输加密数据。如果数据在网上被劫持,劫持者得到的只是二进制代码。

数据是如何加密和解密的?

步骤 1 - 客户端(浏览器)和服务器建立 TCP 连接。

第 2 步 - 客户端向服务器发送“客户端问候”。该消息包含一组必要的加密算法(密码套件)及其可以支持的最新 TLS 版本。服务器响应“server hello”,以便浏览器知道它是否可以支持算法和 TLS 版本。

然后服务器将 SSL 证书发送给客户端。证书包含公钥、主机名、到期日期等。客户端验证证书。

步骤 3 - 验证 SSL 证书后,客户端生成会话密钥并使用公钥对其进行加密。服务器接收加密的会话密钥并用私钥解密。

步骤 4 - 现在客户端和服务器都持有相同的会话密钥(对称加密),加密的数据将在安全的双向通道中传输。

为什么HTTPS在数据传输过程中会切换为对称加密?主要原因有两个:

  1. 安全性:非对称加密只有一种方式。这意味着如果服务器尝试将加密数据发送回客户端,任何人都可以使用公钥解密数据。

  2. 服务器资源:非对称加密增加了相当多的数学开销。它不适合长时间会话中的数据传输。

Oauth 2.0 用简单的术语解释。

OAuth 2.0 是一个强大且安全的框架,允许不同的应用程序代表用户安全地相互交互,而无需共享敏感凭据。

OAuth 涉及的实体是用户、服务器和身份提供者 (IDP)。

OAuth 令牌可以做什么?

当您使用 OAuth 时,您将获得代表您的身份和权限的 OAuth 令牌。这个令牌可以做一些重要的事情:

单点登录 (SSO):使用 OAuth 令牌,您只需一次登录即可登录多个服务或应用程序,让生活变得更轻松、更安全。

跨系统授权:OAuth 令牌允许您跨各个系统共享您的授权或访问权限,因此您不必在各处单独登录。

访问用户配置文件:具有 OAuth 令牌的应用程序可以访问您允许的用户配置文件的某些部分,但它们不会看到所有内容。

请记住,OAuth 2.0 的目的是确保您和您的数据安全,同时让您在不同的应用程序和服务中获得无缝、无忧的在线体验。

四种主要的身份验证机制形式

 

  1. SSH 密钥:

    加密密钥用于安全地访问远程系统和服务器

  2. OAuth 令牌:

    提供对第三方应用程序上的用户数据的有限访问的令牌

  3. SSL 证书:

    数字证书确保服务器和客户端之间的安全和加密通信

  4. 证书:

    用户身份验证信息用于验证和授予对各种系统和服务的访问权限

会话、cookie、JWT、令牌、SSO 和 OAuth 2.0 - 它们是什么?

这些术语都与用户身份管理相关。当您登录网站时,您声明您是谁(身份)。您的身份已得到验证(身份验证),并且您被授予必要的权限(授权)。过去已经提出了许多解决方案,并且这个列表还在不断增加。

从简单到复杂,以下是我对用户身份管理的理解:

  • WWW-Authenticate 是最基本的方法。浏览器会要求您输入用户名和密码。由于无法控制登录生命周期,目前很少使用。

  • 对登录生命周期更精细的控制是session-cookie。服务器维护会话存储,浏览器保存会话的ID。 Cookie 通常仅适用于浏览器,对移动应用程序不友好。

  • 为了解决兼容性问题,可以使用token。客户端将令牌发送到服务器,服务器验证令牌。缺点是需要对token进行加密和解密,这可能比较耗时。

  • JWT 是表示令牌的标准方式。该信息可以被验证和信任,因为它是经过数字签名的。由于JWT包含签名,因此不需要在服务器端保存会话信息。

  • 通过使用 SSO(单点登录),您只需登录一次即可登录多个网站。它使用CAS(中央身份验证服务)来维护跨站点信息。

  • 通过使用 OAuth 2.0,您可以授权一个网站访问您在另一网站上的信息。

如何将密码安全地存储在数据库中以及如何验证密码?


 

不该做的事情

  • 以纯文本形式存储密码不是一个好主意,因为具有内部访问权限的任何人都可以看到它们。

  • 直接存储密码哈希值是不够的,因为它会被修剪以防止预计算攻击,例如彩虹表。

  • 为了减轻预计算攻击,我们对密码加盐。

什么是盐?

根据 OWASP 指南,“盐是一个独特的、随机生成的字符串,作为哈希过程的一部分添加到每个密码中”。

如何存储密码和盐?

  1. 每个密码的哈希结果都是唯一的。
  2. 密码可以使用以下格式存储在数据库中:hash(password + salt)。

如何验证密码?

要验证密码,可以经过以下过程:

  1. 客户端输入密码。
  2. 系统从数据库中获取相应的salt。
  3. 系统将盐附加到密码并对其进行哈希处理。我们将哈希值称为 H1。
  4. 系统比较H1和H2,其中H2是存储在数据库中的哈希值。如果相同,则密码有效。

向 10 岁的孩子解释 JSON Web Token (JWT)

 

假设您有一个名为 JWT 的特殊盒子。在这个盒子里,有三个部分:标头、有效负载和签名。

标题就像盒子外面的标签。它告诉我们它是什么类型的盒子以及它是如何固定的。它通常以称为 JSON 的格式编写,这只是使用大括号 { } 和冒号 : 组织信息的一种方式。

有效负载就像您要发送的实际消息或信息。它可以是您的姓名、年龄或您想要共享的任何其他数据。它也是以 JSON 格式编写的,因此很容易理解和使用。 现在,签名是 JWT 安全的保证。它就像一个只有发送者知道如何创建的特殊印章。签名是使用密码创建的,有点像密码。此签名确保任何人都无法在发送者不知情的情况下篡改 JWT 的内容。

当您想要将 JWT 发送到服务器时,您可以将标头、有效负载和签名放入框中。然后您将其发送到服务器。服务器可以轻松读取标头和有效负载,以了解您是谁以及您想要做什么。

Google 身份验证器(或其他类型的二因素身份验证器)如何工作?

当启用两步身份验证时,Google 身份验证器通常用于登录我们的帐户。它如何保障安全?

Google Authenticator 是一种基于软件的身份验证器,可实现两步验证服务。下图提供了详细信息。

涉及两个阶段:

  • 第 1 阶段 - 用户启用 Google 两步验证。
  • 第 2 阶段 - 用户使用身份验证器进行登录等。

让我们看看这些阶段。

阶段1

步骤 1 和 2:Bob 打开网页以启用两步验证。前端请求密钥。身份验证服务为 Bob 生成密钥并将其存储在数据库中。

步骤3:认证服务向前端返回URI。 URI 由密钥颁发者、用户名和密钥组成。 URI以二维码的形式显示在网页上。

步骤 4:Bob 然后使用 Google Authenticator 扫描生成的二维码。密钥存储在验证器中。

第 2 阶段 第 1 步和第 2 步:Bob 想要登录具有 Google 两步验证的网站。为此,他需要密码。每 30 秒,Google 身份验证器就会使用 TOTP(基于时间的一次性密码)算法生成一个 6 位数字的密码。 Bob 使用密码进入网站。

步骤3和4:前端将Bob输入的密码发送到后端进行身份验证。身份验证服务从数据库中读取密钥,并使用与客户端相同的 TOTP 算法生成 6 位密码。

步骤5:认证服务比较客户端和服务器生成的两个密码,并将比较结果返回给前端。仅当两个密码匹配时,Bob 才能继续登录过程。

这种认证机制安全吗?

  • 秘钥可以被其他人获取吗?

    我们需要确保使用 HTTPS 传输密钥。验证器客户端和数据库存储密钥,我们需要确保密钥是加密的。

  • 6位密码会被黑客猜到吗?

    不会。密码有 6 位数字,因此生成的密码有 100 万种可能的组合。另外,密码每 30 秒更改一次。如果黑客想在30秒内猜出密码,则需要每秒输入30000个组合。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/230694.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TaxtArea中内嵌一张放松图片,该图片实现属性悬浮放大功能

TaxtArea中内嵌一张发送图片&#xff0c;该图片实现属性悬浮放大功能&#xff0c;离开还原效果&#xff0c;点击发送按钮后&#xff0c;发送图片变为loading&#xff0c; <div class"textarea-wrapper" ><a-textarearef"textArea"v-model.trim&q…

web应用开发技术的一些概念

一、Servlet 1.Servlet的工作过程&#xff1a; Servelt的工作流程示意图 &#xff08;1&#xff09;客户端发起一个Http请求到服务器&#xff0c;请求特定的资源或者是要执行特定的操作 &#xff08;2&#xff09;服务器在接收到请求后&#xff0c;根据请求相应的URL将请求分发…

21、同济、微软亚研院、西安电子科技大提出HPT:层次化提示调优,独属于提示学习的[安妮海瑟薇]

前言&#xff1a; 本论文由同济大学、微软亚洲研究院、西安电子科技大学&#xff0c;于2023年12月11日中了AAAI2024 论文&#xff1a; 《Learning Hierarchical Prompt with Structured Linguistic Knowledge for Vision-Language Models》 地址&#xff1a; [2312.06323]…

C++泛型超详细合集-泛化的编程方式-程序员编写一个函数/类的代码让编译器去填补出不同的函数实现-供大家学习研究参考

以Add函数为例&#xff0c;在函数模板存在的同时&#xff0c;我们还可以单独写一个int类型的add函数。这都归功于函数重载的存在。 同时&#xff0c;我们还可以使用<int>来指定函数模板重载为已存在的Add函数。因为本质上这两个函数是不同的&#xff0c;并不会冲突。 下…

猫粮哪个牌子好又安全?好又安全的主食冻干猫粮牌子推荐

现在越来越多的铲屎官关注猫咪的食品选择&#xff0c;而冻干猫粮一直是热门话题。其中主食冻干的肉含量很高&#xff0c;富含猫咪成长所需的蛋白质、维生素等营养物质。而且冻干工艺还保留了食材的原始风味&#xff0c;复水后可以恢复鲜肉的口感&#xff0c;猫咪很喜欢吃&#…

人工智能Keras图像分类器(CNN卷积神经网络的图片识别篇)

上期文章我们分享了人工智能Keras图像分类器(CNN卷积神经网络的图片识别的训练模型),本期我们使用预训练模型对图片进行识别:Keras CNN卷积神经网络模型训练 导入第三方库 from keras.preprocessing.image import img_to_array from keras.models import load_model impor…

关于“Python”的核心知识点整理大全27

目录 10.5 小结 第&#xff11;1 章 测试代码 11.1 测试函数 name_function.py 函数get_formatted_name()将名和姓合并成姓名&#xff0c;在名和姓之间加上一个空格&#xff0c;并将它们的 首字母都大写&#xff0c;再返回结果。为核实get_formatted_name()像期望的那样工…

arcgis javascript api4.x加载天地图cgs2000坐标系

需求&#xff1a;arcgis javascript api4.x加载天地图cgs2000坐标系 效果&#xff1a; 示例代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"wid…

Python爬虫-解决使用requests,Pyppeteer,Selenium遇到网站显示“您的连接不是私密连接”的问题|疑难杂症解决(2)

前言 本文是该专栏的第13篇,后面会持续分享python爬虫案例干货,记得关注。 相信很多同学在处理爬虫项目的时候,会遇到一些网站出现如下图所示的情况: 就是当你不论是使用requests进行协议请求,还是使用自动化框架pyppeteer或者selenium都会出现上图中的情况。这相信会或多…

年度大盘点:AIGC、AGI、GhatGPT震撼登场!揭秘人工智能大模型的奥秘与必读书单

这里写目录标题 前言01 《ChatGPT 驱动软件开发》02 《ChatGPT原理与实战》03 《神经网络与深度学习》04 《AIGC重塑教育》05 《通用人工智能》 前言 在2023年&#xff0c;人工智能领域经历了一场前所未有的大爆发&#xff0c;特别是在语言模型领域。新的概念和英文缩写如AIGC、…

Ngnix之反向代理、负载均衡、动静分离

目录 1. Ngnix 1.1 Linux系统Ngnix下载安装 1.2 反向代理 正向代理&#xff08;Forward Proxy&#xff09;&#xff1a; 反向代理&#xff08;Reverse Proxy&#xff09;&#xff1a; 1.3 负载均衡 1.4 动静分离 1. Ngnix Nginx是一个高性能的开源Web服务器&#xff0…

设备运维管理系统,设备列表管理,设备拓扑图关系图,告警日志运维

个人主页&#xff1a; 左本Web3D&#xff0c;更多案例预览请点击》 在线案例 个人简介&#xff1a;专注Web3D使用ThreeJS实现3D效果技巧和学习案例 &#x1f495; &#x1f495;积跬步以至千里&#xff0c;致敬每个爱学习的你。喜欢的话请三连&#xff0c;有问题请私信或者加微…

C# 图解教程 第5版 —— 第19章 枚举器和迭代器

文章目录 19.1 枚举器和可枚举类型19.2 IEnumerator 接口19.3 IEnumerable 接口19.4 泛型枚举接口19.5 迭代器19.5.1 迭代器块19.5.2 使用迭代器来创建枚举器19.5.3 使用迭代器来创建可枚举类型 19.6 常见迭代器模式19.7 产生多个可枚举类型19.8 将迭代器作为属性19.9 迭代器的…

【vSphere | VM】虚拟机自定义规范Ⅳ —— 使用虚拟机自定义规范创建 Linux 和 Windows VM

目录 5. 使用虚拟机自定义规范创建VM5.1 Linux 虚拟机示例Rocky Linux 9.2&#xff08;1&#xff09;克隆虚拟机&#xff08;2&#xff09;模板部署虚拟机 5.2 Windows 虚拟机示例Windows 10&#xff08;1&#xff09;克隆虚拟机&#xff08;2&#xff09;模板部署 Windows 10 …

恒创科技:云服务器怎么买才便宜有优惠

随着云计算技术的不断发展&#xff0c;云服务器已经成为企业和个人用户的重要选择。然而&#xff0c;在购买云服务器时&#xff0c;价格和优惠成为了很多用户关注的焦点。那么&#xff0c;如何购买云服务器才能获得更优惠的价格呢&#xff1f;下面就为大家介绍一些购买云服务器…

windows10-EMQX与MQTTX的安装及配置使用教程

windows10-EMQX安装及配置使用教程 一、下载安装1.1 下载1.2 安装1.3 设置开机自启动 二、连接MQTT2.1 MQTT下载安装2.1.1 下载2.1.2 安装及配置 三、EMQX常用命令 本文介绍的是在windows10系统下的emqx的安装、配置及使用教程。 一、下载安装 1.1 下载 下载链接&#xff1a…

【漏洞复现】金和OA任意文件读取漏洞

Nx01 产品简介 金和数字化智能办公平台&#xff08;简称JC6&#xff09;是一款结合了人工智能技术的数字化办公平台&#xff0c;为企业带来了智能化的办公体验和全面的数字化转型支持。同时符合国家信创认证标准&#xff0c;支持组织数字化转型&#xff0c;实现业务流程的数字化…

订单未支付30分钟自动取消是如何实现的?

1.借助redis的过期特性 下单时&#xff0c;订单状态是待支付。将订单编号作为key&#xff0c;下单的时间戳作为value&#xff0c;设置过期时间是30分钟。服务器监听redis的key过期事件&#xff0c;如果是订单过期&#xff08;还会有其他key过期&#xff09;&#xff0c;则修改…

AI伴侣利用亚马逊云科技机器学习与人工智能服务,加速AI类产品的开发过程

2020年《纽约时报》调查显示&#xff0c;全球有超过1000万人以AI恋人作为伴侣&#xff1b;后浪发布的《2022年轻人未来恋爱白皮书》报告中显示&#xff0c;有近4成年轻人接受与虚拟人恋爱。随着人工智能技术的突破&#xff0c;越来越多年轻群体在AI伴侣软件亲手打造自己的理想恋…

API调试神器!免费IDEA插件推荐

IDEA是一款功能强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;它可以帮助开发人员更加高效地编写、调试和部署软件应用程序。我们在编写完接口代码后需要进行接口调试等操作&#xff0c;一般需要打开额外的调试工具。 今天给大家介绍一款IDEA插件&#xff1a;Api…