
Expresión regular para coincidencia de URLs. Versión mantenida, segura y compatible con navegadores de url-regex. Resuelve CVE-2020-7661 para servidores Node.js.
Expresión regular para coincidir con URLs. Versión mantenida, segura y compatible con navegadores de [url-regex][]. Resuelve [CVE-2020-7661][cve] para servidores Node.js. Funciona en Node v14+ y navegadores. Mantenido para [Spam Scanner][spam-scanner] y [Forward Email][forward-email].
Después de descubrir [CVE-2020-7661][cve] y revelarlo públicamente (a través de mi trabajo en [Spam Scanner][spam-scanner] y [Forward Email][forward-email]) – usé una implementación de [url-regex][] con algo de lógica adicional encima para filtrar coincidencias de URL no deseadas.
Sin embargo, después de usarlo en [Forward Email][forward-email] en producción (que procesa cientos de miles de correos electrónicos por semana), encontré y documenté varios problemas principales más con [url-regex][].
Al darme cuenta de que [url-regex][] ya no se mantiene activamente, tiene 9 solicitudes de extracción abiertas al momento de escribir esto, y además carecía de soporte para navegadores – decidí escribir este paquete para todos y fusionar todas las solicitudes de extracción abiertas.
Es de esperar que este paquete se parezca más al uso real que se le daría a una expresión regular de URL, y que además permita al usuario configurarlo como desee. Por favor, echa un vistazo a [Forward Email][forward-email] si este paquete te ayudó, y explora nuestro código fuente en GitHub, que muestra cómo usamos este paquete.
NOTA: El comportamiento predeterminado de este paquete intentará cargar re2 (es una dependencia opcional entre pares utilizada para prevenir ataques de denegación de servicio por expresión regular y más). Si deseas usar este comportamiento, debes tener re2 instalado mediante npm install re2 – de lo contrario, recurrirá a usar instancias normales de RegExp. A partir de v4.0.0 agregamos una opción si deseas forzar a este paquete a que ni siquiera intente cargar re2 (por ejemplo, si está en tu node_modules pero no quieres usarlo) – simplemente pasa re2: false como opción.
[npm][]:
npm install url-regex-safe
Hemos resuelto [CVE-2020-7661][cve] incluyendo [RE2][] para uso en Node.js. Ya no tendrás que envolver manualmente tus expresiones regulares de URL con new RE2(urlRegex()) a través de url-regex-safe (lo hacemos automáticamente por ti).
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'));
Dado que [RE2][] no está hecho para el navegador, no se usará y, por lo tanto, [CVE-2020-7661][cve] sigue siendo un problema en el lado del cliente. Sin embargo, no es grave, ya que lo máximo que podría hacer es bloquear la pestaña del navegador (mientras que en el lado de Node.js habría bloqueado todo el proceso y lanzado una excepción de falta de memoria).
¡Esta es la solución para ti si solo usas etiquetas <script> en todas partes!
<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>
Asumiendo que usas [browserify][], [webpack][], [rollup][] u otro bundler, simplemente puedes seguir el uso de Node anterior.
Para usar este paquete con TypeScript, puedes instalar el paquete @types/url-regex-safe para las definiciones de tipos.
npm install --save-dev @types/url-regex-safe