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

面试之《前端信息加密》

前端代码是直接暴漏给用户的,请求的接口也可以通过控制台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 协议,用于在客户端和服务器之间安全地协商会话密钥,保证数据在传输过程中的保密性和完整性。

相关文章:

  • 使用 Python 扫描 Windows 下的 Wi-Fi 网络实例演示
  • 【Qt】qDebug() << “中文测试“; 乱码问题
  • 论文阅读:2024-arxiv How to Steer LLM Latents for Hallucination Detection?
  • 多坐标系变换全解析:从相机到WGS-84的空间坐标系详解
  • 【Vue】案例——To do list:
  • JS 面向对象编程
  • AI智能体开发与大语言模型的本地化部署、优化技术
  • 【SQL】MySql常见的性能优化方式
  • Devops之GitOps:什么是Gitops,以及它有什么优势
  • 《Vue3学习手记》
  • 小刚说C语言刷题——第21讲 一维数组
  • Streamlit在测试领域中的应用:构建自动化测试报告生成器
  • 算法驱动的场景识别:规则引擎与机器学习的强大结合
  • P8739 [蓝桥杯 2020 国 C] 重复字符串
  • Java习题:合并两个有序数组
  • 蔚来汽车智能座舱接入通义大模型,并使用通义灵码全面提效
  • 巧记英语四级单词 Unit3-下【晓艳老师版】
  • HCIP-17 BGP基础2
  • 一文介绍阿里32B推理模型
  • 【软件测试】人工智能增强Web 自动化测试框架方案
  • 绿色家园网站怎么做/新品推广策划方案
  • 平易云 网站建设/搜索引擎调价工具哪个好
  • 成都网站搭建公司/seo排名点击
  • 南通网站建设教程/百度智能建站系统
  • 资讯门户网站 dede/cps推广平台有哪些
  • wordpress怎么注册用户/seo点击