mirai-api-http
mirai-api-http copied to clipboard
【功能请求】希望可以让 执行命令 功能在 Session未认证 状态下也能执行命令
现在如果没登陆QQ号,就无法执行命令 如果能让执行命令功能不被是否已经登陆QQ号限制就能用来登陆QQ了,还能实现下线QQ然后登陆另外一个QQ进行轮换
下线轮换通过其他方式执行,执行命令不加认证过于危险
下线轮换通过其他方式执行,执行命令不加认证过于危险
确实,但可以通过什么方式呢?
找找有没有插件实现这个的,理论上不存在实现上的困难
找找有没有插件实现这个的,理论上不存在实现上的困难
在现有的基础上,将传入的QQ参数设置为-1,或者专门创建一个接口,表示连接到Mirai控制台,这种状态将不能使用与QQ相关的API,只能控制Mirai控制台,相当于只连接到控制台。
当然必须通过身份认证(也就是mirai-api-http认证密钥),认证成功后,服务端返回一个会话密钥,通过会话的密钥才能进行控制mirai控制台
说到危险,mirai-api-http 身份认证也是极为不安全的,因为verifyKey和sessionKey是通过http(其中也包括websocket)中的url,请求头,和请求正文进行传递,如果你将它暴露在公网中,它会受到中间人攻击的,因为http是极不安全的,url,请求头,请求正文,在中间人眼里就是透明的是可获取的。
如果是考虑到安全的,我觉得先解决身份鉴权的安全性,协议上先考虑使用https/wss进行连接
如果还考虑使用http或ws,可以考虑先建立一个较为安全的连接RSA+AES环境,然后进行认证。不过这种方法也有办法绕过去,具体怎么绕我就不说了,只是说比http裸露的更安全一些至少他不是明文传输,所以还是得考虑https,和wss,因为证书会更安全
流程:
- 【服务端】生成一对 RSA 秘钥对,服务端保留私钥。将公钥由发送给客户端
- 【客户端】接收到服务端的 RSA 公钥后,然后客户端生成一个AES密钥。将AES密钥通过服务端RSA公钥进行加密成密文,然后将密文发给服务端
- 【服务端】收到密文使用 RSA私钥 将密文解密,得到客户端AES密钥,之后服务器将使用AES密钥与客户端交流。即服务端使用客户端生成的AES密钥加密需要的内容发送给客户端
- 【客户端】使用之前生成的 AES密钥解密 得到服务器传递的内容
- 【客户端】如果客户端后续有内容要传递给服务端,一样使用AES进行通讯,因为服务端客户端都拥有AES密钥
使用RSA+AES的原因:
- 单纯的使用 RSA(非对称加密)方式的话,效率会很低,因为非对称加密解密方式虽然很保险,但是过程复杂,需要时间长;
- 但是,RSA 优势在于数据传输安全,且对于几个字节的数据,加密和解密时间基本可以忽略,所以用它加密 AES 秘钥(一般16个字节)再合适不过了;
- 单纯的使用 AES(对称加密)方式的话,死板且不安全。这种方式使用的密钥是一个固定的密钥,客户端和服务端是一样的,一旦密钥被人获取,那么,我们所发的每一条数据都会被都对方破解;
- 但是,AES有个很大的优点,那就是加密解密效率很高,而我们传输正文数据时,正好需要这种加解密效率高的,所以这种方式适合用于传输量大的数据内容;
- 基于以上特点,择优取之,就成就了混合加密的思路。
不安全指的是应用接口上的不安全,传输上的不安全可以套反代 TLS