2016-08-26 1 views
0

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?

+0

Mit anderen Worten, können Sie die Benutzereingabe filtern müssen? –

Antwort

0

sollten Sie stattdessen Ihre Trennzeichen ein nicht druckbarer Zeichen wie '\x00' machen ... das wäre das Problem leicht lösen ...

+0

Das Trennzeichen kann nicht geändert werden, da es vom Spiel festgelegt wurde. Ich kodiere nur den Bot, der mit diesem Spiel interagiert. – Jan

Verwandte Themen