河曲智叟 发表于 2025-4-13 02:08:19

面试之《前端信息加密》

前端代码是直接暴漏给用户的,哀求的接口也可以通过控制台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. 安全的存储和管理



[*]当地存储安全:假如需要在当地存储敏感数据(如令牌),应该利用安全的存储方式。比方,利用localStorage或sessionStorage时,对数据进行加密存储,并且克制在欣赏器的开发者工具中袒露敏感信息。
[*]密钥管理:假如利用加密算法,应该妥善管理加密密钥,克制密钥泄露。可以将密钥存储在安全的地方,如环境变量中,并且定期更新密钥。
题目2:密钥存在前端当地,会有袒露风险,该怎样处置惩罚?

克制在前端直接存储敏感密钥



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



[*]HTTPS 协议:在前端与服务器之间传输密钥时,务必利用 HTTPS 协议。它能对数据进行加密,防止中央人攻击,确保密钥在传输过程中的安全性。
[*]密钥协商:采用密钥协商算法(如 Diffie - Hellman 算法),在前端和服务器之间安全地交换密钥。这样,两边可以在不直接传输密钥的环境下生成类似的会话密钥。
前端代码的安全掩护



[*]代码混淆和压缩:对前端代码进行混淆和压缩处置惩罚,使代码难以被逆向工程分析。这样可以增长攻击者理解代码逻辑和获取密钥的难度。
[*]防止代码注入:确保前端代码没有代码注入毛病,克制攻击者通过注入恶意脚本获取存储在前端的密钥。对用户输入进行严酷的验证和过滤,防止 XSS 攻击。
定期更新和打消密钥



[*]密钥轮换:定期更新密钥,减少密钥被长期利用而泄露的风险。服务器可以在肯定时间间隔后生成新的密钥,并通知前端更新。
[*]打消机制:当发现密钥大概已经泄露时,服务器应具备打消该密钥的本领,使该密钥不再被认可和利用。同时,及时通知前端获取新的密钥。
题目3:介绍一下密钥协商

密钥协商算法是一种让通信两边在不安全的通信信道上安全地协商出一个共享密钥的算法。Diffie - Hellman(DH)算法是此中较为经典的一种。
定义与配景

Diffie - Hellman 算法由 Whitfield Diffie 和 Martin Hellman 在 1976 年提出,是最早的公钥密码算法之一。它的重要作用是使两边在没有预先共享机密信息的环境下,通过公开信道安全地创建一个共享的密钥,这个密钥可用于后续的对称加密通信,包管数据在传输过程中的保密性。
工作原理

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

[*]选择公共参数:通信两边(通常称为 Alice 和 Bob)起首协商选择两个公共参数:一个大素数                                       p                                  p                     p 和该素数的一个原根                                       g                                  g                     g。这两个参数是公开的,可以在不安全的信道上传输。
[*]生成私有密钥:Alice 和 Bob 各自独立地选择一个随机的私有整数,分别记为                                       a                                  a                     a 和                                       b                                  b                     b。这些私有密钥是保密的,不对外公开。
[*]盘算公开密钥:

[*]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。

[*]盘算共享密钥:

[*]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 协议,用于在客户端和服务器之间安全地协商会话密钥,包管数据在传输过程中的保密性和完整性。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 面试之《前端信息加密》