
Abgleich von URLs mit regulären Ausdrücken. Gepflegte, sichere und browserfreundliche Version von url-regex. Behebt CVE-2020-7661 für Node.js-Server.
Regulärer Ausdruck zum Abgleich von URLs. Gepflegte, sichere und browserfreundliche Version von [url-regex][]. Löst [CVE-2020-7661][cve] für Node.js-Server. Funktioniert in Node v14+ und Browsern. Gepflegt für [Spam Scanner][spam-scanner] und [Forward Email][forward-email].
Nach der Entdeckung von [CVE-2020-7661][cve] und der öffentlichen Offenlegung (durch meine Arbeit an [Spam Scanner][spam-scanner] und [Forward Email][forward-email]) – habe ich eine Implementierung von [url-regex][] mit etwas zusätzlichem Kleber verwendet, um ungültige URL-Übereinstimmungen herauszufiltern.
Nachdem ich es jedoch in der Produktion bei [Forward Email][forward-email] (das Hunderttausende E-Mails pro Woche verarbeitet) eingesetzt habe, fand und dokumentierte ich mehrere weitere Kernprobleme mit [url-regex][].
Da [url-regex][] nicht mehr aktiv gepflegt wird, zum Zeitpunkt dieses Schreibens 9 offene Pull Requests hat und auch keine Browser-Unterstützung bot, entschied ich mich, dieses Paket für alle zu schreiben und alle offenen Pull Requests zusammenzuführen.
Dieses Paket sollte hoffentlich eher der realen beabsichtigten Verwendung eines URL-Regulärausdrucks entsprechen und dem Benutzer ermöglichen, es nach Wunsch zu konfigurieren. Bitte schauen Sie sich [Forward Email][forward-email] an, wenn Ihnen dieses Paket geholfen hat, und erkunden Sie unseren Quellcode auf GitHub, der zeigt, wie wir dieses Paket verwenden.
HINWEIS: Das Standardverhalten dieses Pakets versucht, re2 zu laden (es ist eine optionale Peer-Abhängigkeit, die verwendet wird, um Denial-of-Service-Angriffe durch reguläre Ausdrücke und mehr zu verhindern). Wenn Sie dieses Verhalten nutzen möchten, müssen Sie re2 über npm install re2 installiert haben – andernfalls wird auf normale RegExp-Instanzen zurückgegriffen. Ab Version 4.0.0 haben wir eine Option hinzugefügt, falls Sie dieses Paket zwingen möchten, nicht einmal zu versuchen, re2 zu laden (z. B. wenn es in Ihrem node_modules ist, Sie es aber nicht verwenden möchten) – übergeben Sie einfach re2: false als Option.
[npm][]:
npm install url-regex-safe
Wir haben [CVE-2020-7661][cve] behoben, indem wir [RE2][] für die Node.js-Nutzung eingebunden haben. Sie müssen Ihre URL-Regulärausdrücke nicht mehr manuell mit new RE2(urlRegex()) umschließen, wenn Sie url-regex-safe verwenden (das erledigen wir automatisch für Sie).
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'));
Da [RE2][] nicht für den Browser entwickelt wurde, wird es nicht verwendet, und daher ist [CVE-2020-7661][cve] auf der Client-Seite weiterhin ein Problem. Es ist jedoch nicht schwerwiegend, da es im schlimmsten Fall nur den Browser-Tab zum Absturz bringt (während es auf der Node.js-Seite den gesamten Prozess zum Absturz gebracht und eine Out-of-Memory-Ausnahme ausgelöst hätte).
Dies ist die Lösung für Sie, wenn Sie einfach überall <script>-Tags verwenden!
<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>
Angenommen, Sie verwenden [browserify][], [webpack][], [rollup][] oder einen anderen Bundler, können Sie einfach der Node-Nutzung oben folgen.
Um dieses Paket mit TypeScript zu verwenden, können Sie das Paket @types/url-regex-safe für Typdefinitionen installieren.
npm install --save-dev @types/url-regex-safe