← 질문 목록
#359깊이 0

정규식 하나가 서버를 멈추게 하는가?

언어 · 런타임깊이보안 공격성능

그렇다. 흔히 쓰는 엔진은 안 맞으면 되돌아가 다시 맞춰 보는 방식이라, 입력이 조금만 길어져도 시도할 경우의 수가 폭발한다.

  • 반복 안에 반복이 있는 식에 aaaa를 맞춘다

    나누는 방법이 여덟 가지다

    • 4

      한 덩어리로 본다

    • 3+1

    • 1+3

    • 2+2

    • 나머지 네 가지도 같은 식이다

뒤에 안 맞는 글자가 하나 붙으면 엔진은 이 나눔을 전부 시도한다. 글자가 하나 늘 때마다 시도 수가 배로 늘어 금세 멈춘 것처럼 보인다.

위험한 모양이 있다. 반복 안에 반복이 있거나 같은 것을 받는 갈래가 나란히 놓여, 한 입력을 여러 방법으로 나눌 수 있을 때다. 여기에 뒤쪽 실패가 겹쳐야 터진다.

주의

한 요청이 CPU를 붙잡으면 그 자리가 통째로 막힌다. 한 줄짜리 코드가 화면을 멈추게 하는 것과 같은 모양인데, 여기서는 남이 보낸 입력이 방아쇠다.

막는 길은 셋이다. 위험한 모양을 안 쓰고, 입력 길이를 제한하고, 되돌아가지 않는 엔진이나 시간 제한이 있는 실행을 쓴다.

사용자 입력이 정규식 문법에 닿는 자리가 위험하다. 우리가 쓴 식에 남의 문자열이 들어가는 자리가 위험한 자리다.

추천 꼬리질문

0/300

적은 내용은 AI 학습에 쓰일 수 있습니다. 이름이나 연락처는 넣지 말아 주세요.

관련 질문

정규식 하나가 서버를 멈추게 하는가?