Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
url-regex-safe — Corrispondenza tramite espressioni regolari per URL. Versione mantenuta, sicura e compatibile con i browser di url-regex. Risolve la CVE-2020-7661 per i server Node.js. | Kitploit
Strumenti/GitHubGitHub/spamscanner/url-regex-safe
Utilità GenericheAnalisi StaticaAnalisi delle VulnerabilitàScripting e AutomazioneSicurezza Web
GitHubspamscanner/url-regex-safe

url-regex-safe

Corrispondenza tramite espressioni regolari per URL. Versione mantenuta, sicura e compatibile con i browser di url-regex. Risolve la CVE-2020-7661 per i server Node.js.

Vedi Repository
81163 anni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
Sito web

url-regex-safe

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

Espressione regolare per il matching degli URL. Versione mantenuta, sicura e compatibile con i browser di url-regex. Risolve CVE-2020-7661 per i server Node.js. Funziona in Node v14+ e nei browser. Mantenuta per Spam Scanner e Forward Email.

Table of Contents

  • Premessa
  • Installazione
  • Utilizzo
    • Node
    • Browser
  • Opzioni
  • Suggerimenti rapidi e migrazione da url-regex
  • Limitazioni
  • Contributori
  • Licenza

Premessa

Dopo aver scoperto CVE-2020-7661 e averla divulgata pubblicamente (grazie al mio lavoro su Spam Scanner e Forward Email) – ho utilizzato un'implementazione di url-regex con una sorta di "collante" aggiuntivo per filtrare le corrispondenze URL errate.

Tuttavia, dopo averla usata su Forward Email in produzione (che elabora centinaia di migliaia di email a settimana), ho trovato e documentato molti altri problemi principali con url-regex.

Resomi conto che url-regex non è più mantenuto attivamente, ha 9 pull request aperte al momento in cui scrivo e inoltre non supporta i browser – ho deciso di scrivere questo pacchetto per tutti e di unire tutte le pull request aperte.

Questo pacchetto dovrebbe, si spera, avvicinarsi maggiormente all'uso reale previsto di un'espressione regolare per URL, consentendo anche all'utente di configurarlo come desidera. Se questo pacchetto ti è stato utile, dai un'occhiata a Forward Email ed esplora il nostro codice sorgente su GitHub, che mostra come utilizziamo questo pacchetto.

Installazione

NOTA: Il comportamento predefinito di questo pacchetto tenterà di caricare re2 (è una dipendenza peer opzionale utilizzata per prevenire attacchi di denial of service tramite espressioni regolari e altro). Se desideri utilizzare questo comportamento, devi avere re2 installato tramite npm install re2 – altrimenti verrà utilizzato un normale RegExp come fallback. Dalla v4.0.0 abbiamo aggiunto un'opzione se desideri forzare questo pacchetto a non tentare nemmeno di caricare re2 (ad esempio se è presente nei tuoi node_modules ma non vuoi usarlo) – basta passare re2: false come opzione.

npm:

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

Utilizzo

Node

Abbiamo risolto CVE-2020-7661 includendo RE2 per l'uso con Node.js. Non dovrai più avvolgere manualmente le tue espressioni regolari per URL con new RE2(urlRegex()) tramite url-regex-safe (lo facciamo automaticamente per te).

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'));

Browser

Poiché RE2 non è pensato per il browser, non verrà utilizzato e quindi CVE-2020-7661 è ancora un problema lato client. Tuttavia non è grave, poiché al massimo potrebbe far crashare la scheda del browser (mentre lato Node.js avrebbe fatto crashare l'intero processo e sollevato un'eccezione di memoria esaurita).

VanillaJS

Questa è la soluzione per te se stai semplicemente usando tag <script> ovunque!

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

Se stai usando browserify, webpack, rollup o un altro bundler, puoi semplicemente seguire l'utilizzo di Node qui sopra.

TypeScript

Per usare questo pacchetto con TypeScript, puoi installare il pacchetto @types/url-regex-safe per le definizioni dei tipi.

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

Opzioni

Suggerimenti rapidi e migrazione da url-regex

Devi sovrascrivere il valore predefinito e impostare strict: true se non desideri che github.com venga riconosciuto da solo (anche se www.github.com funzionerà con strict: false).

