[JavaScript] 정규식 예제 (feat. E-mail, 주민번호)

2020. 10. 7. 13:40·Web/Javascript

 

우선, 정규식을 작성하고 

바로바로 테스트 결과와 디버깅을 할 수 있는 사이트를 소개한다.

 

RegExr: Learn, Build, & Test RegEx

RegExr is an online tool to learn, build, & test Regular Expressions (RegEx / RegExp).

regexr.com

정규식은 로그인, 회원가입 기능에서 입력 형식의 유효성 검사를 하는데도 자주 쓰이지만

해커로부터 오는 공격 트레픽중 특정 구문을 차단하기위해서도 쓰인다.

문제풀이를 하면서 정규식에 익숙해져보자.


[문제1] E-mail

"hacker"라는 문자열을 포함한 아이디를 가진 이메일 주소를 정규식으로 잡아내고싶다.
단, 이메일의 아이디는 영문 소문자+숫자로만 이루어진다.
조건에 부합하는 정규식을 작성하라.

[해답1]

\d*(hacker)\d*[@]([a-z]+\.)+(com|net|kr)

\d*(hacker)\d* : hacker 라는 문자열 앞뒤에 정수 숫자가 올 수 있고

[@] : 이메일 형식에 반드시 '@'를 포함한다.

([a-z]+\.): 영문 소문자에.을 포함하고

마지막 자리는 com or net or kr 로 끝난다.

 


[문제2]

입력값이 유효한 주민번호인지 검사한다.
주민번호 생년월일중 월은 당연히 1~12, 일은 1~31 값이 들어올 수 있다.
주민번호 뒷자리의 첫글자는 1~4만 가능하고 
앞/뒷자리를 구분하는 하이픈(-)은 있을 수도, 없을 수도 있다.

 

[해답2]

\d{2}([0]\d|[1][0-2])([0][1-9]|[1-2]\d|[3][0-1])[-]*[1-4]\d{6}

\d{2} : 맨앞 정수 2자리(생년)는 어떤 정수값이 와도 상관없다.

([0]\d|[1][0-2]) : 첫자리가 0인경우는 뒤에 어떤 정수가 와도 괜찮다. ,, 첫자리가 1인경우 뒷자리는 0,1,2만 올수있다. 

 // (01-12 생월을 표현)

([0][1-9]|[1-2]\d|[3][0-1]) : 생일은 첫자리가 0이면 뒷자리가 0이될경우 0일이 되기 때문에 0다음에는 1-9만 올 수있다.

[-]* : 하이픈은 0개 or 1개다.

[1-4] : 주민번호 뒷자리 첫번째 숫자는 1~4만 갖는다.

\d{6} : 주민번호 첫자리를 제외한 숫자는 총 6자리다.

 

 

올바른 주민번호 형식만 걸러낸다.


[문제3]

출처 : malware-traffic-analysis.net/2020/07/21/index.html

 

해당 사이트에서 2020-07-21-Emotet-infection-with-Qakbot.pcap 파일을 Wireshark로 열어보자.
첫 HTTP Request 패킷의 TCP Stream을 보며
HTTP Request / Response 에서 특정 부분을 패턴을 지정하여 막을 수 있는 Snort Rule을 작성하라.

 

 

TCP Stream을 확인해보자.

GET /blogs/JB5HY27RGXBM90/ HTTP/1.1
Host: umeedupvanfoundation.com
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36 Edg/84.0.522.40
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9

HTTP/1.1 200 OK
Cache-Control: no-cache, must-revalidate
Pragma: no-cache
Content-Type: application/msword
Expires: Tue, 21 Jul 2020 14:47:54 GMT
Last-Modified: Tue, 21 Jul 2020 14:47:54 GMT
Server: Microsoft-IIS/8.5
Set-Cookie: 5f17001adb80f=1595342874; expires=Tue, 21-Jul-2020 14:48:54 GMT; Max-Age=60; path=/
Content-Disposition: attachment; filename="RSH_070120_FLV_072120.doc"
Content-Transfer-Encoding: binary
X-Powered-By: ASP.NET
X-Powered-By-Plesk: PleskWin
Date: Tue, 21 Jul 2020 14:47:53 GMT
Content-Length: 175150

 

문제3_1) Request 메시지중에  난수 14자리를 탐지하는  Snort Rule로 표현하라.

저 난수 14자리는 고정이다.

정규식 표현 구문

GET[\s][/]blogs[/]+[\w\W]{14}

[해답3_1] Snort Rule (Request)

