• cl76915557

    请教各位大神一个登录接口安全问题。
    我们大作业 web 系统 账号密码登录的现有设计:客户端先拉取服务端 RSA 公钥,使用公钥加密用户名密码提交登录接口。
    我发现这个只能防止密码明文被抓包窃听,无法防御重放攻击,攻击者捕获加密报文就可以反复重放登录。
    所以 ai 调研了几个方案 1. 新增 challenge 接口,登录前获取一次性 challenge ,challenge 和账号密码一起加密,消费即作废;
    2. 客户端携带 nonce+timestamp 随请求一起加密,服务端校验时间窗口+redis 校验 nonce 防重复。

    想问下线上用户名密码登录场景,哪一种落地更多? challenge 模式两次接口会不会有什么短板?感谢大家。

    主楼
  • dzdh

    rsa 公钥你弄个 md5 指纹。只能用一次。一次一生成 rsa 公钥 :doge:

    #1
  • Liu6

    额, 这 sign 不就很符合你的场景吗? sign 可以严格一次, 也可以时间窗口,也不需要使用缓存等资源。

    #2
  • Liu6

    现在是 AI 时代, 直接问 AI 吧。 除了 AI 我现在都快啥都不会了

    #3
  • godall

    防重放攻击的标准做法就是 nonce+timestamp 啊,没什么好争议的。

    #4
  • liKeYunKeji

    header 做一次性的校验码( token\sign\自定加密参数)

    #5
  • dimwoodxi27

    用 wasm+图片隐写,sign 设置唯一条件,甩给前端动态 vmjs 来取图的 sign 值;随机数加时间戳有啥意义,又不支持无状态验证还浪费资源

    #6
  • cowcomic

    nonce+timestamp 这个就行啊,标准做法

    #7
  • opengps

    带上时间,有效期 1 分钟啊

    #8
  • esee

    关键接口 消费一次即 作废,但是这样有时候网络不好系统自动重试 也会有问题,你要做好兼容 ;一般接口加签名和时间戳就行了啊。你对接一下大厂的接口,基本也是这样设计的

    #9
  • xiangyuecn

    如果你说的重放,指的是用户自己调试拿到请求参数,再发起请求,这种本身是防不住的 任何公司都一样 破解成本而已。只要够复杂 或者 没有价值 人家就懒得搞你。另外你也可以直接封号

    如果你指的传输线路上的网络数据包可以被窃取然后重放,并且能拿到响应明文,那你真该死啊,最低上个 https 啊🤡 自己发明一套 https 必要性不大,除非你 http 上能做的比 https 更好

    #10
  • lululau

    防重放你登录接口防个鸡毛的重放啊。。。最讨厌这种又是防这个又是防那个,又是加密又是解密,不懂装懂的“需求”了,https 了解一下呢?

    #11
  • xiangyuecn

    如需 https 证书,欢迎使用单文件网页版 ACME 客户端申请证书,向 Let's Encrypt 、ZeroSSL 、Google 等支持 ACME 协议的证书颁发机构,免费申请获得 通配符泛域名证书 IP 证书

    https://xiangyuecn.github.io/ACME-HTML-Web-Browser-Client/ACME-HTML-Web-Browser-Client.html

    #12
  • dingwen07

    大多数线上系统不在前端/应用层加密/哈希密码,直接明文走 HTTPS 。

    #13
  • yinmin

    web 系统上 https 就行了,天然防止重放的

    #14
  • InDom

    nonce+timestamp 就是主流方案, 至于 nonce 是客户端生成还是服务器下发都可以, 看业务要求.

    登陆确实防重放的需求不高, 如果是全局统一包一层页是很正常的, 如果是单独给某个接口加的话.

    我觉得登陆这样读操作是没必要加的, 写操作加就 ok 了.

    #15
  • dddd1919

    1 用于和不可信用户端交互,由服务端全权处理,相当于每次请求都要预授权后才能真正发起,用完即销毁,安全但比较麻烦
    2 用于和对方可信的客户端交互,客户端和服务端使用相同方式加签验签,两边各自存储密钥且不勇于交互时传输

    看你使用的场景决定用哪种

    #16
  • unused

    先弄清楚你要防的是什么,按你说的“攻击者捕获加密报文就可以反复重放登录”,正解就是 TLS,不要自己发明安全方案

    #17
  • milkleeeeee

    好久没看到技术类帖子了,现在应该都直接问 AI 了吧

    #18
  • liulihaocai

    加一个 reCAPTCHA 不就好了

    #19
  • pxllong

    nonceStr 随机字符串。 配合下时间。nonceStr 只能使用一次。 重放能解决。

    #20
  • seedhk

    方案 2 ,多一个请求没必要

    #21
  • prosgtsr

    nonce

    #22
  • faceRollingKB

    加验证码,MFA 、短信、邮箱、行为都可以

    #23
  • coderzhangsan

    1. 先了解下 API 重放攻击的目的和应用场景,作为一个开放接口,登录接口安全防范的重点,难道不是防刷撞库吗?
    2. 客户端拉取 RSA 公钥?先了解下 http 和 https 协议。

    #24
  • Tink

    nonce+timestamp

    #25

发表回复

登录后回复