연결 정보 보호
애플리케이션 보안의 가장 중요한 목표 중 하나는 데이터 소스에 대한 액세스를 보호하는 것입니다. 연결 문자열을 안전하게 보호하지 않으면 보안상 취약한 부분이 생길 수 있습니다. 연결 정보를 일반 텍스트로 저장하거나 메모리에 유지하면 전체 시스템을 손상시킬 위험이 있습니다. 소스 코드에 포함된 연결 문자열은 Ildasm.exe(IL 디스어셈블러)를 사용하여 읽어 컴파일된 어셈블리의 CIL(공용 중간 언어)을 볼 수 있습니다.
연결 문자열과 관련된 보안 취약성은 사용된 인증 유형, 연결 문자열을 메모리와 디스크에 유지하는 방법 및 런타임에 연결 문자열을 구성하는 기술에 따라 발생됩니다.
Important
사용 가능한 가장 안전한 인증 흐름을 사용하는 것이 권장됩니다. Azure SQL에 연결하려는 경우, 권장되는 인증 방법은 Azure 리소스에 대한 관리 ID입니다.
Windows 인증 사용
데이터 소스에 대한 액세스를 제한하려면 사용자 ID, 암호, 데이터 소스 이름과 같은 연결 정보의 보안을 유지해야 합니다. 온-프레미스 데이터 원본에 대해 Windows 인증(통합 보안이라고도 함)을 사용하는 것이 사용자 정보 노출을 방지하기 위해 권장됩니다. (하지만 Azure SQL에 연결할 때는 Azure 리소스에 대한 관리 ID를 사용해야 합니다.) 사용자 ID 및 암호를 사용할 필요가 없도록 Windows 인증이 Integrated Security
또는 Trusted_Connection
키워드를 사용하여 연결 문자열에 지정됩니다. Windows 인증을 사용하면 사용자는 Windows에서 인증되고 서버 및 데이터베이스 리소스에 대한 액세스는 Windows 사용자 및 그룹에 부여하는 권한에 따라 결정됩니다.
사용자 자격 증명은 Windows 인증을 사용할 수 없는 상황에서는 연결 문자열에 노출되므로 각별히 유의해야 합니다. ASP.NET 애플리케이션에서 Windows 계정을 고정 ID로 구성하여 데이터베이스 및 기타 네트워크 리소스에 연결하는 데 사용할 수 있습니다. web.config 파일의 ID 요소에서 가장을 사용하도록 설정하고 사용자 이름과 암호를 지정합니다.
<identity impersonate="true"
userName="MyDomain\UserAccount"
password="*****" />
고정 ID 계정은 데이터베이스에서 필수 권한만 부여된 권한이 낮은 계정이어야 합니다. 또한 사용자 이름과 암호가 일반 텍스트로 노출되지 않도록 구성 파일을 암호화해야 합니다.
Important
사용 가능한 가장 안전한 인증 흐름을 사용하는 것이 권장됩니다. 이 절차에서 설명된 인증 흐름은 다른 흐름에는 없는 위험을 전달하며, 애플리케이션에서 매우 높은 신뢰 수준을 요구합니다. 이 흐름은 관리 ID와 같은 보다 안전한 다른 흐름을 실행할 수 없는 경우에만 사용되어야 합니다.
UDL(유니버설 데이터 링크) 파일 사용 안 함
UDL(유니버설 데이터 링크) 파일에 OleDbConnection에 대한 연결 문자열을 저장하지 마세요. UDL은 일반 텍스트로 저장되므로 암호화될 수 없습니다. 애플리케이션에 대한 외부 파일 기반 리소스인 UDL 파일에 대해, 파일을 보호하거나 암호화하기 위해 .NET Framework를 사용할 수 없습니다.
연결 문자열 작성기를 통해 삽입 공격 방지
연결 문자열 삽입 공격은 사용자 입력에 대해 동적 문자열 연결을 사용하여 연결 문자열을 작성할 때 발생할 수 있습니다. 사용자 입력의 유효성이 확인되지 않고 악의적인 텍스트 또는 문자를 막을 수 없는 경우 공격자가 서버에서 중요한 데이터 또는 기타 리소스에 액세스할 가능성이 있습니다. 이 문제를 해결하기 위해 ADO.NET 2.0에서는 새 연결 문자열 작성기 클래스를 도입하여 연결 문자열 구문의 유효성을 확인하고 추가 매개 변수가 사용되지 않았는지 확인합니다. 자세한 내용은 연결 문자열 작성기를 참조하세요.
Persist Security Info=False
사용
Persist Security Info
의 기본값은 false입니다. 모든 연결 문자열에서 이 기본값을 사용하는 것이 좋습니다. Persist Security Info
를 true
또는 yes
로 설정하면 연결이 열린 다음 연결에서 사용자 ID 및 암호와 같은 보안 관련 정보를 얻을 수 있습니다. Persist Security Info
을(를) false
또는 no
(으)로 설정하면, 연결을 열기 위해 보안 정보를 사용한 다음 삭제하므로 신뢰할 수 없는 소스는 보안 관련 정보에 액세스할 수 없습니다.
구성 파일 암호화
연결 문자열을 구성 파일에 저장할 수도 있으며 그러면 연결 문자열을 애플리케이션 코드에 포함할 필요가 없습니다. .NET Framework에 공통 요소 집합이 정의된 표준 XML 파일이 구성 파일입니다. 구성 파일의 연결 문자열은 Windows 애플리케이션의 경우 app.config 파일 또는 ASP.NET 애플리케이션의 경우 web.config 파일에 있는 <connectionStrings> 요소 내부에 일반적으로 저장됩니다. 구성 파일의 연결 문자열을 저장, 검색 및 암호화하는 기본적인 방법에 대한 자세한 내용은 연결 문자열 및 구성 파일을 참조하세요.