V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
肯德基 24 小时外卖热线
4008-823-823
麦当劳 24 小时外卖热线
4008-517-517
睡觉之前和起床之后,要记得刷牙和用漱口水清洁口腔
icedx
V2EX  ›  天黑以后

20170113 午夜俱乐部

  •  
  •   icedx · 2017-01-12 23:53:10 +08:00 · 2412 次点击
    这是一个创建于 2654 天前的主题,其中的信息可能已经有所发展或是发生改变。
    19 条回复    2017-01-13 01:00:21 +08:00
    DoraJDJ
        1
    DoraJDJ  
       2017-01-12 23:59:19 +08:00
    自己试着做了一个用户登录系统,原来没有想象中的那么难





    不知道我的方案安不安全,密码加盐后,盐值存在另外一个表内,用户名和密码存放在用户表内,盐长度固定 32 , SHA256 配 HMAC 进行哈希运算。
    lostvincent
        2
    lostvincent  
       2017-01-13 00:00:26 +08:00 via iPhone
    还有半年就毕业了,为自己将来担忧
    要是可以活几个世纪该多好:(
    DoraJDJ
        3
    DoraJDJ  
       2017-01-13 00:01:06 +08:00
    @DoraJDJ 顺便问一下,大家觉得登录成功后 session 得怎么存储?

    是存用户 ID 还是用户名,或者是其他之类的东西?

    现在是用户名存 session 里,但是发现 koa-session 存的时候是将 session 用可逆转的 base64 编码存储,感觉有点不放心。
    Baymaxbowen
        4
    Baymaxbowen  
       2017-01-13 00:02:27 +08:00 via Android
    唉,又要过年了
    Kilerd
        5
    Kilerd  
       2017-01-13 00:12:34 +08:00 via iPhone
    @DoraJDJ 登录系统并不难做,我现在为自己的几个项目做一个统一的登录认证服务器,简化版的 oauth2 。


    怎么储存的话,用 aes 加密然后 hmac 签名一下就行
    密文.hmac

    这样既不怕被看到,也不怕被伪造。

    可以参考下 Python 的 itsdangerous 这个包
    挺好用的
    wjm2038
        6
    wjm2038  
       2017-01-13 00:12:57 +08:00 via Android
    @DoraJDJ 最好不要可逆的吧,我觉得应该还是用户名加什么其他的加个密, md5(md5())
    isCyan
        7
    isCyan  
       2017-01-13 00:13:12 +08:00 via Android
    @DoraJDJ 这用户系统,就简单的注册登录找回密码呀这些真要做得好很难呐,我自己试过发现需要考虑的地方比想象得多很多,要做得人性化用着舒服更难
    Kilerd
        8
    Kilerd  
       2017-01-13 00:17:50 +08:00
    @DoraJDJ
    ![1.png]( https://ooo.0o0.ooo/2017/01/13/5877abcfd22a9.png)
    ![2.png]( https://ooo.0o0.ooo/2017/01/13/5877abcfd3322.png)

    这是我设计的页面,这两天为了设计几个页面操足了心思。

    PS : LOGO 是小伙伴设计的。 不要在意 HTML 的 TITLE 信息, LOGIN 的色调也还没调好。
    Kilerd
        9
    Kilerd  
       2017-01-13 00:18:17 +08:00
    https://ooo.0o0.ooo/2017/01/13/5877abcfd22a9.png
    https://ooo.0o0.ooo/2017/01/13/5877abcfd3322.png

    图片怎么就显示不了呢???
    Kilerd
        10
    Kilerd  
       2017-01-13 00:22:07 +08:00
    @DoraJDJ 刚刚说的,是 session 或者 cookies 的储存方法。

    至于 密码怎么在库里面储存,直接用 安全的 hash 函数就行。

    不要用 MD5 , SHA1 !!!
    不要用 MD5 , SHA1 !!!
    不要用 MD5 , SHA1 !!!

    有能力的直接上 SHA3 ,或者对称加密 AES (这里也不推荐用对称加密,毕竟是可逆的,过不了用户那关)

    简单的还是上 SHA3 吧。


    不要信 6L 的说法, 即使是两层的 md5 都有了彩虹表可以跑了。 意义是跟 单层的 MD5 一样的。

    加盐的方法的话, 意义不大,主要是要挑选一个安全的不可逆算法,那么 SHA3 就是最好的选择了。
    feather12315
        11
    feather12315  
       2017-01-13 00:26:13 +08:00 via Android
    考试后,出去浪,一小时前刚回来。
    很幸福
    DoraJDJ
        12
    DoraJDJ  
       2017-01-13 00:26:37 +08:00 via Android
    @Kilerd 我现在也有点纳闷, Koa 的 session 中间件在使用时必须给 app 声明 keys 变量的值(估计就是用于安全类的?),但是存储的时候 cookie 用 base64 编码,还有一个 cookie 貌似就是标识符之类的东西,这种方法究竟安不安全。

    @wjm2038 我也想 session 不可逆,但这样的话我又怎么知道登录到的是谁的号呢?当时想做个用户验证系统时就经常因为这个问题给难倒。
    DoraJDJ
        13
    DoraJDJ  
       2017-01-13 00:28:14 +08:00 via Android
    @Kilerd 我也知道现在 MD5 破解一个彩虹表的事,所以我存密码时就用的 sha256 加 hmac 和盐,应该也足够安全吧。

    不知道 sha1 和 sha3 之类的有什么区别。
    wjm2038
        14
    wjm2038  
       2017-01-13 00:30:44 +08:00 via Android
    @DoraJDJ 再来一个 key 为 userid 的应该就可以了吧
    Kilerd
        15
    Kilerd  
       2017-01-13 00:30:57 +08:00 via iPhone
    @DoraJDJ koa 自己有安全措施就不用折腾了。不安全的话早就发 issue 了。

    我刚刚说的那个 密文.hmac 是用在 oauth2.0 服务器向站点回送 token 之类的信息所做的安全措施。
    DoraJDJ
        16
    DoraJDJ  
       2017-01-13 00:33:46 +08:00 via Android
    @Kilerd 希望是这样,我明天试着篡改下 cookie 看看会不会出什么幺蛾子吧 😂
    Kilerd
        17
    Kilerd  
       2017-01-13 00:40:23 +08:00 via iPhone
    @DoraJDJ 他的 key 就相当于对称加密的密码。他先加密存起来,需要用的时候试图解密,成功就用,不成功就等于没传入这个 cookies 一样,本质都是对称加密。
    Vladimir
        18
    Vladimir  
       2017-01-13 00:42:59 +08:00 via iPhone
    仔细想想低配 nmbp 就能满足我了
    green15
        19
    green15  
       2017-01-13 01:00:21 +08:00 via iPhone
    计划提前,摊手
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2884 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 03:52 · PVG 11:52 · LAX 20:52 · JFK 23:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.