当前位置: 首页 > article >正文

面试之《前端信息加密》

前端代码是直接暴漏给用户的,请求的接口也可以通过控制台network看到参数,这是不够安全的,如果遇到坏人想要破坏,可以直接修改参数,或者频繁访问导致系统崩溃,或数据毁坏。

所以信息加密在某些场合就变得非常重要,下面介绍一些常见场景及应对措施。

问题1:前端调用接口时如何保证数据的安全性?

在前端调用接口时,保证数据安全性是至关重要的,可从以下多个方面着手:

1. 传输安全

  • 使用HTTPS协议:HTTPS是HTTP的安全版本,它通过SSL/TLS协议对数据进行加密传输,防止数据在传输过程中被窃取或篡改。使用HTTPS协议时,服务器会有SSL证书,浏览器会验证证书的有效性,确保通信双方的身份合法。
  • 数据加密:除了HTTPS本身的加密,还可以对敏感数据进行额外的加密处理。例如使用对称加密算法(如AES)或非对称加密算法(如RSA)对数据进行加密后再传输。在前端加密,后端解密,确保数据在传输过程中的保密性。

2. 身份验证

  • 用户名和密码:最基本的身份验证方式,用户输入用户名和密码,前端将其发送到后端进行验证。为了安全起见,密码应该进行哈希处理(如使用bcrypt),而不是明文传输。
  • 令牌(Token)验证
    • JSON Web Token(JWT):是一种常用的身份验证方式。服务器在用户登录成功后生成一个JWT,包含用户的身份信息和签名,前端将其存储在本地(如localStorage或cookie),每次请求接口时将JWT发送给服务器,服务器验证JWT的有效性和签名,确认用户身份。
    • OAuth:用于第三方登录和授权。用户可以使用第三方平台(如微信、QQ)的账号登录应用,前端引导用户到第三方平台进行授权,获取授权码后交换访问令牌,使用访问令牌调用接口。

3. 接口访问控制

  • IP白名单:服务器可以设置IP白名单,只允许特定IP地址的请求访问接口,防止非法IP的访问。
  • 限流和限速:对接口的访问进行限流和限速,防止恶意用户通过大量请求来攻击接口。例如,限制每个用户在一定时间内的请求次数。

4. 数据完整性验证

  • 签名验证:前端在发送数据时,对数据进行签名,后端在接收到数据后验证签名的有效性。例如,使用HMAC算法对数据进行签名,确保数据在传输过程中没有被篡改。

5. 安全的存储和管理

  • 本地存储安全:如果需要在本地存储敏感数据(如令牌),应该使用安全的存储方式。例如,使用localStoragesessionStorage时,对数据进行加密存储,并且避免在浏览器的开发者工具中暴露敏感信息。
  • 密钥管理:如果使用加密算法,应该妥善管理加密密钥,避免密钥泄露。可以将密钥存储在安全的地方,如环境变量中,并且定期更新密钥。

问题2:密钥存在前端本地,会有暴露风险,该如何处理?

避免在前端直接存储敏感密钥

  • 使用令牌机制:不要将加密密钥直接存于前端,而是让服务器在用户认证后生成令牌(如 JWT)。前端存储和使用该令牌来调用接口,服务器依据令牌验证用户身份并处理请求。令牌有过期时间,即便被窃取,其可使用的时间也有限。
  • 动态生成密钥:前端在需要加密数据时,向服务器请求临时密钥。服务器基于用户的身份和权限生成密钥并返回给前端,该密钥仅在特定操作或时间段内有效。

密钥的安全传输

  • HTTPS 协议:在前端与服务器之间传输密钥时,务必使用 HTTPS 协议。它能对数据进行加密,防止中间人攻击,确保密钥在传输过程中的安全性。
  • 密钥协商:采用密钥协商算法(如 Diffie - Hellman 算法),在前端和服务器之间安全地交换密钥。这样,双方可以在不直接传输密钥的情况下生成相同的会话密钥。

前端代码的安全保护

  • 代码混淆和压缩:对前端代码进行混淆和压缩处理,使代码难以被逆向工程分析。这样可以增加攻击者理解代码逻辑和获取密钥的难度。
  • 防止代码注入:确保前端代码没有代码注入漏洞,避免攻击者通过注入恶意脚本获取存储在前端的密钥。对用户输入进行严格的验证和过滤,防止 XSS 攻击。

