
Correspondance par expression régulière pour les URLs. Version maintenue, sûre et compatible navigateur de url-regex. Résout CVE-2020-7661 pour les serveurs Node.js.
Expression régulière pour la correspondance d'URL. Version maintenue, sécurisée et compatible navigateur de [url-regex][]. Résout [CVE-2020-7661][cve] pour les serveurs Node.js. Fonctionne avec Node v14+ et les navigateurs. Maintenu pour [Spam Scanner][spam-scanner] et [Forward Email][forward-email].
Après avoir découvert [CVE-2020-7661][cve] et l'avoir divulguée publiquement (dans le cadre de mon travail sur [Spam Scanner][spam-scanner] et [Forward Email][forward-email]) – j'ai utilisé une implémentation de [url-regex][] avec quelques ajustements supplémentaires pour filtrer les correspondances d'URL incorrectes.
Cependant, après l'avoir utilisée sur [Forward Email][forward-email] en production (qui traite des centaines de milliers d'e-mails par semaine), j'ai découvert et documenté plusieurs problèmes fondamentaux supplémentaires avec [url-regex][].
Réalisant que [url-regex][] n'est plus activement maintenu, a 9 demandes d'extraction ouvertes à ce jour, et manque également de support pour les navigateurs – j'ai décidé d'écrire ce package pour tout le monde et de fusionner toutes les demandes d'extraction ouvertes.
Ce package devrait, espérons-le, ressembler davantage à l'utilisation réelle prévue d'une expression régulière d'URL, et permettre également à l'utilisateur de le configurer comme il le souhaite. Veuillez consulter [Forward Email][forward-email] si ce package vous a aidé, et explorez notre code source sur GitHub qui montre comment nous utilisons ce package.
REMARQUE : Le comportement par défaut de ce package tentera de charger re2 (il s'agit d'une dépendance optionnelle de pair utilisée pour empêcher les attaques par déni de service par expression régulière et autres). Si vous souhaitez utiliser ce comportement, vous devez avoir re2 installé via npm install re2 – sinon il utilisera par défaut des instances RegExp normales. À partir de la v4.0.0, nous avons ajouté une option si vous souhaitez forcer ce package à ne même pas tenter de charger re2 (par exemple, s'il se trouve dans votre node_modules mais que vous ne voulez pas l'utiliser) – transmettez simplement re2: false comme option.
[npm][] :
npm install url-regex-safe
Nous avons résolu [CVE-2020-7661][cve] en incluant [RE2][] pour une utilisation avec Node.js. Vous n'aurez plus à envelopper manuellement vos expressions régulières d'URL avec new RE2(urlRegex()) grâce à url-regex-safe (nous le faisons automatiquement pour vous).
const urlRegexSafe = require('url-regex-safe');
const str = 'une longue chaîne avec url.com dedans';
const matches = str.match(urlRegexSafe());
for (const match of matches) {
console.log('correspondance', match);
}
console.log(urlRegexSafe({ exact: true }).test('github.com'));
Comme [RE2][] n'est pas conçu pour le navigateur, il ne sera pas utilisé, et donc [CVE-2020-7661][cve] reste toujours un problème côté client. Cependant, il n'est pas grave car au pire il ferait planter l'onglet du navigateur (alors que côté Node.js, il aurait fait planter tout le processus et levé une exception de mémoire insuffisante).
C'est la solution pour vous si vous utilisez simplement des balises <script> partout !
<script src="https://unpkg.com/url-regex-safe"></script>
<script type="text/javascript">
(function() {
var str = 'une longue chaîne avec url.com dedans';
var matches = str.match(urlRegexSafe());
for (var i=0; i<matches.length; i++) {
console.log('correspondance', matches[i]);
}
console.log(urlRegexSafe({ exact: true }).test('github.com'));
})();
</script>
En supposant que vous utilisez [browserify][], [webpack][], [rollup][] ou un autre bundler, vous pouvez simplement suivre l'utilisation Node ci-dessus.
Pour utiliser ce package avec TypeScript, vous pouvez installer le package @types/url-regex-safe pour les définitions de types.
npm install --save-dev @types/url-regex-safe