Boa tarde @everyone !
Retomando o assunto endpoint de configurações (https://www.notion.so/Endpoint-de-configura-es-0a97faee68f845ab96ec21551862fe6c).
Nosso time de engenharia observou que existem possíveis situações em que o match do regex com a string do txid pode demorar muitos segundos ou até minutos. Existem situações inclusive de crash da aplicação. Em outras palavras: não é seguro recebermos via input qualquer regex.
Um exemplo que vocês podem testar no browser:
let regexp = /^(\d+)$/;
let str = "012345678901234567890123456789z";
alert( regexp.test(str) );
let str = "012345678901234567890123456789z";
alert( regexp.test(str) );
O alert acima levará um longo tempo até que apareça. Imaginem isso no ato de recebimento de um Pix, no qual cada milisegundo é um fator determinante para um timeout inesperado.
A conclusão é que precisamos controlar melhor quais regex serão aceitas.
A proposta é, ao invés de receber um txidRegex, receber algo mais limitado que também atenda da mesma forma:
"recebimento": {
"txid": {
"comecaCom": "gnPix"
}
}
"recebimento": {
"txid": {
"terminaCom": "gnPix"
}
}
"recebimento": {
"txid": {
"contem": "gnPix"
}
}
"txid": {
"comecaCom": "gnPix"
}
}
"recebimento": {
"txid": {
"terminaCom": "gnPix"
}
}
"recebimento": {
"txid": {
"contem": "gnPix"
}
}
comecaCom/terminaCom/contem: a-zA-Z0-9{0,15} //caracteres aceitos
Gostaria de opinião de vocês em relação a essa nova proposta, bem como sugestões dentro dessa nova abordagem.
Para quem interessar, uma referência sobre o assunto regexp-catastophic-backtracking com mais detalhes.
https://javascript.info/regexp-catastrophic-backtracking