定期更新和撤销密钥

  • 密钥轮换:定期更新密钥,减少密钥被长期使用而泄露的风险。服务器可以在一定时间间隔后生成新的密钥,并通知前端更新。
  • 撤销机制:当发现密钥可能已经泄露时,服务器应具备撤销该密钥的能力,使该密钥不再被认可和使用。同时,及时通知前端获取新的密钥。

问题3:介绍一下密钥协商

密钥协商算法是一种让通信双方在不安全的通信信道上安全地协商出一个共享密钥的算法。Diffie - Hellman(DH)算法是其中较为经典的一种。

定义与背景

Diffie - Hellman 算法由 Whitfield Diffie 和 Martin Hellman 在 1976 年提出,是最早的公钥密码算法之一。它的主要作用是使双方在没有预先共享秘密信息的情况下,通过公开信道安全地建立一个共享的密钥,这个密钥可用于后续的对称加密通信,保证数据在传输过程中的保密性。

工作原理

Diffie - Hellman 算法基于离散对数问题的数学难题,以下是其具体的工作步骤:

  1. 选择公共参数:通信双方(通常称为 Alice 和 Bob)首先协商选择两个公共参数:一个大素数 p p p 和该素数的一个原根 g g g。这两个参数是公开的,可以在不安全的信道上传输。
  2. 生成私有密钥:Alice 和 Bob 各自独立地选择一个随机的私有整数,分别记为 a a a b b b。这些私有密钥是保密的,不对外公开。
  3. 计算公开密钥
    • Alice 根据公式 A = g a m o d p A = g^a \bmod p A=gamodp 计算出自己的公开密钥 A A A
    • Bob 根据公式 B = g b m o d p B = g^b \bmod p B=gbmodp 计算出自己的公开密钥 B B B
    • 然后,Alice 和 Bob 通过公开信道交换他们的公开密钥 A A A B B B
  4. 计算共享密钥
    • Alice 使用接收到的 Bob 的公开密钥 B B B 和自己的私有密钥 a a a,根据公式 K = B a m o d p K = B^a \bmod p K=Bamodp 计算出共享密钥 K K K
    • Bob 使用接收到的 Alice 的公开密钥 A A A 和自己的私有密钥 b b b,根据公式 K = A b m o d p K = A^b \bmod p K=Abmodp 计算出共享密钥 K K K

由于 ( g b m o d p ) a m o d p = ( g a m o d p ) b m o d p = g a b m o d p (g^b \bmod p)^a \bmod p = (g^a \bmod p)^b \bmod p = g^{ab} \bmod p (gbmodp)amodp=(gamodp)bmodp=gabmodp,所以 Alice 和 Bob 最终计算出的共享密钥 K K K 是相同的。而攻击者即使截获了公开参数 p p p g g g 以及公开密钥 A A A B B B,由于离散对数问题的困难性,在合理的时间内也无法计算出私有密钥 a a a b b b,从而无法得到共享密钥 K K K

示例代码(Python 实现)

# 选择公共参数
p = 23  # 大素数
g = 5   # 原根# Alice 选择私有密钥
a = 6
# 计算公开密钥
A = pow(g, a, p)# Bob 选择私有密钥
b = 15
# 计算公开密钥
B = pow(g, b, p)# 交换公开密钥后,Alice 计算共享密钥
K_alice = pow(B, a, p)# Bob 计算共享密钥
K_bob = pow(A, b, p)print("Alice 计算的共享密钥:", K_alice)
print("Bob 计算的共享密钥:", K_bob)

优缺点

  • 优点
    • 安全性:基于离散对数问题的困难性,在合理的参数选择下,具有较高的安全性。
    • 无需预先共享密钥:通信双方可以在不安全的信道上安全地协商出共享密钥,无需事先共享秘密信息。
  • 缺点
    • 缺乏身份验证:Diffie - Hellman 算法本身不提供身份验证功能,容易受到中间人攻击。攻击者可以在通信双方之间拦截并篡改公开密钥的交换,从而建立与双方的独立通信,获取双方的通信内容。因此,通常需要结合其他身份验证机制(如数字签名)来增强安全性。
    • 计算开销:涉及到模幂运算,计算量相对较大,尤其是在使用大素数时,会对性能产生一定的影响。

