Ich arbeite gerade an einem Discord Bot, der über rcon mit meinem Gameserver interagiert und auf ein Problem gestoßen ist.Wie vermeide ich ordnungsgemäß die Verwendung eines Trennzeichens in einer benutzerdefinierten Zeichenfolge?
Ich habe zwei Funktionen. Dies ist für den Bot ist ein Befehl (z ‚.say Hallo Welt‘)
@bot.command(pass_context=True, aliases=[])
@asyncio.coroutine
def say(context, *, msg):
yield from bot.say("```{0}```".format(rcon.rcon_say(msg)))
Die zweite Funktion sendet sie an meine Gameserver zu erkennen. In diesem Fall sagt 'say Hello World', dass der Server 'Hallo Welt' in den Chat sagen wird.
def rcon_say(_msg : str):
with RCON(SERVER_ADDRESS, PASSWORD) as rcon:
return rcon("say {0}".format(_msg))
Das Problem: .say "test; Kick user1" werden zwei Befehle an den Server senden:
say test
kick user1
so seine abusable mit jedem anderen rcon Befehl. Wie kann man verhindern, dass dies missbraucht wird?
Was habe ich abusage zu vermeiden:
ich folgende Funktion hinzugefügt:
def checkMsg(checkThis : str):
if ";" in checkThis:
raise errors.SemicolonError()
return
else:
return checkThis
Und hinzugefügt
_msg = checkMsg(_msg)
Also das alle Semikolons vom Benutzer Eingang entfernen, aber ich irgendwie don Ich fühle nicht, dass es der richtige Weg ist. Ist es immer noch möglich ein Semikolon zu senden (vielleicht decodiert/in Unicode etc.)
Bin ich sicher oder gibt es einen Weg es zu missbrauchen?
Mit anderen Worten, können Sie die Benutzereingabe filtern müssen? –