V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
mhsj6621
V2EX  ›  程序员

这样设计登录合理吗?

  •  
  •   mhsj6621 · 2016-04-29 09:26:35 +08:00 · 2458 次点击
    这是一个创建于 3112 天前的主题,其中的信息可能已经有所发展或是发生改变。

    服务端数据库有 LoginSalt 和 PasswordSalt 两个字段,前者是变化的,后者是固定的。 首先服务端存放的密码是 MD5(p + PasswordSalt) (p 为明文密码), PasswordSalt 是针对每个用户单独生成的,用来防彩虹表。

    1.注册的时候

    客户端生成 PasswordSalt 然后把 MD5(p + PasswordSalt) (这里用 PasswordSalt 是为了防止截取注册密码用彩虹表反推)和 PasswordSalt 传递给服务端,如果注册成功,服务端保存这两者

    2.登录的时候

    首先向服务端请求 LoginSalt ( LoginSalt 在请求时生成,并存入对应的用户中)和 PasswordSalt ,然后向服务端发送 MD5(MD5(p + PasswordSalt) + LoginSalt),然后服务端进行验证,如果验证通过,即登录成功,将重新生成 LoginSalt 并存入对应用户(防止重放攻击),这时候同时向客户端返回这个 LoginSalt ,以作为权限高一级 API 的 Token 。

    这样是否可行?主要想达到的目的有三个, 1 是防彩虹表, 2 是防止重放攻击, 3 是给高权限 API 一个凭证 仔细想了下,或许还得有个 Token 字段,登录成功后返回随机生成的 Token 来代替 LoginSalt 比较好,直接用 LoginSalt ,别人用你的账号请求一次,你的 LoginSalt 就变了,请求高权限 API 就无效了

    8 条回复    2016-04-30 09:10:28 +08:00
    armoni
        1
    armoni  
       2016-04-29 10:21:51 +08:00   ❤️ 1
    想太多了, loginsalt 没必要, API 请求权限请另外做处理,不要和账户绑定
    mlkr
        2
    mlkr  
       2016-04-29 11:55:53 +08:00
    ssl
    mhsj6621
        3
    mhsj6621  
    OP
       2016-04-29 17:16:56 +08:00
    @armoni 不要 loginsalt 的话,重放怎么办。还有能具体说说 API 权限吗
    armoni
        4
    armoni  
       2016-04-29 18:10:46 +08:00
    @mhsj6621 1.如果是 b/s 架构,可以用验证码或者三次失败后输入验证码来拦截攻击 移动端服务架构思路也是类似,多次登录失败后拦截请求
    2.API 的权限和整个系统业务的权限管理关联起来, spring security 之类。
    如有其它做法,欢迎讨论
    SmiteChow
        5
    SmiteChow  
       2016-04-29 21:59:19 +08:00
    不用这么复杂
    mhsj6621
        6
    mhsj6621  
    OP
       2016-04-29 22:19:44 +08:00
    @SmiteChow 能详细说说么
    mhsj6621
        7
    mhsj6621  
    OP
       2016-04-29 22:22:37 +08:00
    @armoni 用验证码的话只是防止别人穷举,但是防不了重放啊。。
    还有 API 的权限的话,粒度比较粗,只是为了区分登陆和未登陆..
    armoni
        8
    armoni  
       2016-04-30 09:10:28 +08:00
    https 就解决了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1569 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 23:56 · PVG 07:56 · LAX 15:56 · JFK 18:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.