Web Hacking/Study

정규 표현식

박연준 2023. 7. 1. 23:27

  • 정규 표현식(regular expression, regexp, regex)은 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어이다.
  • 만약 DREAM-무작위 숫자 형태의 입력 데이터를 검증하고 싶은 경우 정규 표현식을 사용해 손쉽게 구현할 수 있다.
    function DREAMChecker(value){
      var re = /DREAM-\d+/;
      var OK = re.exec(value);
      if (OK) {
        console.log(OK[0]);
      } else {
        console.log("Not Found");
      }
    }
    DREAMChecker("DREAM-1");     // DREAM-1
    DREAMChecker("DREAM-31337"); // DREAM-31337
    DREAMChecker("DREAM-A");     // Not Found
    DREAMChecker("DREAM-123A");  // DREAM-123
  • /DREAM-\d+/ 의 정규식을 통해 원하는 데이터 형태를 검증하는 것을 확인할 수 있다.
  • \d+는 정규 표현식에서 특별한 의미를 가지는 문법 중 하나이다.
  • \d는 Any Digit 즉 숫자를 의미하며, + One or More 즉 하나 이상인 경우를 의미한다.
  • 두 문법이 합쳐지면 숫자가 하나 이상인 경우를 의미하며 다양한 숫자를 검증할 수 있다.

정규 표현식 문법

  • Character Classes
    문법설명예시 코드결과
    [ab]Single Character,한 문자와 매칭되는 문자에 대해서 탐색합니다.[ab]cab ac bc
    [^ab]Character Except,한 문자와 매칭되지 않는 문자에 대해 탐색합니다.[^ab]cab ac bc dc ec
    [a-z],[A-Z],[0-9]Character Range,특정 문자열 범위에 대해서 탐색합니다.[a-f] [A-C] [^2-5]abcdefghijk abcABCDEF 123456789
  • Quantifiers
    문법설명예시 코드결과
    ?Zero or One, 해당 조건이 존재하지 않거나 한번만 존재하는 문자를 탐색합니다.abc?ab abc abd abcc
    *Zero or More, 해당 조건이 존재하지 않거나 하나 이상 존재하는 문자를 탐색합니다.abc*ab abc abd abcc
    +One or More, 해당 조건이 하나 이상 존재하는 문자를 탐색합니다.abc+ab abc abd abcc
    {N,N}Length, 해당 조건의 길이를 지정합니다. {3}은 길이가 3인 경우를 의미 합니다. {3,}은 3개 이상을 의미합니다. {3,6}은 길이가 3개와 6개 사이인 경우를 의미합니다.a{2,3}a aa aaa aaaa
  • Meta Sequences
    문법설명예시 코드결과
    .Any Single Character, 하나의 문자열로 대체합니다.ab.cabc adc aac abd
    |Matches either, 입력 문자 중 하나라도 만족하는 경우를 탐색합니다.[a|c]bab aa cb ac
    \s, \S\소문자 s는 whitespace를 의미한다. 대문자 S는 whitespace를 제외한 문자열을 의미한다.
    \d, \D소문자 d는 숫자를 의미한다. 대문자 D는 숫자가 아닌 문자열을 의미한다.
  • Anchors
    문법설명예시 코드결과
    ^Start of string, 문자열의 시작을 의미합니다.^abcabc babc
    $End of string, 문자열의 끝을 의미합니다.abc$abc aabc aabcd

정규 표현식 Flags

  • 정규 표현식은 Flag를 통해 전체 문법에 대한 특정한 옵션을 추가하여 사용할 수 있다.
    Flag설명예시 코드결과
    gglobal, 매칭되는 모든 문자를 탐색합니다./abc/ /abc/gabc abc abc abc
    mmulti line, ^$ 사용 시 각 라인 마다 각각 탐색합니다./^\d/gm1 2 3
    iinsensitive, 대소문자를 구분하지 않는다./abc/giabc ABC

'Web Hacking > Study' 카테고리의 다른 글

ExploitTech: Blind SQL Injection Advanced  (0) 2023.07.01
Background: SQL Features  (0) 2023.07.01
File Download 취약점과 대응방안  (0) 2023.07.01
File Upload 취약점과 대응방안  (0) 2023.07.01
SQL Injection 실습(2)  (0) 2023.07.01