Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
url-regex-safe — 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. | Kitploit
Ferramentas/GitHubGitHub/spamscanner/url-regex-safe
Utilitários de Propósito GeralAnálise EstáticaAnálise de VulnerabilidadesScripting e AutomaçãoSegurança Web
GitHubspamscanner/url-regex-safe

url-regex-safe

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.

Ver Repositório
8116há 3 anosRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar
Site

url-regex-safe

build status code style styled with prettier made with lass license npm downloads

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 para servidores Node.js. Funciona no Node v14+ e em navegadores. Mantido para Spam Scanner e Forward Email.

Sumário

  • Prefácio
  • Instalação
  • Uso
    • Node
    • Navegador
  • Opções
  • Dicas rápidas e migração do url-regex
  • Limitações
  • Contribuidores
  • Licença

Prefácio

Após descobrir o CVE-2020-7661 e divulgá-lo publicamente (através do meu trabalho no Spam Scanner e no 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 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 se este pacote ajudou você, e explore nosso código-fonte no GitHub que mostra como usamos este pacote.

Instalação

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:

root@kitploit:~
npm install url-regex-safe

Uso

Node

Resolvemos o CVE-2020-7661 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ê).

root@kitploit:~
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'));

Navegador

Como o RE2 não foi feito para o navegador, ele não será usado e, portanto, o CVE-2020-7661 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).

VanillaJS

Esta é a solução para você se estiver usando apenas tags <script> em todo lugar!

root@kitploit:~
<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>

Bundler

Supondo que você esteja usando browserify, webpack, rollup ou outro bundler, basta seguir o uso do Node acima.

TypeScript

Para usar este pacote com TypeScript, você pode instalar o pacote @types/url-regex-safe para definições de tipos.

root@kitploit:~
npm install --save-dev @types/url-regex-safe

Opções

Dicas rápidas e migração do url-regex

Você deve substituir o padrão e definir strict: true se não desejar corresponder github.com sozinho (embora www.github.com funcione se strict: false).

Ao contrário do pacote obsoleto e não mantido url-regex, fazemos algumas coisas de forma diferente:

  • Definimos strict como false por padrão (url-regex definia como true)
  • Adicionamos uma opção auth, que é false por padrão (url-regex correspondia à Autenticação Básica; tinha isso como true – no entanto, é um comportamento depreciado no Chromium).
  • Adicionamos opções parens e ipv6, que são false e true por padrão (url-regex tinha parens como true e ipv6 era inexistente ou definido como ).

Limitações

Esta limitação se aplica apenas se você estiver usando re2: Como não podemos usar a funcionalidade de "lookbehinds negativos" de expressões regulares (devido às limitações do RE2), não pudemos mesclar a lógica deste pull request. Isso teria nos permitido fazer com que example.jpeg correspondesse apenas se fosse example.jp, no entanto, se você passar example.jpeg agora, extrairá example.jp dele (já que .jp é um TLD). Uma solução alternativa pode existir, e recebemos contribuições da comunidade sobre este problema.

Contribuidores

NomeWebsite
Forward Email LLChttps://forwardemail.net
Kevin Mårtensson
Diego Perini

Licença

MIT © Forward Email LLC

Baixar ferramenta
PropriedadeTipoValor PadrãoDescrição
re2BooleantrueTentar carregar re2 para usar em vez de RegExp para criar novas instâncias de expressão regular. Se você passar re2: false, nem mesmo tentará carregar re2.
exactBooleanfalseCorresponder apenas a uma String exata. Útil com regex.test(str) para verificar se uma String é uma URL. Definimos como false por padrão para corresponder a valores de String como github.com (em vez de exigir um protocolo ou subdomínio www). Acreditamos que isso se aproxima mais do uso pretendido no mundo real deste pacote.
strictBooleanfalseForçar URLs a começarem com um protocolo válido ou www se definido como true. Se true, permitirá qualquer TLD desde que tenha no mínimo 2 caracteres válidos. Se for false, corresponderá o TLD contra a lista de TLDs válidos usando tlds.
authBooleanfalseCorresponder a cabeçalhos de Autenticação Básica. Definimos como false por padrão, pois foi depreciado no Chromium e, caso contrário, deixa o usuário com correspondências de URL indesejadas (também se aproxima mais do uso pretendido no mundo real deste pacote ao defini-lo como false por padrão).
localhostBooleantruePermite localhost na parte do hostname da URL. Veja test/test.js para mais informações sobre o teste de localhost e como ele pode retornar um valor indesejado. Um pull request seria bem-vindo para resolver o problema "pic.jp" vs. "pic.jpg".
parensBooleanfalseCorresponder a parênteses finais no estilo Markdown. Definimos como false porque deve ser responsabilidade do usuário analisar URLs do Markdown.
apostrophesBooleanfalseCorresponder a apóstrofos. Definimos como false porque não queremos que a String background: url('http://example.com/pic.jpg'); resulte em http://example.com/pic.jpg'. Veja esta issue para mais informações.
trailingPeriodBooleanfalseCorresponder a pontos finais. Definimos como false por padrão, pois o comportamento no mundo real desejaria example.com em vez de example.com. como correspondência (diferente do url-regex que corresponde ao ponto final naquele pacote).
ipv4BooleantrueCorresponder a URLs IPv4.
ipv6BooleantrueCorresponder a URLs IPv6.
tldsArraytldsCorresponder a uma lista específica de tlds, ou a lista padrão fornecida por tlds.
returnStringBooleanfalseRetornar a RegExp como uma String em vez de um RegExp (útil para lógica personalizada, como fizemos com Spam Scanner).
false
  • Adicionamos uma opção apostrophe, que é false por padrão (url-regex tinha isso como true).
  • Adicionamos uma opção trailingPeriod, que é false por padrão (o que significa que as correspondências não conterão pontos finais, enquanto url-regex tinha isso como true).