应用场景

Diffie - Hellman 算法广泛应用于各种安全通信协议中,如 SSL/TLS 协议,用于在客户端和服务器之间安全地协商会话密钥,保证数据在传输过程中的保密性和完整性。

相关文章:

面试之《前端信息加密》

前端代码是直接暴漏给用户的,请求的接口也可以通过控制台network看到参数,这是不够安全的,如果遇到坏人想要破坏,可以直接修改参数,或者频繁访问导致系统崩溃,或数据毁坏。 所以信息加密在某些场合就变得非…...

CentOS 系统磁盘扩容并挂载到根目录(/)的详细步骤

在使用 CentOS 系统时,经常会遇到需要扩展磁盘空间的情况。例如,当虚拟机的磁盘空间不足时,可以通过增加磁盘容量并将其挂载到根目录(/)来解决。以下是一个完整的操作流程,详细介绍了如何将新增的 10G 磁盘…...

HTML应用指南:利用GET请求获取全国汉堡王门店位置信息

在当今快节奏的都市生活中,餐饮品牌的门店布局不仅反映了其市场策略,更折射出消费者对便捷、品质和品牌认同的追求。汉堡王(Burger King)作为全球知名的西式快餐品牌之一,在中国市场同样占据重要地位。自进入中国市场以…...

浅入浅出 GRPO in DeepSeekMath

GRPO in DeepSeekMath GRPO 通过在生成组内进行比较来直接评估模型生成的响应,以优化策略模型,而不是训练单独的价值模型,这种方法显著降低了计算成本。GRPO 可以应用于任何可以确定响应正确性的可验证任务。例如,在数学推理中&a…...

计算机网络起源

互联网的起源和发展是一个充满创新、突破和变革的历程,从20世纪60年代到1989年,这段时期为互联网的诞生和普及奠定了坚实的基础。让我们详细回顾这一段激动人心的历史。 计算机的发展与ARPANET的建立(20世纪60年代) 互联网的诞生…...

HTML 嵌入标签对比:小众(<embed>、<object>) 与 <iframe> 的优缺点及使用场景和方式

需求背景 在网页开发中&#xff0c;嵌入外部资源预览&#xff08;如视频、PDF、地图或其他网页&#xff09;是常见的需求。HTML 提供了多种标签来实现这一功能&#xff0c;其中 <embed>、<object> 和 <iframe> 是最常用的三种。本文将对比它们的优缺点&…...

[python] 作用域

Python中查找变量的顺序遵循LEGB规则(Local->Enclosing->Global->Built-in)。Python中的if/elif/else、for/while等代码块不会创建新的作用域&#xff0c;只有def、class、lambda才会改变作用域。这和C中不同&#xff0c;C中在{}代码块中创建的变量离开这个代码块后就…...

AICon 2024年全球人工智能与大模型开发与应用大会(脱敏)PPT汇总(36份).zip

AICon 2024年全球人工智能与大模型开发与应用大会&#xff08;脱敏&#xff09;PPT汇总&#xff08;36份&#xff09;.zip 1、面向开放域的大模型智能体.pdf 2、企业一站式 AI 智能体构建平台演进实践.pdf 3、PPIO 模型平台出海实战&#xff0c;跨地域业务扩展中的技术优化之道…...

51电子表

设计要求&#xff1a; 基本任务&#xff1a; 用单片机和数码管设计可调式电子钟&#xff0c;采用24小时制计时方式&#xff0c;要求能够稳定准确计时&#xff0c;并能调整时间。发光二极管每秒亮灭一次。电子钟显示格式为&#xff1a;时、分、秒各两位&#xff0c;中间有分隔…...

9-函数的定义及用法

一.前言 C 语⾔强调模块化编程&#xff0c;这⾥所说的模块就是函数&#xff0c;即把每⼀个独⽴的功能均抽象为⼀个函数来实现。从⼀定意义上讲&#xff0c;C 语⾔就是由⼀系列函数串组成的。 我们之前把所有代码都写在 main 函数中&#xff0c;这样虽然程序的功能正常实现&…...

