보안 및 빠른 코드 생성

업데이트: 2007년 11월

일부 라이브러리는 코드를 생성하고 이 코드를 실행하여 호출자를 위한 작업을 수행함으로써 작동합니다. 기본적인 문제는 낮은 신뢰 수준의 코드를 위해 코드를 생성하고 이 코드를 높은 신뢰 수준에서 실행할 때 발생합니다. 이 문제는 호출자가 코드 생성에 영향을 미칠 수 있는 경우에 보다 심각해지므로 반드시 안전하다고 간주되는 코드만 생성되도록 해야 합니다.

항상 생성하고 있는 코드에 대해 정확히 알고 있어야 합니다. 즉, 사용자로부터 얻는 모든 값을 엄격히 제어해야 합니다. 이러한 값에는 따옴표로 묶인 문자열(예기치 않은 코드 요소가 포함되지 않도록 이스케이프되어야 함)이나 식별자(유효한 식별자인지 확인하기 위해 검사되어야 함)를 비롯한 모든 값이 포함됩니다. 식별자의 경우, 컴파일된 어셈블리가 수정되어 어셈블리의 식별자에 이상한 문자가 포함될 수 있기 때문에 위험할 수 있습니다. 이 경우 보안 문제가 발생하는 경우는 드물지만 어셈블리가 손상될 수 있습니다.

이런 문제의 대부분을 방지하는 데 유용한 리플렉션 생성을 통해 코드를 생성하는 것이 좋습니다.

코드를 컴파일할 때는 악의적인 프로그램이 코드를 수정할 수 있는 방법이 있는지 생각해 보십시오. 컴파일러가 소스 코드를 읽기 전이나 코드가 .dll 파일을 로드하기 전에 악성 코드가 디스크에서 소스 코드를 변경할 수 있는 기회가 있습니까? 있다면 파일 시스템에 코드 액세스 보안 또는 ACL(액세스 제어 목록)을 사용하여 이런 파일이 들어 있는 디렉터리를 보호해야 합니다.

호출자가 컴파일러 오류를 발생시키는 방식으로 생성된 코드에 영향을 미칠 수 있는 경우에도 보안 문제가 발생할 수 있습니다.

PermitOnly 또는 Deny를 사용하여, 생성된 코드를 가능한 가장 낮은 권한 설정으로 실행하십시오.

참고 항목

기타 리소스

보안 코딩 지침