我目前正在开发一个Discord机器人,它通过rcon与我的游戏服务器交互,遇到了一个问题
我有两个功能。这是为了让机器人识别命令(例如,say Hello World)
@bot.command(pass_context=True, aliases=[])
@asyncio.coroutine
def say(context, *, msg):
yield from bot.say("```{0}```".format(rcon.rcon_say(msg)))
第二个函数将其发送到我的游戏服务器。在这种情况下,“say Hello World”将使服务器在聊天中说“Hello World”
def rcon_say(_msg : str):
with RCON(SERVER_ADDRESS, PASSWORD) as rcon:
return rcon("say {0}".format(_msg))
问题是:。说“测试;kick user1“将向服务器发送两个命令:
say test
kick user1
所以它可以和其他rcon命令一起使用。那么如何避免这一点被滥用呢
我所做的是避免滥用:
我添加了以下功能:
def checkMsg(checkThis : str):
if ";" in checkThis:
raise errors.SemicolonError()
return
else:
return checkThis
并补充道
_msg = checkMsg(_msg)
因此,这将删除任何分号从用户的输入,但我不知何故不觉得这是正确的方法。是否仍可以发送分号(可能已解码/使用unicode等)
我是安全的还是有办法滥用它
相反,您应该将分隔符设置为不可打印的字符,如
'\x00'
。。。这很容易解决问题相关问题 更多 >
编程相关推荐