V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
githmb
V2EX  ›  程序员

用户注册时的密码安全性校验应该在前端还是后端完成?

  •  
  •   githmb · 2023-08-01 11:35:29 +08:00 · 2903 次点击
    这是一个创建于 509 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如果是在前端做校验,只向后端提交哈希值,那用户是不是可以强行设置弱密码?

    如果在后端做校验,那就得发送原文,没有 https 的情况下密码又容易泄露

    34 条回复    2023-10-25 15:53:07 +08:00
    cwcc
        1
    cwcc  
       2023-08-01 11:39:31 +08:00
    关键词:非对称加密。
    NessajCN
        2
    NessajCN  
       2023-08-01 11:41:13 +08:00
    那你强制 https 呗...
    echo1937
        3
    echo1937  
       2023-08-01 11:41:16 +08:00   ❤️ 1
    脱离 https ,讨论泄密没意义。
    githmb
        4
    githmb  
    OP
       2023-08-01 11:41:57 +08:00
    @cwcc 额,一个注册没必要搞这么多次请求吧
    8355
        5
    8355  
       2023-08-01 11:47:58 +08:00
    2023 年了 https 还不是标配?
    无论前端做还是后端不都应该上 https ?
    picone
        6
    picone  
       2023-08-01 11:49:28 +08:00
    前端校验。用户对自己的输入负责,自行设置弱密码对业务造成影响。

    非对称加密就更好了,但都到这步了,为啥不上 HTTPS 呢?
    githmb
        7
    githmb  
    OP
       2023-08-01 11:50:22 +08:00
    @8355 想想保密项目,内网项目
    bthulu
        8
    bthulu  
       2023-08-01 11:52:50 +08:00
    前端校验, 弱密码才能方便用户. 安全性要靠自己来保证, 不要指望用户. 即便用户设置 123456 这样的密码, 也要能保证用户的安全. 可以配合用户常用 IP, 常用手机, 用户所在地, 用户大数据画像来确保用户安全, 不要靠强密码, 这会极大的降低用户体验.
    cwcc
        9
    cwcc  
       2023-08-01 11:55:58 +08:00   ❤️ 1
    最简单的方案就是前端 js 里面带上公钥,用 JSEncrypt 直接加密传到后端用私钥解密就行了。其他复杂的各种认证、密钥交换算法如果有兴趣也可以研究一下。总之为了加密而加密行不通,系统总有薄弱点,但加密传输目前容易做到的应该就是非对称加密和 HTTPS 通信了。
    GeruzoniAnsasu
        10
    GeruzoniAnsasu  
       2023-08-01 11:57:04 +08:00
    @githmb 那种项目根本就不需要做设置密码的功能,管理员密码只允许物理机本地修改(开变更单进机房改)
    liveoppo
        11
    liveoppo  
       2023-08-01 12:04:18 +08:00
    通过 https 送到后端校验。尽量部署 https 。
    thinkershare
        12
    thinkershare  
       2023-08-01 12:06:22 +08:00
    没有 HTTPS ,你这种前端加密没啥意义。
    deplivesb
        13
    deplivesb  
       2023-08-01 12:09:54 +08:00
    安全性校验 ,我理解应该是比如密码位数,是否大小写等规则校验,这个东西不是前端就可以么?为啥还要给后端
    adoal
        14
    adoal  
       2023-08-01 12:14:42 +08:00
    @githmb 如果是内网项目,让甲方出台制度,用户必须签署“我草忒马的虽然心里不爽但是既然组织上规定弱密码造成的安全事故责任自负了那我就乖乖执行我承诺我不使用弱密码如果我欺骗组织就天打雷劈”协议。
    adoal
        15
    adoal  
       2023-08-01 12:19:39 +08:00
    世间安得双全法,不负如来不负卿。你有不想让 geek 用户绕过前端的需求,又有不发送明文的需求,又不用 https ,又嫌非对称加密“一个注册没必要搞这么多次请求吧”……想啥呢?
    githmb
        16
    githmb  
    OP
       2023-08-01 12:20:45 +08:00
    @cwcc 这种内置公钥确实是一种好办法
    githmb
        17
    githmb  
    OP
       2023-08-01 12:22:28 +08:00
    @adoal 9 楼已有答案
    chenjia404
        18
    chenjia404  
       2023-08-01 12:23:24 +08:00   ❤️ 1
    在前端做校验就够了,如果用户可以强行设置弱密码,那就说明他有一定的技术能力,就不用担心他的安全性问题了。
    adoal
        19
    adoal  
       2023-08-01 12:27:38 +08:00   ❤️ 2
    @githmb #9 说的不就是#1 的具体实现?然而你在#3 里对#1 表示没必要,又说#17 里回复我的#15 比哦啊哦是#9 是答案……这是啥姿势?
    nuk
        20
    nuk  
       2023-08-01 13:36:02 +08:00
    加个 2FA ,安全性直接加一百倍
    villivateur
        21
    villivateur  
       2023-08-01 13:39:09 +08:00
    @githmb 保密项目和内网项目同样可以用 https 啊,自己内网生成一个 CA 证书就行了,内部设备都信任这个证书。
    Masoud2023
        22
    Masoud2023  
       2023-08-01 13:45:16 +08:00   ❤️ 1
    看不懂这帖子到底再讨论什么。

    前端校验一遍,发明文给后端,后端再校验一遍能死?

    不上 https 怪前端?

    已经 2023 年了,还搞什么 JSEncrypt ,是嫌 TLS 不好用是吗?
    kenvix
        23
    kenvix  
       2023-08-01 13:46:50 +08:00
    > 没有 https 的情况下

    这种情况不应该发生
    raysonx
        24
    raysonx  
       2023-08-01 13:49:02 +08:00
    前端加密没有意义,防不了中间人攻击。
    sankooc
        25
    sankooc  
       2023-08-01 13:53:36 +08:00
    没有 https 的话 前端传的是哈希值还是别的都不一样吗
    TaoLoading
        26
    TaoLoading  
       2023-08-01 14:02:45 +08:00   ❤️ 1
    不上 https 只带上公钥也不安全,即使是前端打包后的代码,密钥也是可以找出来的
    chotow
        27
    chotow  
       2023-08-01 14:05:10 +08:00
    前端做校验,并在 UI 层限制弱密码。
    以哈希值的形式提交密码密到后端,可以避免后端环节中的明文泄漏(比如日志),并增强用户对服务的信赖度。
    除非有不可抗拒因素,否则必须使用 HTTPS 。
    dj721xHiAvbL11n0
        28
    dj721xHiAvbL11n0  
       2023-08-01 14:06:40 +08:00   ❤️ 1
    那我问你,http ,你泄露了哈希值,我拿到不是一样能登录嘛?这有区别嘛?
    dallaslu
        29
    dallaslu  
       2023-08-01 14:43:49 +08:00
    密码的 hash 值如果被中间人截获,中间人随时可用此值进行认证,几乎等同于截获密码。若防止中间人截获,至少应该上 https ;再进一步,用非对称加密传输给服务器(当然公钥是否可信,会是另一个问题)。

    检查弱密码,可以通过 hash 值碰撞测试。如果不用 hash 值,也不必传输密码原文,可在前端对密码进行随机变形,比如 abCDef123# 变成 hiJKlm456*,他们的安全性是近乎相等的。
    githmb
        30
    githmb  
    OP
       2023-08-01 14:46:13 +08:00
    @adoal 所以说我问的是懂的人,不是你这种人啊。人家一眼就能看出来我是嫌交换证书麻烦,还不安全。
    NoOneNoBody
        31
    NoOneNoBody  
       2023-08-01 14:54:37 +08:00
    两端都要,前端检验格式,后端排重以及不当字符
    lujiaosama
        32
    lujiaosama  
       2023-08-01 14:54:50 +08:00   ❤️ 1
    不用 https 前端花活再多都是白给. 我能想到的应用场景就是某些为了等保而等保的内网项目, 运维人员又不懂得怎么部署 https.
    githmb
        33
    githmb  
    OP
       2023-08-01 14:59:02 +08:00
    @lujiaosama 你是懂的,哈哈
    crystom
        34
    crystom  
       2023-10-25 15:53:07 +08:00
    @x2420390517 不一样,很多用户在多个网站用一个密码
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1608 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 16:32 · PVG 00:32 · LAX 08:32 · JFK 11:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.