신뢰할 수 없는 데이터 처리하기

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

신뢰할 수 없는 데이터

신뢰할 수없는 데이터는 애플리케이션이 무결성을 보장할 수 없는 소스에서 가져온 데이터입니다. 신뢰할 수 없는 데이터의 예로는 사용자가 제공한 데이터, 네트워크 데이터, 생성된 데이터 또는 애플리케이션이 직접 생성하지 않은 데이터 등이 있습니다. 신뢰할 수 없는 데이터를 부적절하게 처리하면 애플리케이션 충돌, 개인 데이터 노출, 사용자 및 하드웨어에 대한 피해로 이어질 수 있습니다. 따라서 개발자는 코드가 신뢰할 수 없는 데이터를 수신하고 처리하는 방식에 대해 주의를 기울여야 합니다.

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

Qt 프로젝트에는 Qt 기능을 설계하고 테스트하기 위한 광범위한 프로세스가 있습니다. Qt의 보안 정책에 대한 자세한 내용은 Qt의 보안을 참조하십시오.

Qt로 위험과 취약성 완화하기

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

사용자 입력 유효성 검사

적절한 입력 유효성 검사가 부족하면 잘못된 데이터와 예기치 않은 동작이 발생할 수 있습니다. 그러나 엄격한 유효성 검사 규칙은 사용자가 데이터를 입력하는 데 방해가 될 수도 있습니다. 예를 들어 특정 문자를 차단하면 사용자가 잘못된 정보나 취약한 암호를 입력하게 될 수 있습니다.

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

명령 인젝션

일반적인 보안 취약점은 외부 프로세스에 의한 악의적인 명령 실행입니다. 신뢰할 수 없는 데이터에서 명령을 실행하면 사용자 데이터 노출, 비공개 리소스에 대한 액세스 및 기타 악의적인 활동이 발생할 수 있습니다. 또한 애플리케이션이 신뢰할 수 없는 데이터를 신뢰할 수 있는 데이터와 결합하여 데이터를 오염시킬 수도 있습니다.

일반적인 완화 방법은 실행 가능한 명령의 유효성을 검사하고 텍스트를 분리하는 것입니다. 서버 측 및 클라이언트 측 검증을 모두 사용하여 명시적으로 명령 목록을 허용하고 데이터를 신중하게 구문 분석하는 것도 위험을 완화하는 데 도움이 될 수 있습니다. 또한 텍스트 스크립트를 실행하는 대신 시스템 명령을 실행하는 신뢰할 수 있는 플러그인 및 라이브러리를 사용하는 것이 좋습니다.

이미지 디코딩

신뢰할 수 없는 출처의 이미지는 시스템 충돌이나 성능 저하를 일으킬 수 있습니다. 애플리케이션이 이미지를 로드하거나 처리하기 전에 이미지 경로, 이미지 유형 및 파일 확장자를 살균하는지 확인하세요. 또한 애플리케이션은 성능 저하나 충돌 없이 대용량 이미지와 예기치 않은 형식을 처리해야 합니다.

데이터 역직렬화

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

자세한 내용은 다음을 참조하세요.

Qt Qml 와 자바스크립트 소스

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

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

© 2025 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.