# alert tcp  $EXTERNAL_NET any -> $HOME_NET $HTTP_PORTS // (외부 -> 내부)
(msg:"File Download Vulernability"; 
flow:to_server,established; content:"admin";
pcre:"/GET[\s][/]blogs[/]+[\w\W]{14}"  // 여기 정규식 표현이 핵심이다.
http_header; content:"admin"; 
distance:0; http_header; metadata:policy max-detect-ips drop, service http; 
reference:cve,2013-1305; reference:url,technet.microsoft.com/en-us/security/bulletin/ms13-039; 
classtype:attempted-dos; sid:26635; rev:3;)

 


 

문제3_2) Response 메시지중에 filename=~~~~~6자리 숫자 난수.doc 는 고정이다. 해당 메시지를 탐지하는 Snort Rule로 표현하라.

정규식 표현 구문

(filename=")+[\w]*([\d]{6}[\.]doc["])

[해답 3_2 ] Snort Rule (Response)

# alert tcp  $HOME_NET $HTTP_PORTS -> $EXTERNAL_NET any  // 내부 웹 서버->외부 
(msg:"File Download Vulernability"; 
flow:to_client,established; content:"admin";
pcre:"(filename=")+[\w]*([\d]{6}[\.]doc["])" //정규식
http_header; content:"admin"; 
distance:0; http_header; metadata:policy max-detect-ips drop, service http; 
reference:cve,2013-1305; reference:url,technet.microsoft.com/en-us/security/bulletin/ms13-039; 
classtype:attempted-dos; sid:26636; rev:3;)

 


🔗 Reference

medium.com/@chrisjune_13837/%EC%A0%95%EA%B7%9C%EC%8B%9D-%ED%8A%9C%ED%86%A0%EB%A6%AC%EC%96%BC-%EC%98%88%EC%A0%9C%EB%A5%BC-%ED%86%B5%ED%95%9C-cheatsheet-%EB%B2%88%EC%97%AD-61c3099cdca8
developer.mozilla.org/ko/docs/Web/JavaScript/Guide/%EC%A0%95%EA%B7%9C%EC%8B%9D

 

저작자표시 (새창열림)

'Web > Javascript' 카테고리의 다른 글

[Javascript] Array.reduce  (0) 2020.11.14
[JavaScript] Object set 'key' using variable  (0) 2020.11.01
window.open()  (0) 2020.02.27
Window 브라우저 객체  (0) 2020.02.27
[javascript] style property handling error  (0) 2020.02.22
'Web/Javascript' 카테고리의 다른 글
  • [Javascript] Array.reduce
  • [JavaScript] Object set 'key' using variable
  • window.open()
  • Window 브라우저 객체
M_Falcon
M_Falcon
  • M_Falcon
    Falcon
    M_Falcon
  • 전체
    오늘
    어제
    • 분류 전체보기 (432)
      • Web (16)
        • Nodejs (14)
        • Javascript (23)
        • FrontEnd (4)
      • DataBase (39)
        • Fundamental (1)
        • Redis (4)
        • PostgreSQL (10)
        • NoSQL (4)
        • MySQL (9)
        • MSSQL (3)
        • Error (4)
      • Algorithm (79)
        • Algorithm (문제풀이) (56)
        • Algorithm (이론) (23)
      • JVM (65)
        • Spring (13)
        • JPA (5)
        • Kotlin (13)
        • Java (24)
        • Error (7)
      • 기타 (70)
        • Kafka (3)
        • Kubernetes (3)
        • Docker (13)
        • git (19)
        • 잡동사니 (27)
      • 재테크 (11)
        • 세무 (4)
        • 투자 (3)
        • 보험 (0)
      • BlockChain (2)
        • BitCoin (0)
      • C (32)
        • C (10)
        • C++ (17)
        • Error (3)
      • Low Level (8)
        • OS (3)
        • 시스템 보안 (5)
      • 네트워크 (3)
      • LINUX (30)
        • Linux (26)
        • Error (4)
      • 저작권과 스마트폰의 이해 (0)
      • 생각 뭉치 (6)
      • 궁금증 (2)
      • Private (4)
        • 이직 경험 (0)
        • 꿈을 찾아서 (1)
      • Android (21)
        • OS (4)
  • 블로그 메뉴

    • 홈
    • WEB
    • 알고리즘
    • DataBase
    • Linux
    • Mobile
    • C
    • 방명록
  • 링크

    • github
  • 공지사항

  • 인기 글

  • 태그

    Programmers
    알고리즘
    Git
    docker
    PostgreSQL
    javascript
    android
    백준
    Bitcoin
    database
    algorithm
    ubuntu
    C++
    Spring
    프로그래머스
    Kotlin
    kafka
    JPA
    linux
    java
  • hELLO· Designed By정상우.v4.10.3
M_Falcon
[JavaScript] 정규식 예제 (feat. E-mail, 주민번호)
상단으로

티스토리툴바