Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
url-regex-safe — URL용 정규식 매칭. url-regex의 유지 관리되고 안전하며 브라우저 친화적인 버전입니다. Node.js 서버의 CVE-2020-7661을 해결합니다. | Kitploit
도구/GitHubGitHub/spamscanner/url-regex-safe
General Purpose UtilitiesStatic AnalysisVulnerability AnalysisScripting & AutomationWeb Security
GitHubspamscanner/url-regex-safe

url-regex-safe

URL용 정규식 매칭. url-regex의 유지 관리되고 안전하며 브라우저 친화적인 버전입니다. Node.js 서버의 CVE-2020-7661을 해결합니다.

저장소 보기
81163년 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
웹사이트

url-regex-safe

build status code style styled with prettier made with lass license npm downloads

URL을 위한 정규식 매칭. url-regex의 유지 관리되는 안전한 브라우저 친화적 버전입니다. Node.js 서버용 CVE-2020-7661을 해결합니다. Node v14+ 및 브라우저에서 작동합니다. Spam Scanner 및 Forward Email을 위해 유지 관리됩니다.

목차

  • 머리말
  • 설치
  • 사용법
    • Node
    • 브라우저
  • 옵션
  • url-regex에서의 빠른 팁과 마이그레이션
  • 제한 사항
  • 기여자
  • 라이선스

머리말

CVE-2020-7661을 발견하고 (Spam Scanner 및 Forward Email에서의 작업을 통해) 공개적으로 공개한 후 – 잘못된 URL 매치를 걸러내기 위해 url-regex 구현체에 약간의 추가 접착 코드를 더해 사용했습니다.

그러나 주당 수십만 통의 이메일을 처리하는 Forward Email 프로덕션에서 사용한 후, url-regex에서 핵심 문제 몇 가지를 더 발견하고 문서화했습니다.

url-regex가 더 이상 활발히 유지 관리되지 않고, 이 글을 쓰는 시점에 9개의 열린 풀 리퀘스트가 있으며, 브라우저 지원도 부족하다는 것을 깨닫고 – 이 패키지를 모든 사람을 위해 작성하고 모든 열린 풀 리퀘스트를 병합하기로 결정했습니다.

이 패키지는 URL 정규식의 실제 의도된 사용 방식에 더 가깝게 동작하고, 사용자가 원하는 대로 구성할 수도 있기를 바랍니다. 이 패키지가 도움이 되었다면 Forward Email을 확인해 주시고, GitHub에서 이 패키지를 어떻게 사용하는지 보여주는 소스 코드도 살펴보세요.

설치

참고: 이 패키지의 기본 동작은 re2를 로드하려 시도합니다 (정규식 서비스 거부 공격 등을 방지하는 데 사용되는 선택적 peer dependency입니다). 이 동작을 사용하려면 npm install re2를 통해 re2를 설치해야 합니다. 그렇지 않으면 일반 RegExp 인스턴스를 사용하도록 대체됩니다. v4.0.0부터는 이 패키지가 re2 로드를 시도조차 하지 않도록 강제하려는 경우를 위한 옵션을 추가했습니다 (예: node_modules에 있지만 사용하고 싶지 않은 경우) – 옵션으로 re2: false를 전달하기만 하면 됩니다.

npm:

root@kitploit:~
npm install url-regex-safe

사용법

Node

Node.js 사용을 위해 RE2를 포함하여 CVE-2020-7661을 해결했습니다. 이제 url-regex-safe를 통해 URL 정규식을 수동으로 new RE2(urlRegex())로 감쌀 필요가 없습니다 (자동으로 처리합니다).

root@kitploit:~
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은 여전히 클라이언트 측 문제입니다. 그러나 최악의 경우 브라우저 탭이 충돌할 뿐이므로 심각하지 않습니다 (Node.js 측에서는 전체 프로세스가 충돌하고 메모리 부족 예외가 발생했을 것입니다).

VanillaJS

모든 곳에서 <script> 태그만 사용하고 있다면 이것이 해결책입니다!

root@kitploit:~
<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

이 패키지를 TypeScript와 함께 사용하려면 타입 정의를 위해 @types/url-regex-safe 패키지를 설치할 수 있습니다.

root@kitploit:~
npm install --save-dev @types/url-regex-safe

옵션

url-regex에서의 빠른 팁과 마이그레이션

github.com 자체를 매치하고 싶지 않다면 기본값을 재정의하여 strict: true로 설정해야 합니다 (strict: false에서도 www.github.com은 작동합니다).

