행복중입니다

Redos ( Regular expression Denial of Service ) 대응관련 모듈

· 2021-09-23 (목) 20:38:27 · 2145

1. Redos ( Regular expression Denial of Service )의 정의 및 대응방안

 

 - 역추적 알고리즘 기반으로된 정규식의 취약점을 이용하여 서버의 자원을 상당부분 차지하여 서버를 마비시키는 공격 

 - 역추적 알고리즘 기반의 정규식이 아닌 automata 알고리즘을 사용한 google re2 사용 권장

 

2. google re2 특징 

 

- Re2는 automata 이론을 사용하여 정규식 입력 검색에서 선형시간에 실행되도록 보장

- 메모리 제한을 구현하여 정규식 검색시 한정된 메모리 양으로 제한

   => 정규식인해 서버다운될 일이 없을것 같습니다.

 

3. 설치

 

설치법은 간단합니다.

[code]

npm install --save re2

[/code]

 

 

4. 사용법

 

[code]

var RE2 = require("re2");

// with default flags
var re = new RE2("a(b*)");
var result = re.exec("abbc");
console.log(result[0]); // "abb"
console.log(result[1]); // "bb"

result = re.exec("aBbC");
console.log(result[0]); // "a"
console.log(result[1]); // ""

// with explicit flags
re = new RE2("a(b*)", "i");
result = re.exec("aBbC");
console.log(result[0]); // "aBb"
console.log(result[1]); // "Bb"

// from regular expression object
var regexp = new RegExp("a(b*)", "i");
re = new RE2(regexp);
result = re.exec("aBbC");
console.log(result[0]); // "aBb"
console.log(result[1]); // "Bb"

// from regular expression literal
re = new RE2(/a(b*)/i);
result = re.exec("aBbC");
console.log(result[0]); // "aBb"
console.log(result[1]); // "Bb"

// from another RE2 object
var rex = new RE2(re);
result = rex.exec("aBbC");
console.log(result[0]); // "aBb"
console.log(result[1]); // "Bb"

// shortcut
result = new RE2("ab*").exec("abba");

// factory
result = RE2("ab*").exec("abba");
 

[/code]

 

 

참고 링크1 : https://github.com/uhop/node-re2/

참고 링크2 : https://github.com/google/re2 

참고 링크3 : https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS

참고 링크:4 : https://techxplore.com/news/2021-08-high-performance-tool-redos-vulnerability.html

참고 링크5 : https://stackoverflow.com/questions/37378330/how-to-trigger-regex-denial-of-service-in-php
 

번외 PHP Redos 관련 링크 : https://www.codetd.com/en/article/7672378

|
댓글을 작성하시려면 로그인이 필요합니다.

개발자팁

5,403건

개발과 관련된 유용한 정보를 공유하세요. 질문은 QA에서 해주시기 바랍니다.

+
분류 제목 글쓴이 날짜 조회
PHP 19-06-24 조회 3,183
PHP 19-06-09 조회 3,807
MySQL 19-04-01 조회 4,856
jQuery 19-03-20 조회 4,240
node.js 19-02-12 조회 3,349
node.js 19-02-12 조회 3,079
node.js 19-02-12 조회 3,335
node.js 19-02-07 조회 3,319
node.js 19-02-07 조회 3,059
node.js 19-02-07 조회 3,208
node.js 19-02-04 조회 2,941
node.js 19-02-04 조회 2,914
node.js 19-02-04 조회 3,354
node.js 19-01-31 조회 2,474
node.js 19-01-31 조회 2,619
node.js 19-01-31 조회 3,099
node.js 19-01-28 조회 2,861
node.js 19-01-28 조회 2,945
node.js 19-01-28 조회 2,787
node.js 19-01-22 조회 3,114
node.js 19-01-22 조회 2,870
node.js 19-01-22 조회 3,300
node.js 19-01-16 조회 2,740
node.js
[node.js]
19-01-16 조회 2,640
node.js 19-01-16 조회 9,318
node.js 19-01-12 조회 4,400
node.js 19-01-12 조회 2,993
node.js 19-01-12 조회 3,136
node.js 19-01-11 조회 2,694
node.js 19-01-11 조회 4,045