V 友们好,我有这么一个需求:
目前有多个账号,需要每天登录指定的网站,抓取一些数据。
以前都是在自己的电脑上直接运行的程序,现在想要把它部署在服务器上自动运行。
我尝试 google 了一些服务器端密码存储的方案,找到的多数是服务器端就是做存储和验证的角色,没找到这种需要二次登录的情况。因为需要模拟登录,所以始终还是需要获取到登录目标网站的原始密码,不知道有没有比较安全的方案呢?
以下是我的一些疑问:
我有想过这么一个方案:服务器端不保存密码,只转发模拟登录的请求,服务器端维护一个 cookies 池,只存储登录后的 cookies,定期更新 cookies,这样账户密码不需要储存在服务器端。但是觉得如果 cookies 被拿到了的话,别人就可以直接登录到目标网站,好像也不是很安全。
不知道 V 友们有没有比较好的解决方案。由于本人还只是学生没有实际项目开发经验,对安全领域不太了解。上面的问题确实是我思考过并且想要了解的,如果有问的不妥当的地方,还请大神们不要见笑。
欢迎大家推荐一些后台、运维安全方面的书籍或参考资料让我学习,谢谢大家。
1
aWangami 2018-03-12 12:14:10 +08:00 via Android
没关系的,服务器都被拿下了,还在意那些几个密码干嘛
|
2
jeffreychiu95 OP @aWangami 感谢您的迅速回复。实际场景中我还没遇到过这个情况,但是我想了解一下发生了,如何能尽早察觉并减少损失呢?
|
3
Moorj 2018-03-12 12:31:38 +08:00
环节上不填写密码,自动登录,也就是登录信息已经被存储在 cookies 中
服务器设定好告警提示 一旦服务器被拿下,立马修改网站密码 |
4
sw10 2018-03-12 12:49:57 +08:00
binux 的签到项目,大概是这么做的:
1. 网站强制使用 HTTPS 访问 2. 所有用户敏感数据使用每个用户唯一的 256 位密钥加密 3. 再将用户密钥使用 256 位主密钥加密,所有解密过程只在内存中进行 参考: /t/128478 当然,在服务器被拿下的情况下,这也只是增加破解难度而已。 |
5
jeffreychiu95 OP @Moorj 谢谢您的回复。嗯,告警确实是需要的。另外我不太能确定您说的"环节上不填写密码"和我理解的意思是否一样。不填写密码的话我如何模拟登录呢?还是指的是我前面提到的不存储密码的方案?不知道您是否方便细述一下呢?
|
6
jeffreychiu95 OP @sw10 谢谢您回复。感谢您给出的参考项目,你提示了我签到这个和我的需求确实是异曲同工的。我会去参考您的实现方案,谢谢😁
|
7
iyaozhen 2018-03-12 13:02:52 +08:00
之前做过学校教务系统的爬虫,也存了上 w 个帐号。
就像 4 楼说的,基本上只能每个用户分配一个加密 key (可以由用户 id 生成),加密后存储在数据库。这样被脱裤了也没事,当然别人要拿到代码那也就 GG 了。 |
8
jeffreychiu95 OP @iyaozhen 嗯明白,就是说如果数据库和代码都在同一服务器的话,服务器被拿了相当于就可以完全复现对吗?
|
9
Level5 2018-03-12 15:09:09 +08:00 1
设计在程序跑的时候人工输入每项密码.一跑起来密码保存在内存,每次重启应用需要重输密码.OVER
|