이 페이지에서

신뢰할 수 없는 데이터 처리

Qt를 사용하여 신뢰할 수 없는 데이터를 처리하는 방법에 대한 조언.

신뢰할 수 없는 데이터

신뢰할 수 없는 데이터란 애플리케이션이 무결성을 보장할 수 없는 출처에서 비롯된 데이터를 말합니다. 신뢰할 수 없는 데이터의 예로는 사용자가 제공한 데이터, 네트워크 데이터, 생성된 데이터 또는 애플리케이션이 직접 생성하지 않은 데이터 등이 있습니다. 신뢰할 수 없는 데이터를 부적절하게 처리하면 애플리케이션이 중단되거나, 개인 정보가 유출되거나, 사용자와 하드웨어에 피해를 줄 수 있습니다. 따라서 개발자는 코드가 신뢰할 수 없는 데이터를 수신하고 처리하는 방식에 대해 각별히 주의를 기울여야 합니다.

데이터의 안전성을 보장할 책임은 궁극적으로 애플리케이션에 있습니다. 그러나 애플리케이션은 데이터를 안전하게 처리하고 검증하기 위해 개발 중인 Qt의 특정 부분에 의존할 수 있습니다. 예를 들어, Qt 모듈은 이미지를 검증하고, 문자열을 안전하게 조작하며, 수신되는 네트워크 패킷을 처리할 수 있습니다. Qt는 이러한 유형의 기능을 보안상 중요한 기능으로 간주합니다. 보안상 중요한 API는 개발 과정에서 추가적인 검토와 테스트를 거칩니다.

Qt 프로젝트는 Qt 기능을 설계하고 테스트하기 위한 포괄적인 프로세스를 갖추고 있습니다. Qt의 보안 정책에 대한 자세한 내용은 Qt의 보안을 참조하십시오.

Qt를 통한 위험 및 취약점 완화

Qt를 사용하면 신뢰할 수 없는 데이터를 처리할 때 발생하는 많은 위험을 줄일 수 있습니다. 다음 섹션에서는 Qt 애플리케이션에서 신뢰할 수 없는 데이터를 처리하는 데 관련된 여러 측면을 다룹니다.

사용자 입력 유효성 검사

적절한 입력 유효성 검사가 이루어지지 않으면 잘못된 데이터가 발생하거나 예상치 못한 동작이 나타날 수 있습니다. 그러나 지나치게 엄격한 유효성 검사 규칙은 사용자의 데이터 입력을 방해할 수도 있습니다. 예를 들어, 특정 문자의 사용을 제한하면 사용자가 잘못된 정보를 입력하거나 취약한 비밀번호를 설정하게 될 수 있습니다.

Qt는 사용자 입력을 위한 여러 검증기를 제공합니다. 참조:

명령어 주입

흔히 발생하는 보안 취약점 중 하나는 외부 프로세스에 의한 악의적인 명령어 실행입니다. 신뢰할 수 없는 데이터에서 명령어를 실행하면 사용자 데이터가 유출되거나, 비공개 리소스에 대한 접근 권한이 부여되거나, 기타 악의적인 활동이 발생할 수 있습니다. 또한 애플리케이션이 신뢰할 수 없는 데이터를 신뢰할 수 있는 데이터와 결합하여 데이터를 오염시킬 수도 있습니다.

일반적인 완화 방안은 텍스트를 검증하고 실행 가능한 명령어로부터 분리하는 것입니다. 서버 측 및 클라이언트 측 검증을 모두 활용하는 명시적인 허용 목록(allow list)을 사용하고, 데이터를 신중하게 파싱하는 것도 위험을 완화하는 데 도움이 될 수 있습니다. 또한 텍스트 스크립트를 실행하는 대신 시스템 명령어를 실행하는 신뢰할 수 있는 플러그인과 라이브러리를 사용하는 것이 권장됩니다.

이미지 디코딩

신뢰할 수 없는 출처의 이미지는 시스템 충돌이나 성능 저하를 유발할 수 있습니다. 애플리케이션이 이미지를 불러오거나 처리하기 전에 이미지 경로, 이미지 유형 및 파일 확장자를 반드시 정제해야 합니다. 또한 애플리케이션은 성능 저하나 충돌 없이 대용량 이미지 및 예상치 못한 형식의 이미지를 처리할 수 있어야 합니다.

데이터 역직렬화

신뢰 경계 외부에서 유입된 데이터의 경우, 추가적인 검증이 필요한 신뢰할 수 없는 데이터로 간주하여 역직렬화해야 합니다. 직렬화된 데이터는 손상되었거나 악성 콘텐츠를 포함할 수 있습니다. 이러한 데이터를 역직렬화하면 데이터 오류, 애플리케이션 충돌 또는 악성 코드 실행이 발생할 수 있습니다. 예를 들어 암호화나 해싱 기법을 사용하여 콘텐츠의 무결성을 확인하십시오. 또한 데이터를 역직렬화할 때는 오류를 원활하게 처리하고 시스템 충돌을 방지해야 합니다.

자세한 내용은 다음을 참조하십시오.

Qt Qml 및 JavaScript 소스

Qt Qml 는 애플리케이션 개발자가 모든 코드와 리소스를 제공한다고 가정합니다. QML은 기본적인 보호 기능을 갖춘, 일반적으로 메모리 안전성이 보장되는 언어입니다. 그러나 QML에는 별도의 프라이버시 도메인 개념이 없습니다. 즉, 원격으로 로드되었든 로컬에서 로드되었든 상관없이 모든 코드가 해당 범위 내의 모든 데이터에 접근할 수 있습니다.

Qt Qml 애플리케이션은 로컬 파일 시스템이나 Qt의 리소스 시스템을 통해 리소스를 불러와야 합니다. 네트워크 사용이 필요한 경우, HTTPS를 통해 또는 신뢰할 수 있는 네트워크 내에서 리소스를 가져와야 합니다.

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.