Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bug: 发送消息时, CQ码被错误解析 #212

Closed
jasmineamber opened this issue Feb 12, 2021 · 3 comments
Closed

Bug: 发送消息时, CQ码被错误解析 #212

jasmineamber opened this issue Feb 12, 2021 · 3 comments
Labels
as-designed As designed good first issue Good for newcomers

Comments

@jasmineamber
Copy link

描述问题:

使用bot.send, on_command.finish, reject等方法发送带CQ码的消息, CQ码被错误解析

如何复现?

  1. 发送消息: bot.send(event, '[CQ:reply,id=-846150814]头衔过长')

期望的结果
image

环境信息:

  • OS: windows
  • Python Version: 3.8
  • Nonebot Version: 2.0.0a10
  • go-cqhttp Version: v0.9.40

截图
实际结果
image

备注
把这段代码注释之后, 工作正常
image

@jasmineamber jasmineamber added the bug Something isn't working label Feb 12, 2021
@yanyongyu yanyongyu removed the bug Something isn't working label Feb 12, 2021
@yanyongyu
Copy link
Member

yanyongyu commented Feb 12, 2021

出于安全考虑,所有字符串将作为纯文本处理,请使用 Message 或者 MessageSegment 进行消息构造

Message("[CQ:reply,id=123]xxx")
MessageSegment.reply(123) + "xxx"

@yanyongyu yanyongyu added the as-designed As designed label Feb 12, 2021
@jasmineamber
Copy link
Author

可以正常工作了,谢谢

@mnixry
Copy link
Member

mnixry commented Feb 12, 2021

这是一个很好的问题, 涉及到我们在nonebot2中引入的一个安全机制, 我在此向具有同种问题的用户做出说明

出于安全考虑,所有字符串将作为纯文本处理,请使用 Message 或者 MessageSegment 进行消息构造

关于这个"安全考虑" 我在此举这样一个例子:

假设我们有一个设置头衔指令
如果设置成功, bot将预期返回已设置头衔<解析参数>
假设用户输入为/设置头衔 xxx[CQ:image,file=xxxx]
请注意, 这里的CQ码是纯文本, 所以在命令解析后, 我们具有了一个为xxx[CQ:image,file=xxxx]的参数值
此时, 正好解析参数为xxx[CQ:image,file=xxxx], 那么在该语句返回后, CQ码[CQ:image,file=xxxx]将会被解析
也就发出了由用户恶意构造的CQ码消息段


该漏洞可能被用于包括但不限于以下用途

  • 在图片或者视频消息段中放入大文件, 使服务器带宽被大量占用
  • 构造敏感消息字段, 诱导bot帐号被封禁 (XSS)
  • 获取服务器IP地址, 作为网络攻击的一环 (SSRF)

P.S: 事实上, 不恰当的字符串拼接和转义是非常危险的
很多在Web开发中臭名昭著的漏洞, 例如XSS, SSRF和SQL注入, 都是由于该原因产生的
我们组内一般将其命名为CQ码注入攻击

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
as-designed As designed good first issue Good for newcomers
Development

No branches or pull requests

3 participants