I/O 함수 호출은 경로 인젝션 공격에 취약하지 않아야 합니다.

 

URL 매개변수, POST 데이터 페이로드 또는 쿠키와 같이 사용자가 제공한 데이터는 항상 신뢰할 수 없고 오염된 것으로 간주해야 합니다. 공격자가 오염된 데이터에서 직접 파일 시스템 경로를 구성하면 ‘../’와 같이 특수하게 조작된 값을 삽입하여 초기 경로를 변경하고 액세스 시 사용자가 일반적으로 액세스해서는 안 되는 파일 시스템의 경로로 확인할 수 있습니다.

공격이 성공하면 공격자는 파일 시스템에서 중요한 정보를 읽거나 수정 또는 삭제할 수 있으며, 때로는 임의의 운영 체제 명령을 실행할 수도 있습니다. 이를 흔히 ‘경로 탐색’ 또는 ‘디렉터리 탐색’ 공격이라고 합니다.

방어 전략은 허용된 경로 또는 문자의 화이트리스트에 기반해야 합니다.

규칙을 어긴 코드

from flask import request, send_file

@app.route('/download')
def download():
    file = request.args['file']
    return send_file("static/%s" % file, as_attachment=True) # 규칙을 어긴 코드

규칙을 준수한 해결책

from flask import request, send_from_directory

@app.route('/download')
def download():
    file = request.args['file']
    return send_from_directory('static', file) # 규칙을 준수한 코드

같이보면 좋은 자료

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

원문으로 바로가기

Star This Project