通过函数计算和SmsForwarder短信转发实现自动输入验证码

前言

因为在公司登录各个内部系统,每次都要输入验证码,每次都要打开手机 -> 查看验证码 - > 手动输入,比较繁琐,通过查询发现可以使用 SmsForwarder 来自动转发验证码到自定义的位置,所以做了一个 Alfred 插件和阿里的函数计算来实现验证码自动复制到电脑上并粘贴。

验证码上传

当手机收到验证码后,可以设置自动调用接口,将验证码上传,这里我参考了 webhook 的方式,通过 webhook 将验证码自动 post 到我的函数计算的接口上面,配置方法可以参考文档,配置效果如下:

短信通道

因为短信接收的接口开放在公网,为了安全起见,我添加了一个 token 参数校验,如果 token 不对会返回 404,防止敏感信息泄露。

image-20230523093744746

短信转发规则

这里我是通过正则来匹配短信内容的,将正则匹配的短信通过上面的短信通道发送出去。

image-20230523093928395

验证码获取

将验证码上传后,就可以通过另一个接口来获取了,我使用 bottle 起了一个 web 服务器,通过函数计算来执行,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
from bottle import request, run, route, abort
import bottle

msg = ''


@route('/msg', method=['POST'])
def set_msg():
global msg
data = request.json
print('data: ' + str(data))
token = data['token']
if token != 'token':
abort(404)
msg = data['content']
return 'Success'


@route('/get_msg')
def get_msg():
global msg
if request.query.get('token') != 'token':
abort(404)
return msg

if __name__ == "__main__":
bottle.run(host='0.0.0.0', debug=False, port=9888)
else:
app = bottle.default_app()

声明一个变量,用来保存验证码,通过接口获取到验证码后,保存到这个变量中,然后请求另一个接口,返回这个变量的值。代码很简单,没什么可说的。

还有函数计算一段时间不访问就会清除当前运行的实例,这个时候重新访问的话 msg 的值就是空的,也能保证安全,验证码信息不落库,不保存,只放到内存中,在一段时间后自动销毁。

获取命令

函数计算测试成功后,通过以下命令就可以获取到云端的验证码了:

1
curl -s 'https://xxx.cn/get_msg?token=token' | grep -E -o '\d{6}'

效果如下:

image-20230523102429025

使用 Alfred 自动输入验证码

如果用使用过 Alfred 的小伙伴应该知道,Alfred 可以通过自定义的 Workflows 来执行自定义的指令,并且可以和剪切板交互,废话不多说,上代码:

整体流程就三步,keyword 启动后,执行 bash 脚本,然后将结果复制到剪切板

image-20230523102742441

脚本已经粘贴在上面了,可以直接复用。

最后一步复制到剪切板的操作可以勾选这两个选项,勾选后会自动粘贴到当前可编辑的位置:

image-20230523102903530

效果图

最后一步,来效果展示:

Untitled

总结

最后,附上代码仓库:

所有代码可以在下面的仓库找到

https://github.com/libra146/Alfred-workflows/tree/main/forward-sms

本文章首发于个人博客 LLLibra146’s blog
本文作者:LLLibra146
版权声明:本博客所有文章除特别声明外,均采用 © BY-NC-ND 许可协议。非商用转载请注明出处!严禁商业转载!
本文链接https://blog.d77.xyz/archives/5f96b034.html