
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.
Espressione regolare per il matching degli URL. Versione mantenuta, sicura e compatibile con i browser di [url-regex][]. Risolve [CVE-2020-7661][cve] per i server Node.js. Funziona in Node v14+ e nei browser. Mantenuta per [Spam Scanner][spam-scanner] e [Forward Email][forward-email].
Dopo aver scoperto [CVE-2020-7661][cve] e averla divulgata pubblicamente (grazie al mio lavoro su [Spam Scanner][spam-scanner] e [Forward Email][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][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][forward-email] ed esplora il nostro codice sorgente su GitHub, che mostra come utilizziamo questo pacchetto.
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][]:
npm install url-regex-safe
Abbiamo risolto [CVE-2020-7661][cve] 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).
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'));
Poiché [RE2][] non è pensato per il browser, non verrà utilizzato e quindi [CVE-2020-7661][cve] è 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).
Questa è la soluzione per te se stai semplicemente usando tag <script> ovunque!
<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>
Se stai usando [browserify][], [webpack][], [rollup][] o un altro bundler, puoi semplicemente seguire l'utilizzo di Node qui sopra.
Per usare questo pacchetto con TypeScript, puoi installare il pacchetto @types/url-regex-safe per le definizioni dei tipi.
npm install --save-dev @types/url-regex-safe