정적으로 저장된 코드에서 명령어의 부적절한 중화

Improper Neutralization of Directives in Statically Saved Code

설명

정적으로 저장된 코드에서 명령어의 부적절한 중화는 사용자가 입력한 값이 그대로 코드나 스크립트에 포함될 때 발생하는 취약성입니다. 공격자는 이러한 취약점을 악용하여 악성 명령어를 삽입하고 실행시킬 수 있습니다. 이는 특히 웹 애플리케이션에서 사용자 입력을 포함한 HTML, JavaScript, SQL 등 다양한 코드가 저장될 때 위험합니다.

잠재적 영향

  • 코드 실행: 악의적인 코드를 삽입하여 시스템 권한을 획득할 수 있습니다.

  • 데이터 유출: 민감한 데이터가 공격자에게 노출될 수 있습니다.

  • XSS (크로스 사이트 스크립팅): 악성 스크립트가 삽입되어 다른 사용자의 브라우저에서 실행될 수 있습니다.

  • 데이터 손상: 데이터베이스를 조작하거나 손상시킬 수 있습니다.

해결 방법

  • 입력값 검증: 사용자의 모든 입력값을 철저히 검증합니다.

  • 출력값 인코딩: 사용자 입력값을 HTML, JavaScript, SQL 등에 출력할 때 적절히 인코딩합니다.

  • 보안 라이브러리 사용: Django, Flask, FastAPI 등과 같은 프레임워크에서 제공하는 보안 기능을 사용합니다.

  • 준비된 쿼리(Prepared Statements) 사용: SQL 쿼리를 실행할 때, 사용자 입력값을 직접 포함하지 않고 바인딩 변수를 사용합니다.

취약한 코드 및 안전한 코드 예시

Unsafe Django code & Safe Django code

설명:

  • 취약한 코드: 사용자 입력값을 검증하지 않고 HTML 템플릿에 포함하여, 악성 스크립트가 실행될 수 있습니다.

  • 안전한 코드: escape 함수를 사용하여 사용자 입력값을 HTML로 출력하기 전에 인코딩하여, 악성 스크립트 실행을 방지합니다.

Unsafe Flask code & Safe Flask code

설명:

  • 취약한 코드: 사용자 입력값을 검증하지 않고 HTML 템플릿에 포함하여, 악성 스크립트가 실행될 수 있습니다.

  • 안전한 코드: escape 함수를 사용하여 사용자 입력값을 HTML로 출력하기 전에 인코딩하여, 악성 스크립트 실행을 방지합니다.

Unsafe FastAPI code & Safe FastAPI code

설명:

  • 취약한 코드: 사용자 입력값을 검증하지 않고 HTML 템플릿에 포함하여, 악성 스크립트가 실행될 수 있습니다.

  • 안전한 코드: escape 함수를 사용하여 사용자 입력값을 HTML로 출력하기 전에 인코딩하여, 악성 스크립트 실행을 방지합니다.

참조

Last updated