A differenza del pacchetto deprecato e non mantenuto url-regex, facciamo alcune cose in modo diverso:

  • Impostiamo strict a false di default (url-regex lo aveva impostato a true)
  • Abbiamo aggiunto un'opzione auth, impostata a false di default (url-regex trova corrispondenze con l'autenticazione di base (Basic Authentication); aveva questo valore impostato a true - tuttavia è un comportamento deprecato in Chromium).
  • Abbiamo aggiunto le opzioni parens e ipv6, impostate rispettivamente a false e true di default (url-regex aveva parens impostato a true e ipv6 non esisteva o era impostato a ).

Limitazioni

Questa limitazione si applica solo se stai usando re2: poiché non possiamo usare la funzionalità dei "negative lookbehind" delle espressioni regolari (a causa delle limitazioni di RE2), non abbiamo potuto integrare la logica di questa pull request. Questo ci avrebbe permesso di fare in modo che example.jpeg corrispondesse solo se fosse example.jp, ma se adesso passi example.jpeg estrae example.jp da esso (poiché .jp è un TLD). Potrebbe esistere una soluzione alternativa e accogliamo con piacere i contributi della community su questo problema.

Contributori

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

Licenza

MIT © Forward Email LLC

Scarica lo strumento
PropertyTypeDefault ValueDescription
re2BooleantrueTenta di caricare re2 da usare al posto di RegExp per creare nuove istanze di espressioni regolari. Se passi re2: false, non verrà nemmeno tentato il caricamento di re2.
exactBooleanfalseCorrispondenza solo con una stringa esatta. Utile con regex.test(str) per verificare se una stringa è un URL. Impostiamo questo valore a false di default per poter trovare corrispondenze in stringhe come github.com (invece di richiedere un protocollo o il sottodominio www). Riteniamo che questo assomigli di più all'uso reale previsto di questo pacchetto.
strictBooleanfalseImpone agli URL di iniziare con un protocollo valido o con www se impostato a true. Se true, consente qualsiasi TLD purché abbia un minimo di 2 caratteri validi. Se false, confronta il TLD con l'elenco dei TLD validi usando tlds.
authBooleanfalseCorrispondenza con le intestazioni di autenticazione di base (Basic Authentication). Impostiamo questo valore a false di default poiché è stato deprecato in Chromium, e altrimenti lascerebbe all'utente corrispondenze URL indesiderate (anche questo assomiglia di più all'uso reale previsto di questo pacchetto, avendolo impostato a false di default).
localhostBooleantrueConsente localhost nella parte hostname dell'URL. Vedi test/test.js per maggiori dettagli sul test di localhost e su come possa restituire un valore potenzialmente indesiderato. Una pull request verrebbe presa in considerazione per risolvere il problema "pic.jp" vs. "pic.jpg".
parensBooleanfalseCorrispondenza con parentesi finale in stile Markdown. Impostiamo questo valore a false perché dovrebbe essere l'utente a occuparsi del parsing degli URL in Markdown.
apostrophesBooleanfalseCorrispondenza con gli apostrofi. Impostiamo questo valore a false perché non vogliamo che la stringa background: url('http://example.com/pic.jpg'); restituisca http://example.com/pic.jpg'. Vedi questo issue per maggiori informazioni.
trailingPeriodBooleanfalseCorrispondenza con i punti finali. Impostiamo questo valore a false di default poiché in un comportamento reale si vorrebbe example.com come corrispondenza, non example.com. (a differenza di url-regex, che in quel pacchetto include il punto finale).
ipv4BooleantrueCorrispondenza con URL IPv4.
ipv6BooleantrueCorrispondenza con URL IPv6.
tldsArraytldsCorrispondenza con un elenco specifico di TLD, oppure con l'elenco predefinito fornito da tlds.
returnStringBooleanfalseRestituisce l'espressione regolare come stringa invece di un RegExp (utile per logica personalizzata, come abbiamo fatto con Spam Scanner).
false
  • Abbiamo aggiunto un'opzione apostrophe, impostata a false di default (url-regex la aveva impostata a true).
  • Abbiamo aggiunto un'opzione trailingPeriod, impostata a false di default (il che significa che le corrispondenze non conterranno punti finali, mentre url-regex aveva questo valore impostato a true).