掘金登录引发的思考

这是我参与更文挑战的第29天,活动详情查看: 更文挑战

写在前面

近日看了几篇关于自动发布掘金文章的帖子。都是后端直接调用发布文章的接口配合定时任务完成的。但是缺点就是绕过了登录掘金的步骤。通过手动获取页面的 cookie ,然后将 cookie 交给程序,完成自动发布的功能。所以今天就从技术的角度出发,一探掘金的登录时如何实现的。

正文开始

首先声明这里只探讨技术实现。

1. 问题提出的背景

在此次文章打卡的活动中,会存在写好文章存在草稿箱,但是忘了发布文章导致断更的情况发生。于是就突发奇想,能否有自动发布文章的功能,帮助我们完成一部分自动化的工作,去解决漏发布的问题。

于是就从文章发布的接口入手,我们先看掘金文章发布的逻辑;

  • a. 文章新建后都会存入草稿,并且生成唯一的ID。
  • b. 文章编辑不发布依旧是在草稿箱,文章ID不变。
  • c. 文章发布时填写必要的标签后,即可发布成功。
  • d. 文章发布完成,通过审核即会变成可读状态,即可分享于他人。

下面是发布接口具体的参数以及地址:

参数 类型 说明
draft_id 字符串 文章ID
sync_to_org 布尔 是否同步
column_ids 列表 未知

对于 python 处理这种事情很简单,类似这样:

# 代码为演示代码
body = {
    "draft_id": "123456",
    "sync_to_org": False,
    "column_ids": []
}
requests.post(self.publish_url, body=body)
复制代码

很明显这么做是行不通的。因为在代码中是没有体现出任何登录的操作。下面就看一下掘金的登录实现。

2. 登录方式

目的:已知用户名密码的情况实现自动登录。

  • 手机验证码登录

image.png

  • 账号密码登录

image.png

手机验证码登录由于每次都需要动态的获取验证码,所以这里就不考虑;第三方登录本质上也是需要登录其他账号,这里也不考虑;所以我们只需要查看 掘金账号密码登录即可;那么我们就研究一下这个东西。

在正常输入用户名密码后会出现滑动验证码,需要手动验证才能通过。

image.png

似乎问题到这里陷入了死胡同。我的目的是为了自动登录,但是查看了几种方式后绕不开人为的介入。

3. 深入探究

经过思考登录的本质是一个 POST 请求的过程也就是发送请求就可以完成。所以继续沿着这个思路继续查看登录的接口,下图为登录时具体的接口。

image.png

如图请求的接口与请求的参数都有,但是参数明显是加密处理过后的数据。

这里继续深入了解后得知大致的登录流程,这里没有做深入了解只是根据自己的经验总结的结果。

  • 滑动验证过程

image.png

  • 登录过程,此过程用户名&密码加密

所以要想通过脚本的方式登录成功就需要完成两件事:

  1. 滑动验证码请求参数的构造
  2. 登录接口请求参数构造

但是努力查询掘金前端的代码,虽说能找到一些蛛丝马迹。但是终究是被前端代码的量以及动态加载的 JS 搞怕了,花出的时间可能与收获不成正比。卒,享年28岁。

PS:这里提供的破解思路是可行的,希望有能力的小伙伴研究出来之后,可以一起探讨。

总结

掘金的登录两个比较重要的功能:

  • 通过滑动验证码确定操作者身份为真实用户。
  • 通过前端加密后端解密的方式避免登录过程中明文传输用户信息。

两者结合就实现了比较安全的登录方式,使得大部分程序员想通过程序直接登录掘金的梦想直接破灭。

所以想实现自动发布的功能,需要另辟蹊径才能达到目的。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享