정규식은 서비스 거부 공격에 취약하지 않아야 합니다.

 

대부분의 정규식 엔진은 입력을 평가할 때 백트래킹을 사용하여 정규식의 가능한 모든 실행 경로를 시도하는데, 경우에 따라 치명적인 백트래킹 상황이라고 하는 성능 문제를 일으킬 수 있습니다. 최악의 경우 정규식의 복잡성은 입력의 크기에 따라 기하급수적으로 증가하므로, 20자와 같이 신중하게 만들어진 작은 입력도 치명적인 백트래킹을 유발하여 애플리케이션의 서비스 거부를 일으킬 수 있습니다. 초선형 정규식의 복잡성은 신중하게 만들어진 큰 입력(수천 개의 문자)에서도 동일한 영향을 미칠 수 있습니다.

사용자 제어 입력에서 정규식 패턴을 구성하는 것은 권장하지 않으며, 다른 선택의 여지가 없는 경우 정규식 메타문자를 제거/소멸하기 위해 입력을 위생 처리하는 것이 좋습니다.

규칙을 어긴 코드

from flask import request
import re

@app.route('/upload')
def upload():
    username = request.args.get('username')
    filename = request.files.get('attachment').filename

    re.search(username, filename) # 규칙을 어긴 코드

규칙을 준수한 해결책

from flask import request
import re

@app.route('/upload')
def upload():
    username = re.escape(request.args.get('username'))
    filename = request.files.get('attachment').filename

    re.search(username, filename) # 규칙을 준수한 코드

같이보면 좋은 자료드

If you like SONARKUBE, don’t forget to give me a star. :star2:

원문으로 바로가기

Star This Project