2016-08-26 2 views
0

저는 현재 rcon을 통해 내 gameserver와 상호 작용하고 문제를 발견 한 Discord Bot에 대해 작업하고 있습니다.사용자 정의 문자열에서 구분 기호 사용을 올바르게 피하는 방법은 무엇입니까?

두 가지 기능이 있습니다. 이 명령을 인식하는 로봇입니다

@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)) 

문제 : .say "테스트; 킥 USER1은"서버에 두 명령을 보내드립니다 : 다른 RCON 명령 때문에 그 abusable

say test 
kick user1 

합니다. 어떻게하면 학대당하는 것을 피할 수 있을까요?

나는 abusage 방지하기 위해 무슨 짓을 : 기능 다음

내가 추가를 :

def checkMsg(checkThis : str): 
if ";" in checkThis: 
    raise errors.SemicolonError() 
    return 
else: 
    return checkThis 

그리고

_msg = checkMsg(_msg) 

그래서이 어떻게 든 돈을 사용자의 입력에서 세미콜론을 제거하지만 난 것이다 추가 이것을하는 것이 올바른 방법이라고 생각하지 않습니다. 세미콜론 (유니 코드 등으로 디코딩되었을 수도 있음)을 보낼 수 있습니까?

나는 그것을 안전 할까, 또는 악용하는 방법이 있습니까?

+0

해야? –

답변

0

, 당신은 사용자 입력을 필터링 할 필요가 대신 즉 당신의 구분이 쉽게 문제를 해결할 ... '\x00' 같은 인쇄 할 수없는 문자 ...

+0

구분 기호는 게임에서 설정했기 때문에 변경할 수 없습니다. 나는 그 게임과 상호 작용하는 봇만 코딩하고 있습니다. – Jan

관련 문제