高清视频会议系统BeeWorks Meet,支持私有化部署

在数字化办公时代&#xff0c;视频会议已成为企业协作的关键工具。然而&#xff0c;随着信息安全意识的不断提高&#xff0c;传统的公有云视频会议软件已难以满足企业对数据安全和隐私保护的严格要求。BeeWorks Meet凭借其独特的私有化部署模式、强大的功能集成以及对国产化的适…...

用HTML和CSS绘制佩奇:我不是佩奇

在这篇博客中&#xff0c;我将解析一个完全使用HTML和CSS绘制的佩奇(Pig)形象。这个项目展示了CSS的强大能力&#xff0c;仅用样式就能创造出复杂的图形&#xff0c;而不需要任何图片或JavaScript。 项目概述 这个名为"我不是佩奇"的项目是一个纯CSS绘制的卡通猪形象…...

彩讯携Rich AICloud与一体机智算解决方案亮相中国移动云智算大会

2025年4月10日&#xff0c;2025中国移动云智算大会在苏州盛大开幕&#xff0c;本次大会以“由云向智 共绘算网新生态”为主题&#xff0c;与会嘉宾围绕算力展开重点探讨。 大会现场特设区域展出各参会单位的最新算力成果&#xff0c;作为中国移动重要合作伙伴&#xff0c;彩讯…...

BERT - 直接调用transformers.BertModel, BertTokenizerAPI不进行任何微调

本节代码将使用 transformers 库加载预训练的BERT模型和分词器&#xff08;Tokenizer&#xff09;&#xff0c;并处理文本输入。 1. 加载预训练模型和分词器 from transformers import BertTokenizer, BertModelmodel_path "/Users/azen/Desktop/llm/models/bert-base-…...

安卓开发提示Android Gradle plugin错误

The project is using an incompatible version (AGP 8.9.1) of the Android Gradle plugin. Latest supported version is AGP 8.8.0-alpha05 See Android Studio & AGP compatibility options. 改模块级 build.gradle&#xff08;如果有独立配置&#xff09;&#xff1a;…...

声学测温度原理解释

已知声速&#xff0c;就可以得到温度。 不同温度下的胜诉不同。 25度的声速大约346m/s 绝对温度-273度 不同温度下的声速。 FPGA 通过测距雷达测温度&#xff0c;固定测量距离&#xff0c;或者可以测出当前距离。已知距离&#xff0c;然后雷达发出声波到接收到回波的时间&a…...

Cuto壁纸 2.6.9 | 解锁所有高清精选壁纸,无广告干扰

Cuto壁纸 App 提供丰富多样的壁纸选择&#xff0c;涵盖动物、风景、创意及游戏动漫等类型。支持分类查找与下载&#xff0c;用户可轻松将心仪壁纸设为手机背景&#xff0c;并享受软件内置的编辑功能调整尺寸。每天更新&#xff0c;确保用户总能找到新鲜、满意的壁纸。 大小&am…...

C语言 AI 通义灵码 VSCode插件安装与功能详解

在 C 语言开发领域&#xff0c;一款高效的编码助手能够显著提升开发效率和代码质量。 通义灵码&#xff0c;作为阿里云技术团队打造的智能编码助手&#xff0c;凭借其强大的功能&#xff0c;正逐渐成为 C 语言开发者的新宠。 本文将深入探讨通义灵码在 C 语言开发中的应用&am…...

二分查找5:852. 山脉数组的峰顶索引

链接&#xff1a;852. 山脉数组的峰顶索引 - 力扣&#xff08;LeetCode&#xff09; 题解&#xff1a; 事实证明&#xff0c;二分查找不局限于有序数组&#xff0c;非有序的数组也同样适用 二分查找主要思想在于二段性&#xff0c;即将数组分为两段。本体就可以将数组分为ar…...

1.2 测试设计阶段:打造高质量的测试用例

测试设计阶段&#xff1a;打造高质量的测试用例 摘要 本文详细介绍了软件测试流程中的测试设计阶段&#xff0c;包括测试用例设计、测试数据准备、测试环境搭建和测试方案设计等内容。通过本文&#xff0c;读者可以系统性地了解测试设计的方法和技巧&#xff0c;掌握如何高效…...

