服务器端如何安全存储用于模拟登录的密码? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jeffreychiu95
V2EX    信息安全

服务器端如何安全存储用于模拟登录的密码?

  •  
  •   jeffreychiu95 2018-03-12 12:09:18 +08:00 4846 次点击
    这是一个创建于 2781 天前的主题,其中的信息可能已经有所发展或是发生改变。

    V 友们好,我有这么一个需求:
    目前有多个账号,需要每天登录指定的网站,抓取一些数据。

    以前都是在自己的电脑上直接运行的程序,现在想要把它部署在服务器上自动运行。
    我尝试 google 了一些服务器端密码存储的方案,找到的多数是服务器端就是做存储和验证的角色,没找到这种需要二次登录的情况。因为需要模拟登录,所以始终还是需要获取到登录目标网站的原始密码,不知道有没有比较安全的方案呢?

    以下是我的一些疑问:

    1. 假设在最坏情况下(服务器和数据库权限都被拿下),如果尽可能地减少密码被破解的几率呢?
    2. 密码储存在数据库里面的话,数据库方面如何尽量提高安全性呢?
    3. 如果密码不保存明文,而是保存使用加密算法加密后的数据,那么解密算法应该如何存放呢?

    我有想过这么一个方案:服务器端不保存密码,只转发模拟登录的请求,服务器端维护一个 cookies 池,只存储登录后的 cookies,定期更新 cookies,这样账户密码不需要储存在服务器端。但是觉得如果 cookies 被拿到了的话,别人就可以直接登录到目标网站,好像也不是很安全。

    不知道 V 友们有没有比较好的解决方案。由于本人还只是学生没有实际项目开发经验,对安全领域不太了解。上面的问题确实是我思考过并且想要了解的,如果有问的不妥当的地方,还请大神们不要见笑。

    欢迎大家推荐一些后台、运维安全方面的书籍或参考资料让我学习,谢谢大家。

    9 条回复    2018-03-12 15:09:09 +08:00
    aWangami
        1
    aWangami  
       2018-03-12 12:14:10 +08:00 via Android
    没关系的,服务器都被拿下了,还在意那些几个密码干嘛
    jeffreychiu95
        2
    jeffreychiu95  
    OP
       2018-03-12 12:21:00 +08:00
    @aWangami 感谢您的迅速回复。实际场景中我还没遇到过这个情况,但是我想了解一下发生了,如何能尽早察觉并减少损失呢?
    Moorj
        3
    Moorj  
       2018-03-12 12:31:38 +08:00
    环节上不填写密码,自动登录,也就是登录信息已经被存储在 cookies 中

    服务器设定好告警提示

    一旦服务器被拿下,立马修改网站密码
    sw10
        4
    sw10  
       2018-03-12 12:49:57 +08:00
    binux 的签到项目,大概是这么做的:
    1. 网站强制使用 HTTPS 访问
    2. 所有用户敏感数据使用每个用户唯一的 256 位密钥加密
    3. 再将用户密钥使用 256 位主密钥加密,所有解密过程只在内存中进行

    参考:
    /t/128478

    当然,在服务器被拿下的情况下,这也只是增加破解难度而已。
    jeffreychiu95
        5
    jeffreychiu95  
    OP
       2018-03-12 12:50:22 +08:00 via Android
    @Moorj 谢谢您的回复。嗯,告警确实是需要的。另外我不太能确定您说的"环节上不填写密码"和我理解的意思是否一样。不填写密码的话我如何模拟登录呢?还是指的是我前面提到的不存储密码的方案?不知道您是否方便细述一下呢?
    jeffreychiu95
        6
    jeffreychiu95  
    OP
       2018-03-12 12:55:44 +08:00 via Android
    @sw10 谢谢您回复。感谢您给出的参考项目,你提示了我签到这个和我的需求确实是异曲同工的。我会去参考您的实现方案,谢谢
    iyaozhen
        7
    iyaozhen  
       2018-03-12 13:02:52 +08:00
    之前做过学校教务系统的爬虫,也存了上 w 个帐号。
    就像 4 楼说的,基本上只能每个用户分配一个加密 key (可以由用户 id 生成),加密后存储在数据库。这样被脱裤了也没事,当然别人要拿到代码那也就 GG 了。
    jeffreychiu95
        8
    jeffreychiu95  
    OP
       2018-03-12 13:50:32 +08:00 via Android
    @iyaozhen 嗯明白,就是说如果数据库和代码都在同一服务器的话,服务器被拿了相当于就可以完全复现对吗?
    Level5
        9
    Level5  
       2018-03-12 15:09:09 +08:00   1
    设计在程序跑的时候人工输入每项密码.一跑起来密码保存在内存,每次重启应用需要重输密码.OVER
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5407 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 39ms UTC 07:15 PVG 15:15 LAX 00:15 JFK 03:15
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86