面试题答案
一键面试重放攻击
- 技术手段:
- 时间戳机制:在令牌生成时,加入时间戳信息。服务器验证令牌时,检查时间戳是否在合理的时间窗口内。例如,允许令牌在生成后的5分钟内有效,超过这个时间则判定为无效,防止攻击者使用旧令牌进行重放。
- 一次性令牌:生成一次性使用的令牌,每次请求成功后,令牌即失效。下次请求需要重新获取新的令牌。如在支付场景中,支付令牌仅能用于一次支付操作。
- 部署实施:
- 时间戳机制:在令牌生成模块中添加时间戳生成逻辑,在验证模块中加入时间戳验证逻辑。时间窗口的设置需综合考虑网络延迟等因素,以不影响正常用户请求为前提。一般来说,5 - 10分钟的时间窗口较为合适。
- 一次性令牌:在令牌管理系统中记录令牌的使用状态,每次请求验证通过后,将该令牌标记为已使用。同时,在客户端提示用户可能需要重新获取令牌的情况,尽量以友好的方式告知,如弹出提示框告知用户操作需要重新认证,以保证用户体验。
跨站请求伪造(CSRF)攻击
- 技术手段:
- CSRF令牌:在用户登录后,服务器生成一个随机的CSRF令牌并发送给客户端,客户端每次请求时将该令牌包含在请求头或请求参数中。服务器验证请求中的CSRF令牌与服务器端保存的令牌是否一致。
- Same - Origin Policy(同源策略):利用浏览器的同源策略,限制跨域请求。只有来自同一源(协议、域名、端口相同)的请求才被允许访问受保护的资源。
- 部署实施:
- CSRF令牌:在用户登录成功后的响应中,将CSRF令牌以Cookie或响应头的形式返回给客户端。客户端在后续的所有需要保护的请求中,将CSRF令牌添加到请求头或请求参数中。服务器端在请求处理前,验证CSRF令牌的有效性。为了不影响用户体验,这个过程对用户应是透明的,无需用户手动操作。
- Same - Origin Policy:一般情况下,现代浏览器默认遵循同源策略,无需额外配置。但在涉及跨域资源共享(CORS)的场景中,要谨慎配置CORS规则,只允许可信的源进行跨域请求,防止攻击者利用跨域漏洞进行CSRF攻击。
令牌泄露
- 技术手段:
- 加密存储:在客户端和服务器端,对令牌进行加密存储。例如,在客户端使用HTTPS协议传输令牌,并将令牌加密存储在本地存储或Cookie中(设置HttpOnly属性防止通过JavaScript获取)。在服务器端,使用安全的加密算法对令牌进行存储,如AES加密。
- 令牌过期与刷新:设置合理的令牌过期时间,如短期令牌(如1小时)用于频繁操作,长期令牌(如7天)用于相对不频繁的操作。当短期令牌过期时,使用刷新令牌获取新的短期令牌,而无需用户重新登录。
- 监控与异常检测:建立监控系统,实时监测令牌的使用情况。例如,监测令牌的请求频率、请求来源IP等信息。如果发现异常情况,如短时间内大量来自不同IP的请求使用同一令牌,及时锁定该令牌并通知用户。
- 部署实施:
- 加密存储:在客户端开发中,使用HTTPS协议确保数据传输安全。对于本地存储的令牌,使用加密库进行加密存储。在服务器端,配置数据库加密功能,对存储的令牌进行加密。这一系列操作对用户透明,不影响用户体验。
- 令牌过期与刷新:在令牌生成模块中设置令牌过期时间逻辑。在客户端,当短期令牌过期时,自动使用刷新令牌获取新的短期令牌,整个过程用户无感知。在服务器端,建立刷新令牌的验证和新令牌生成机制。
- 监控与异常检测:部署监控系统,如使用Prometheus和Grafana等工具,对令牌相关指标进行监控。设置合理的阈值,当检测到异常时,通过邮件、短信等方式通知管理员,同时在客户端向用户提示账户可能存在风险,引导用户采取安全措施,如重新登录、修改密码等。