Skip to content

security: Implementação de filtro de sanitização e proteção contra ataques homógrafos - #4

Open
anonymous135246 wants to merge 5 commits into
mainfrom
features
Open

security: Implementação de filtro de sanitização e proteção contra ataques homógrafos#4
anonymous135246 wants to merge 5 commits into
mainfrom
features

Conversation

@anonymous135246

Copy link
Copy Markdown
Owner

Esta PR introduz uma camada de validação estrita para nomes de usuários (usernames) que interagem com o sistema de economia do bot. A partir desta versão, apenas nomes que utilizam o padrão ASCII alfanumérico básico (A-Z, 0-9) são autorizados a executar operações que envolvam leitura ou escrita no banco de dados, especificamente no comando work.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Esta PR adiciona validações de username para restringir operações a nomes ASCII alfanuméricos, com a intenção de mitigar riscos de sanitização/homógrafos em fluxos de economia do bot.

Changes:

  • Adiciona utilitários isUsernameAsciiAlnum e detectInvalidCharType em src/utils/functions.js.
  • Bloqueia interações (slash/context, botões e select menus) quando o username não passa na validação; adiciona a mesma validação no comando work.
  • Pequenos ajustes: adiciona category aos comandos no loader, altera valor do item log, remove .github/copilot-instructions.md.

Reviewed changes

Copilot reviewed 6 out of 6 changed files in this pull request and generated 7 comments.

Show a summary per file
File Description
src/utils/functions.js Introduz funções utilitárias para validação/detecção de caracteres inválidos em usernames.
src/events/interactions.js Aplica bloqueio por username em handlers globais de interações (chat/button/select).
src/commands/economy/work.js Adiciona validação de username no comando work antes do processamento.
src/handlers/commands.js Deriva e injeta command.category a partir do path do arquivo; corrige for...of com const.
src/handlers/items.js Ajusta o value do item log.
.github/copilot-instructions.md Remove instruções internas do Copilot.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +33 to +35
// Security validation: block usernames that are not basic ASCII alphanumeric
const username = interaction.user && interaction.user.username ? interaction.user.username : '';
if (!isUsernameAsciiAlnum(username)) {
});
return;
}

Comment on lines +38 to +39
content:
'⚠️ Erro de Segurança: Seu nome de usuário contém caracteres não suportados (acentos ou símbolos). Para garantir a integridade do banco de dados, apenas nomes no padrão ASCII básico podem resgatar Falcoins.',
// Security validation: block usernames that are not basic ASCII alphanumeric
const username = interaction.user && interaction.user.username ? interaction.user.username : '';
if (!isUsernameAsciiAlnum(username)) {
const type = detectInvalidCharType(username);
? interaction.user.username
: '';
if (!isUsernameAsciiAlnum(username)) {
const type = detectInvalidCharType(username);
Comment on lines +37 to +38
content:
'⚠️ Erro de Segurança: Seu nome de usuário contém caracteres não suportados (acentos ou símbolos). Para garantir a integridade do banco de dados, apenas nomes no padrão ASCII básico podem resgatar Falcoins.',
Comment thread src/utils/functions.js
Comment on lines +16 to +25
/**
* @description Attempts to categorize the first invalid character in a username.
* Returns a short string describing the detected type: 'accented', 'emoji', 'non-latin', 'symbol', 'space', or 'other'.
* This is a heuristic to aid logging/auditing and is intentionally conservative.
* @param {string} username
* @returns {string}
*/
function detectInvalidCharType(username) {
if (!username || typeof username !== 'string') return 'empty';
for (const ch of username) {
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants