Servidores de Jogos

Consultas seguras: evitando SQL injection no Pawn

Consultas seguras: evitando SQL injection no Pawn

SQL injection acontece quando um texto digitado pelo jogador é colado direto numa consulta SQL e acaba sendo interpretado como comando. Em servidores de SA-MP e open.mp, isso já causou contas roubadas, bancos apagados e admins falsos.

Como acontece

// ERRADO: nunca faça isso
new query[256];
format(query, sizeof(query),
    "SELECT * FROM contas WHERE nome = '%s'", inputtext);
mysql_tquery(Banco, query);

Se o jogador digitar algo com aspas e comandos SQL, a consulta deixa de fazer o que você pretendia.

Nomes de jogador, textos de diálogo, motivos de ban, descrições de casas: tudo que vem do jogador é não confiável.

A solução: mysql_format com %e

O plugin MySQL oferece mysql_format, com o especificador %e, que escapa o texto:

// CERTO
new query[256];
mysql_format(Banco, query, sizeof(query),
    "SELECT * FROM contas WHERE nome = '%e' LIMIT 1", nome);
mysql_tquery(Banco, query, "OnContaCarregada", "i", playerid);

Regras:

  • Textos: sempre '%e' (entre aspas simples);
  • Números: %d ou %f. Como são convertidos de variáveis numéricas, não carregam SQL;
  • Nunca use format com %s para montar SQL com dados do jogador.

Valide antes de consultar

O escape protege o banco, mas a regra de negócio é sua:

  • Tamanho máximo (um nome de casa com 5.000 caracteres não faz sentido);
  • Caracteres permitidos (por exemplo, só letras, números e espaço para nomes);
  • Faixa de valores para números.

Permissões mínimas

O usuário do banco usado pelo servidor deve ter só o necessário (SELECT, INSERT, UPDATE, DELETE no banco do servidor). Assim, mesmo que algo escape, o estrago é limitado. Nunca use o usuário root.

Revise o código herdado

Gamemodes antigos e "vazados" costumam ter dezenas de format + %s montando SQL. Faça uma busca por format( perto de mysql_ e corrija todos.

Hospede seu servidor com a VittHost

Os planos OPENMP-BR da VittHost incluem MySQL, com servidores no Brasil, painel Pterodactyl, proteção DDoS, compatibilidade total com scripts SA-MP e teste grátis de 3 dias.

Compartilhar:

Pronto para hospedar seu próximo projeto?

VPS com painel pré-instalado em 1 clique. Ativação imediata.

Ver planos VPS