
URL용 정규식 매칭. url-regex의 유지 관리되고 안전하며 브라우저 친화적인 버전입니다. Node.js 서버의 CVE-2020-7661을 해결합니다.
URL을 위한 정규식 매칭. [url-regex][]의 유지 관리되는 안전한 브라우저 친화적 버전입니다. Node.js 서버용 [CVE-2020-7661][cve]을 해결합니다. Node v14+ 및 브라우저에서 작동합니다. [Spam Scanner][spam-scanner] 및 [Forward Email][forward-email]을 위해 유지 관리됩니다.
[CVE-2020-7661][cve]을 발견하고 ([Spam Scanner][spam-scanner] 및 [Forward Email][forward-email]에서의 작업을 통해) 공개적으로 공개한 후 – 잘못된 URL 매치를 걸러내기 위해 [url-regex][] 구현체에 약간의 추가 접착 코드를 더해 사용했습니다.
그러나 주당 수십만 통의 이메일을 처리하는 [Forward Email][forward-email] 프로덕션에서 사용한 후, [url-regex][]에서 핵심 문제 몇 가지를 더 발견하고 문서화했습니다.
[url-regex][]가 더 이상 활발히 유지 관리되지 않고, 이 글을 쓰는 시점에 9개의 열린 풀 리퀘스트가 있으며, 브라우저 지원도 부족하다는 것을 깨닫고 – 이 패키지를 모든 사람을 위해 작성하고 모든 열린 풀 리퀘스트를 병합하기로 결정했습니다.
이 패키지는 URL 정규식의 실제 의도된 사용 방식에 더 가깝게 동작하고, 사용자가 원하는 대로 구성할 수도 있기를 바랍니다. 이 패키지가 도움이 되었다면 [Forward Email][forward-email]을 확인해 주시고, GitHub에서 이 패키지를 어떻게 사용하는지 보여주는 소스 코드도 살펴보세요.
참고: 이 패키지의 기본 동작은 re2를 로드하려 시도합니다 (정규식 서비스 거부 공격 등을 방지하는 데 사용되는 선택적 peer dependency입니다). 이 동작을 사용하려면 npm install re2를 통해 re2를 설치해야 합니다. 그렇지 않으면 일반 RegExp 인스턴스를 사용하도록 대체됩니다. v4.0.0부터는 이 패키지가 re2 로드를 시도조차 하지 않도록 강제하려는 경우를 위한 옵션을 추가했습니다 (예: node_modules에 있지만 사용하고 싶지 않은 경우) – 옵션으로 re2: false를 전달하기만 하면 됩니다.
[npm][]:
npm install url-regex-safe
Node.js 사용을 위해 [RE2][]를 포함하여 [CVE-2020-7661][cve]을 해결했습니다. 이제 url-regex-safe를 통해 URL 정규식을 수동으로 new RE2(urlRegex())로 감쌀 필요가 없습니다 (자동으로 처리합니다).
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'));
[RE2][]는 브라우저용이 아니므로 사용되지 않으며, 따라서 [CVE-2020-7661][cve]은 여전히 클라이언트 측 문제입니다. 그러나 최악의 경우 브라우저 탭이 충돌할 뿐이므로 심각하지 않습니다 (Node.js 측에서는 전체 프로세스가 충돌하고 메모리 부족 예외가 발생했을 것입니다).
모든 곳에서 <script> 태그만 사용하고 있다면 이것이 해결책입니다!
<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>
[browserify][], [webpack][], [rollup][] 또는 다른 번들러를 사용하고 있다면 위의 Node 사용법을 따르면 됩니다.
이 패키지를 TypeScript와 함께 사용하려면 타입 정의를 위해 @types/url-regex-safe 패키지를 설치할 수 있습니다.
npm install --save-dev @types/url-regex-safe