3

所以我正在考虑编写一个 irc bot/bot 扩展程序,让用户通过启动游戏来玩某些基于文本的游戏,

发送他们输入的某些行的一部分(如果不在机器人频道中,则正则表达式匹配游戏信号。rbot 游戏名进入森林。发送“进入森林)到游戏的 std in,

而标准的游戏外由机器人缓存并通过管道传输到通道(例如,“让我们为鸭子被击败而高兴”被读入机器人内部的行缓存,然后机器人将其发送到适当的通道

游戏名称:让我们为之欢欣鼓舞

游戏名称:鸭子被打败了”)

但我有点担心 irc 上的人可能会做一些棘手的事情,剥离所有不可打印的字符是否足够安全?如果一个程序退出(比如他们输入了游戏的退出命令),当您尝试写入该程序的文件描述符时会发生什么情况 std in(error)?还有其他潜在问题吗?注意我将在 linux 或 *bsd 上运行它,所以我不需要担心 Windows 特定的事情。

4

3 回答 3

2

您可能需要考虑的一些基础知识:

  • 允许您知道安全的文本通过比尝试过滤掉您认为可能不安全的文本要安全得多。游戏可能只接受字母数字字符,因此请检查输入是否仅包含这些值,并拒绝其他任何内容。
  • 在具有最低权限的帐户下运行机器人,并尽可能限制对机器其余部分的访问。如果您可以将其完全沙箱化或虚拟化,那就更好了。
  • 您应该观察子进程的 PID 是否终止,并决定如果它退出、重新启动它或使进一步的命令失败、退出机器人等该怎么做。

每当将服务暴露给网络时,都会出现许多可能的安全问题,您最好阅读有关一般安全编程主题的信息,例如,快速的 google 搜索会出现此操作方法

偏执是值得的。如果不遵循正确的安全编程实践,您最多可以希望没有人诚实地尝试破坏它。

于 2010-07-25T03:18:01.870 回答
1

转义引号和管道将使您免受大多数事情的影响

" ' |
于 2010-07-25T02:24:45.083 回答
1

用户输入来自哪里并不重要,重要的是它的使用方式。

影响 IRC 的一种攻击是CRLF 注入。如果您通过 IRC 回显用户输入,这将为您提供。攻击者可以尝试注入一个carrage return (\r) 换行符(\n)。这种类型的注入会影响许多协议,包括HTTPSMTP。在 IRC 的情况下,攻击者将能够强制您的机器人向 IRCD 发送命令(例如 /join 或 /kick 或 /ban :)。确保查看ASCII 表并过滤掉所有 0x0A (\n) 和 0x0D (\r)。在大多数情况下,新行就足够了,因此请确保对两者都进行过滤。

请务必阅读OWASP A1: Injection。特别是如果您在 sql 查询中使用用户输入或在命令行上调用进程。

于 2010-07-25T04:46:11.020 回答