【模拟电路】稳压二极管/齐纳二极管

齐纳二极管也被称为稳压二极管,是一种特殊的二极管,其工作原理是利用PN结的反向击穿状态。在齐纳二极管中,当反向电压增加到一定程度,即达到齐纳二极管的击穿电压时,反向电流会急剧增加,但此时齐纳二极管的电压却基本保持不变。这种特性使得齐纳二极管可以作为稳压器或电…...

项目周期过长,如何拆分里程碑

应对项目周期过长&#xff0c;合理拆分里程碑需要做到&#xff1a;明确项目整体目标与阶段目标、合理进行任务细分与分组、设定阶段性里程碑节点、实施有效的进度跟踪与反馈机制、灵活进行里程碑调整。其中&#xff0c;明确项目整体目标与阶段目标尤为关键。这能够帮助团队在长…...

Java基础 - 泛型(常见用法)

文章目录 泛型类泛型方法泛型类派生子类示例 1&#xff1a;子类固定父类泛型类型&#xff08;StringBox 继承自 Box<String>&#xff09;示例 2&#xff1a;子类保留父类泛型类型&#xff08;AdvancedBox<T> 继承自 Box<T>)示例 3&#xff1a;添加子类自己的…...

蓝桥杯刷题总结 + 应赛技巧

当各位小伙伴们看到这篇文章的时候想必蓝桥杯也快开赛了&#xff0c;那么本篇文章博主就来总结一下一些蓝桥杯的应赛技巧&#xff0c;那么依旧先来走个流程 那么接下来我们分成几个板块进行总结 首先是一些基本语法 编程语言的基本语法 首先是数组&#xff0c;在存数据的时候…...

希哈表的学习

#include <stdio.h> #include <stdlib.h> #include "uthash.h"typedef struct {int id; // 学号&#xff0c;作为keychar name[20]; // 姓名&#xff0c;作为valueUT_hash_handle hh; // 必须有这个字段 } Student;Student* studen…...

Qt之OpenGL使用Qt封装好的着色器和编译器

代码 #include "sunopengl.h"sunOpengl::sunOpengl(QWidget *parent) {}unsigned int VBO,VAO; float vertices[]{0.5f,0.5f,0.0f,0.5f,-0.5f,0.0f,-0.5f,-0.5f,0.0f,-0.5f,0.5f,0.0f };unsigned int indices[]{0,1,3,1,2,3, }; unsigned int EBO; sunOpengl::~sunO…...

备赛蓝桥杯-Python-考前突击

额&#xff0c;&#xff0c;离蓝桥杯开赛还有十个小时&#xff0c;最近因为考研复习节奏的问题&#xff0c;把蓝桥杯的优先级后置了&#xff0c;突然才想起来还有一个蓝桥杯呢。。 到目前为止python基本语法熟练了&#xff0c;再补充一些常用函数供明天考前再背背&#xff0c;算…...

零基础开始学习鸿蒙开发-智能家居APP离线版介绍

目录 1.我的小屋 2.查找设备 3.个人主页 前言 好久不发博文了&#xff0c;最近都忙于面试&#xff0c;忙于找工作&#xff0c;这段时间终于找到工作了。我对鸿蒙开发的激情依然没有减退&#xff0c;前几天做了一个鸿蒙的APP&#xff0c;现在给大家分享一下&#xff01; 具体…...

不再卡顿!如何根据使用需求挑选合适的电脑内存?

电脑运行内存多大合适&#xff1f;在选购或升级电脑时&#xff0c;除了关注处理器的速度、硬盘的容量之外&#xff0c;内存&#xff08;RAM&#xff09;的大小也是决定电脑性能的一个重要因素。但究竟电脑运行内存多大才合适呢&#xff1f;这篇文章将帮助你理解不同使用场景下适…...

华为云 云化数据中心 CloudDC | 架构分析与应用场景

云化数据中心 CloudDC 云化数据中心 (CloudDC)是一种满足传统DC客户云化转型诉求的产品&#xff0c;支持将客户持有服务器设备部署至华为云机房&#xff0c;通过外溢华为云的基础设施管理、云化网络、裸机纳管、确定性运维等能力&#xff0c;帮助客户DC快速云化转型。 云化数据…...