V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
RTNelo
V2EX  ›  Python

一个安全的 Web 用户登录系统应该怎样设计与实现?

  •  
  •   RTNelo ·
    RTNelo · 2015-09-26 16:33:59 +08:00 · 6906 次点击
    这是一个创建于 3127 天前的主题,其中的信息可能已经有所发展或是发生改变。
    21 条回复    2015-09-28 12:02:35 +08:00
    giuem
        1
    giuem  
       2015-09-26 16:59:53 +08:00 via Android
    不知道楼主对于安全的定义是什么。我认为,登录页面使用 https ,不明文传输密码差不多就可以了
    vibrance
        2
    vibrance  
       2015-09-26 17:00:39 +08:00 via iPhone
    https 加专线加自制加密算法
    Ouyangan
        3
    Ouyangan  
       2015-09-26 17:01:19 +08:00
    MeirLin
        4
    MeirLin  
       2015-09-26 17:35:00 +08:00
    @giuem
    @vibrance 然后就会出现撞库攻击。
    abelyao
        5
    abelyao  
       2015-09-26 17:40:19 +08:00 via iPhone
    微信扫二维码登录
    cloverstd
        6
    cloverstd  
       2015-09-26 17:42:01 +08:00 via iPhone
    两步验证
    loading
        7
    loading  
       2015-09-26 18:46:43 +08:00 via Android
    防爆破,我的就没实现这个…准备加。
    MeirLin
        8
    MeirLin  
       2015-09-26 18:53:37 +08:00   ❤️ 1
    @loading 验证码+表单不可重复提交(类似 Token )即可
    lingo233
        9
    lingo233  
       2015-09-26 19:09:10 +08:00
    千万别自制加密算法
    virusdefender
        10
    virusdefender  
       2015-09-26 19:24:07 +08:00
    网页写入一段乱七八糟的 js ,提交的时候带上这个 js 的运行结果,然后与 session 中比较,可以防住不少低级的机器人。

    https://virusdefender.net/index.php/archives/438/
    tinyproxy
        11
    tinyproxy  
       2015-09-26 20:14:44 +08:00 via iPhone
    oauth ,两步验证,客户端证书
    bdbai
        12
    bdbai  
       2015-09-26 21:13:43 +08:00 via iPhone
    @virusdefender 对于登录系统,万能机器人应该不多吧?
    WordPress 博客也经常有机器人评论,随便搞点 trick 就行了。
    Ryans
        13
    Ryans  
       2015-09-26 21:22:54 +08:00
    - https
    - 如果 http ,请将用户名密码加密后传输,避免网络嗅探
    - 多次输入密码错误出现验证码逻辑
    - 账号 密码 的后台处理注意避免 SQL 注入漏洞使得万能密码可以绕过
    - 找回密码逻辑
    jugelizi
        14
    jugelizi  
       2015-09-26 22:00:21 +08:00
    验证码 多次错误输入要有
    密码要 JS 非对称加密服务器解密
    不上 https 谈安全都是耍流氓
    tuoxie007
        15
    tuoxie007  
       2015-09-27 12:00:40 +08:00 via iPhone
    最偷懒的做法,用第三方 oauth 登录,自己网站每次给分配一个 token ,定时过期。
    ljdawn
        16
    ljdawn  
       2015-09-27 14:21:09 +08:00
    两次 hash 先搞起来。
    MeirLin
        17
    MeirLin  
       2015-09-27 17:13:38 +08:00
    @ljdawn 哪个位置做 hash 呢?
    ljdawn
        18
    ljdawn  
       2015-09-27 18:40:47 +08:00
    @MeirLin js 来一发。 服务器短再来一发。。
    MeirLin
        19
    MeirLin  
       2015-09-27 23:34:19 +08:00
    @ljdawn 这样其实也无济于事, 攻击者可以在用户输入这一步进行诸如撞库类的攻击 自动写到表单进行 fuzz 提交就好 .. 所以要防御还需是多面的,目前看来正确使用验证码就可以防御,再加上表单提交的 token 基本不用担心撞库了。当然再加上服务器风控能做到发现大量发包提交就封 ip 也是有效的 但是 ip 的获取不能用 XFF ,不然一样可以伪造来绕过,其实撞库就是识别机器行为的博弈,只要机器无法做到就是防御了 当然最重要的是把所有登陆接口都做到防御 .. 挖过阿里撞库的经验
    ljdawn
        20
    ljdawn  
       2015-09-28 08:45:02 +08:00
    @MeirLin 一般网站的的登录都不会做到那么安全吧? 正确使用验证码? 如果验证码难度大,也增加了用户的登录难度阿。
    ssltest
        21
    ssltest  
       2015-09-28 12:02:35 +08:00
    sql 注入一定要注意啊,如果有注入,直接会影响到所有的数据,建议你看下这个! http://www.codefrom.com/t/%E5%85%B3%E4%BA%8Esql%E6%B3%A8%E5%85%A5%EF%BC%8C%E4%BD%A0%E5%BA%94%E8%AF%A5%E7%9F%A5%E9%81%93%E7%9A%84%E4%B8%80%E4%BA%9B%E4%B8%9C%E8%A5%BF
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5704 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 02:17 · PVG 10:17 · LAX 19:17 · JFK 22:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.