더 이상 사용되지 않고 유지 관리되지 않는 url-regex 패키지와 달리 몇 가지를 다르게 처리합니다:

  • 기본적으로 strict를 false로 설정합니다 (url-regex는 true로 설정되어 있었습니다)
  • auth 옵션을 추가했으며 기본값은 false입니다 (url-regex는 Basic Authentication과 매치했으며 true로 설정되어 있었습니다 - 그러나 이는 Chromium에서 더 이상 사용되지 않는 동작입니다).
  • parens 및 ipv6 옵션을 추가했으며 기본값은 각각 false와 true입니다 (url-regex는 parens가 true로 설정되어 있었고 ipv6는 존재하지 않거나 false로 설정되어 있었습니다).

제한 사항

이 제한 사항은 re2를 사용하는 경우에만 적용됩니다: RE2 제한으로 인해 정규식의 "negative lookbehind" 기능을 사용할 수 없으므로 이 풀 리퀘스트의 로직을 병합할 수 없었습니다. 이 로직을 통해 example.jpeg는 example.jp인 경우에만 매치되도록 할 수 있었겠지만, 지금 example.jpeg를 전달하면 .jp가 TLD이므로 example.jp가 추출됩니다. 대안적인 해결책이 존재할 수 있으며, 이 문제에 대한 커뮤니티 기여를 환영합니다.

기여자

이름웹사이트
Forward Email LLChttps://forwardemail.net
Kevin Mårtensson
Diego Perini

라이선스

MIT © Forward Email LLC

도구 다운로드
속성유형기본값설명
re2Booleantrue새 정규식 인스턴스를 만들 때 RegExp 대신 사용할 re2를 로드하려 시도합니다. re2: false를 전달하면 re2 로드가 시도조차 되지 않습니다.
exactBooleanfalse정확한 문자열만 매치합니다. 문자열이 URL인지 확인하는 regex.test(str)과 함께 유용합니다. github.com과 같은 문자열 값을 매치하기 위해 기본값을 false로 설정했습니다 (프로토콜이나 www 하위 도메인을 요구하는 대신). 이것이 이 패키지의 실제 의도된 사용 방식에 더 가깝다고 생각합니다.
strictBooleanfalsetrue로 설정하면 URL이 유효한 프로토콜 또는 www로 시작하도록 강제합니다. true이면 최소 2개의 유효한 문자만 있으면 모든 TLD를 허용합니다. false이면 tlds를 사용하여 유효한 TLD 목록과 대조하여 매치합니다.
authBooleanfalseBasic Authentication 헤더와 매치합니다. Chromium에서 더 이상 사용되지 않으므로 기본값을 false로 설정했습니다. 그렇지 않으면 사용자에게 원치 않는 URL 매치가 남게 됩니다 (기본값도 false로 설정하여 이 패키지의 실제 의도된 사용 방식에 더 가깝게 했습니다).
localhostBooleantrueURL 호스트명 부분에서 localhost를 허용합니다. localhost 테스트와 원치 않을 수 있는 값을 반환하는 방식에 대한 자세한 내용은 test/test.js를 참조하세요. "pic.jp" 대 "pic.jpg" 문제를 해결하기 위한 풀 리퀘스트가 고려될 것입니다.
parensBooleanfalseMarkdown 스타일의 후행 괄호와 매치합니다. Markdown URL 구문 분석은 사용자의 몫이어야 하므로 false로 설정했습니다.
apostrophesBooleanfalse아포스트로피와 매치합니다. background: url('http://example.com/pic.jpg'); 문자열이 http://example.com/pic.jpg'로 매치되는 것을 원하지 않기 때문에 false로 설정했습니다. 자세한 내용은 이 이슈를 참조하세요.
trailingPeriodBooleanfalse후행 마침표와 매치합니다. 실제 동작에서는 example.com. 대신 example.com이 매치되기를 원하므로 기본값을 false로 설정했습니다 (해당 패키지에서 후행 마침표를 매치하는 url-regex와 다릅니다).
ipv4BooleantrueIPv4 URL과 매치합니다.
ipv6BooleantrueIPv6 URL과 매치합니다.
tldsArraytlds특정 tlds 목록 또는 tlds에서 제공하는 기본 목록과 매치합니다.
returnStringBooleanfalseRegExp 대신 문자열로 RegExp를 반환합니다 (Spam Scanner에서 했던 것처럼 사용자 정의 로직에 유용합니다).
  • apostrophe 옵션을 추가했으며 기본값은 false입니다 (url-regex는 true로 설정되어 있었습니다).
  • trailingPeriod 옵션을 추가했으며 기본값은 false입니다 (매치에 후행 마침표가 포함되지 않음을 의미하며, url-regex는 true로 설정되어 있었습니다).