
Correspondência de expressão regular para URLs. Versão mantida, segura e compatível com navegadores do url-regex. Resolve o CVE-2020-7661 para servidores Node.js.
Correspondência de expressões regulares para URLs. Versão mantida, segura e compatível com navegadores do [url-regex][]. Resolve o [CVE-2020-7661][cve] para servidores Node.js. Funciona no Node v14+ e em navegadores. Mantido para [Spam Scanner][spam-scanner] e [Forward Email][forward-email].
Após descobrir o [CVE-2020-7661][cve] e divulgá-lo publicamente (através do meu trabalho no [Spam Scanner][spam-scanner] e no [Forward Email][forward-email]) – usei uma implementação do [url-regex][] com uma camada extra para filtrar correspondências de URL indesejadas.
No entanto, após usá-lo no [Forward Email][forward-email] em produção (que processa centenas de milhares de e-mails por semana), encontrei e documentei vários problemas principais adicionais com o [url-regex][].
Percebendo que o [url-regex][] não é mais mantido ativamente, possui 9 pull requests abertos até o momento da escrita e também não suporta navegadores – decidi escrever este pacote para todos e mesclar todos os pull requests abertos.
Este pacote deve, esperançosamente, se aproximar mais do uso pretendido no mundo real de uma expressão regular de URL, além de permitir que o usuário a configure como desejar. Por favor, confira o [Forward Email][forward-email] se este pacote ajudou você, e explore nosso código-fonte no GitHub que mostra como usamos este pacote.
NOTA: O comportamento padrão deste pacote tentará carregar o re2 (é uma dependência opcional usada para evitar ataques de negação de serviço por expressão regular e mais). Se você deseja usar este comportamento, deve ter o re2 instalado via npm install re2 – caso contrário, ele usará instâncias normais de RegExp. A partir da v4.0.0, adicionamos uma opção caso você queira forçar este pacote a nem mesmo tentar carregar o re2 (ex.: ele está no seu node_modules mas você não quer usá-lo) – basta passar re2: false como opção.
[npm][]:
npm install url-regex-safe
Resolvemos o [CVE-2020-7661][cve] incluindo o [RE2][] para uso no Node.js. Você não precisará mais envolver manualmente suas expressões regulares de URL com new RE2(urlRegex()) através do url-regex-safe (fazemos isso automaticamente para você).
const urlRegexSafe = require('url-regex-safe');
const str = 'some long string with url.com in it';
const matches = str.match(urlRegexSafe());
for (const match of matches) {
console.log('match', match);
}
console.log(urlRegexSafe({ exact: true }).test('github.com'));
Como o [RE2][] não foi feito para o navegador, ele não será usado e, portanto, o [CVE-2020-7661][cve] ainda é um problema no lado do cliente. No entanto, não é grave, pois o máximo que faria é travar a aba do navegador (no lado do Node.js, teria travado todo o processo e lançado uma exceção de falta de memória).
Esta é a solução para você se estiver usando apenas tags <script> em todo lugar!
<script src="https://unpkg.com/url-regex-safe"></script>
<script type="text/javascript">
(function() {
var str = 'some long string with url.com in it';
var matches = str.match(urlRegexSafe());
for (var i=0; i<matches.length; i++) {
console.log('match', matches[i]);
}
console.log(urlRegexSafe({ exact: true }).test('github.com'));
})();
</script>
Supondo que você esteja usando [browserify][], [webpack][], [rollup][] ou outro bundler, basta seguir o uso do Node acima.
Para usar este pacote com TypeScript, você pode instalar o pacote @types/url-regex-safe para definições de tipos.
npm install --save-dev @types/url-regex-safe