Share via


표준 컨트롤 보안

업데이트: 2007년 11월

ASP.NET 표준 컨트롤은 페이지가 서버에 다시 게시되기 전에 사용자가 정보를 입력하거나 선택할 수 있는 폼을 만들 수 있는 컨트롤 그룹입니다. 표준 컨트롤은 Control 클래스에서 상속하는 웹 서버 컨트롤입니다. 웹 서버 컨트롤의 예로 TextBox, ImageAdRotator 컨트롤이 있습니다. 이 항목에서는 표준 컨트롤의 보안을 향상시킬 수 있는 구성 및 코딩에 대한 최선의 구현 방법을 설명합니다.

다음과 같은 코딩 및 구성에 대한 최선의 구현 방법으로 응용 프로그램의 보안을 향상시킬 수 있지만, Microsoft Windows 및 IIS(인터넷 정보 서비스)에 대한 최신 보안 업데이트 뿐만 아니라 Microsoft SQL Server나 다른 데이터 소스에 대한 모든 보안 업데이트를 사용하여 응용 프로그램 서버를 최신 상태로 계속 유지하는 것도 중요합니다.

보안 코드 작성 및 응용 프로그램 보안을 위한 최선의 구현 방법에 대해서는 Michael Howard와 David LeBlanc가 공동으로 기술한 책인 "Writing Secure Code" 또는 Microsoft Patterns and Practices에서 제공하는 지침을 참조하십시오.

다음 항목에서 다른 컨트롤 형식의 특수한 보안 연습에 대한 정보를 볼 수 있습니다.

AdRotator 컨트롤

AdRotator 컨트롤은 기본적으로 XML 파일인 광고 파일에 정의된 광고를 표시합니다. 또한 데이터베이스에 광고를 저장하고 이를 프로그래밍 방식으로 추출할 수 있습니다. AdRotator 컨트롤에 보안을 설정하려면 다음 지침을 따르십시오.

  • 광고 정보를 저장하기 위해 XML 파일을 사용하는 경우 웹 사이트의 App_Data 폴더 내용은 웹 요청에 응답하여 제공되지 않으므로 파일을 이 폴더에 저장하십시오.

  • 추가 보호를 위해서는 광고 파일에 .xml 파일 이름 확장명을 사용하지 마십시오. 대신 .ads와 같은 확장명을 사용한 다음 IIS에서 .ads 확장명을 ASP.NET에 매핑하고 사이트의 Web.config 파일에서 다음 요소를 사용하여 ASP.NET의 Forbidden 처리기에 매핑합니다.

    <httpHandlers>
      <add verb="*" path="*.ads" type="System.Web.HttpForbiddenHandler" />
    </httpHandlers>
    

    IIS에서 파일 이름 확장명을 ASP.NET에 매핑하는 방법에 대한 자세한 내용은 방법: HTTP 처리기 등록을 참조하십시오.

  • 광고 파일을 읽을 사용자 계정에 대해 적절한 권한(일반적으로 읽기 전용)을 설정합니다. 웹 사이트에서 익명 액세스가 지원되는 경우 이 계정은 일반적으로 로컬 ASPNET 사용자 계정이나 NETWORK SERVICE 계정입니다.

  • 광고 파일이 없으면 AdRotator 컨트롤이 파일의 경로와 이름이 표시되는 오류를 발생시키므로 잠재적으로 중요한 정보가 노출될 수 있습니다. 이러한 문제는 구성 파일에서 customErrors 요소를 설정하여 사용자 지정 오류 페이지로 리디렉션하고 응용 프로그램에서 처리되지 않은 예외가 발생할 때 호출되는 전역 오류 처리기를 만드는 방식 등과 같은 적합한 오류 처리 기술로 해결하십시오. 자세한 내용은 방법: 안전한 오류 메시지 표시를 참조하십시오.

  • 데이터베이스에서 광고 정보를 읽을 경우에는 데이터베이스에 대한 액세스를 보호하기 위해 다음 지침을 따르십시오. 자세한 내용은 데이터 액세스 보안을 참조하십시오.

  • 신뢰할 수 없는 소스로부터 받은 광고 정보는 AdRotator 컨트롤에서 사용하기 전에 먼저 신중하게 검사하십시오. AdRotator 컨트롤은 광고 파일로부터 읽은 정보에 대해 유효성 검사나 확인 등을 수행하지 않으므로 광고 파일이나 데이터베이스에 표시되는 것과 완전히 동일하게 이미지와 URL을 웹 페이지에 렌더링합니다.

BulletedList, CheckBoxList, RadioButtonList, DropDownList, ListBox

BulletedList, CheckBoxList, DropDownList, ListBoxRadioButtonList 컨트롤은 컬렉션의 내용이나 데이터베이스의 데이터에 따라 여러 형식의 HTML 요소(ul, input 및 select)를 렌더링합니다. 이러한 컨트롤을 보호하려면 다음 지침을 따르십시오.

Calendar 컨트롤

Calendar 컨트롤은 달력에서 탐색이 가능하도록 LinkButton 컨트롤을 렌더링합니다. LinkButton 컨트롤은 클라이언트 스크립트를 사용하여 다시 게시를 수행합니다. 보안을 위해 브라우저에서 클라이언트 스크립트 기능이 해제된 경우 Calendar 컨트롤은 탐색을 지원하지 않습니다.

날짜 탐색이 허용되지 않는 경우에도 Calendar 컨트롤을 사용하여 날짜를 표시할 수 있습니다. Calendar 컨트롤에서 선택한 날짜는 형식이 올바르지 않을 수도 있습니다. Calendar 컨트롤에서 내부 DateTime 형식으로 날짜를 변환할 때는 날짜 형식이 올바르지 않은 경우를 대비하여 적절할 오류 처리를 사용하십시오.

FileUpload 컨트롤

FileUpload 컨트롤을 사용하면 사용자 컴퓨터의 파일을 웹 서버 컴퓨터로 업로드할 수 있습니다. FileUpload 컨트롤에 보안을 설정하려면 다음 지침을 따르십시오.

  • 사용자가 업로드하는 파일은 신뢰하지 마십시오. 악의적인 사용자가 실행 파일을 업로드하려고 시도할 수도 있습니다. 업로드된 파일을 저장할 때는 해당 파일 이름의 확장명을 검사하거나 파일에 다른 고유 확장명을 지정하십시오.

  • 업로드한 파일을 저장할 위치에 대해 사용자가 추상 경로를 지정하도록 허용하지 마십시오. 파일 이름에 자신이 직접 추가한 경로 정보가 포함되지 않았는지 확인하십시오.

  • 웹 사이트의 내부 구조는 파일을 업로드하는 사용자에게 알려주지 마십시오.

  • 응용 프로그램을 실행하는 사용자 계정에 업로드한 파일이 저장되는 폴더에 대한 읽기/쓰기 권한을 설정하십시오. 웹 사이트에서 익명 액세스가 지원되는 경우 이 계정은 일반적으로 로컬 ASPNET 사용자 계정이나 NETWORK SERVICE 계정입니다. 하지만 읽기/쓰기 권한은 응용 프로그램이 업로드된 파일을 저장하는 폴더로만 제한하십시오.

  • 구성 파일에서 httpRuntime 요소의 maxRequestLength 특성을 설정하여 서비스 거부 공격을 방지하십시오. 기본적으로 최대 요청 길이는 4MB입니다. 업로드된 파일의 크기에 영향을 줄 수 있는 다른 보안 설정으로는 httpRuntime 요소의 requestLengthDiskThreshold 특성과 processModel 요소의 memoryLimit 특성이 있습니다.

  • 컨트롤에서 반환된 HttpPostedFile 개체의 ContentLength 속성을 쿼리하여 업로드된 파일의 크기를 확인하고 이 크기를 사용하여 파일을 받을지 여부를 결정하십시오.

HiddenField 컨트롤

HiddenField 컨트롤은 서버 코드에서 HTML <input type="hidden"> 요소의 내용을 설정할 수 있는 방법을 제공합니다. 숨겨진 필드는 페이지 처리 중에는 필요하지만 다른 사용자에게 표시되지 않아야 하는 정보를 페이지에 저장하는 데 사용됩니다. HiddenField 컨트롤에 보안을 설정하려면 다음 지침을 따르십시오.

  • HiddenField 컨트롤에는 중요한 정보를 저장하지 마십시오. 이러한 정보는 브라우저에 표시되지 않더라도 페이지의 일부이기 때문에 사용자가 페이지 소스에서 쉽게 확인할 수 있습니다.

  • 숨겨진 필드에 있는 정보는 신뢰하지 마십시오. 악의적인 사용자가 숨겨진 필드의 내용을 손상시킬 수 있습니다.

HyperLink 컨트롤은 URL을 브라우저로 렌더링합니다. URL이 신뢰할 수 있는 위치를 가리키는지 확인하십시오.

Image 및 ImageMap 컨트롤

ImageImageMap 컨트롤은 그래픽을 표시하기 위해 URL을 브라우저로 렌더링합니다. URL이 신뢰할 수 있는 위치를 가리키는지 확인하십시오.

ImageButton 컨트롤

ImageButton 컨트롤은 다시 게시를 수행하기 위해 클라이언트 스크립트를 사용하는 이미지(img 요소)를 렌더링합니다. 보안을 위해 브라우저에 클라이언트 스크립트 기능이 해제된 경우 이 컨트롤은 작동하지 않습니다.

이 컨트롤은 그래픽을 표시하기 위해 URL을 브라우저로 렌더링합니다. URL이 신뢰할 수 있는 위치를 가리키는지 확인하십시오.

Label 및 Literal 컨트롤

LabelLiteral 컨트롤은 텍스트를 브라우저에 있는 그대로 전달하여 페이지에 표시합니다. 또한 Label 컨트롤을 사용하면 형식을 지정할 수 있습니다. 텍스트에 HTML 태그가 포함된 경우 기본적으로 브라우저는 태그를 해석하고 그에 따라 텍스트를 렌더링하므로 이 과정에서 스크립트가 실행될 수도 있습니다.

Label 컨트롤을 사용할 때 텍스트에 악의적인 내용이 포함되어 있는지 확실하지 않은 경우에는 HTML 인코딩을 사용하여 HTML을 텍스트 표현으로 변환하십시오. 자세한 내용은 방법: 문자열에 HTML 인코딩을 적용하여 스크립트를 이용한 공격으로부터 웹 응용 프로그램 보호를 참조하십시오.

Literal 컨트롤을 사용할 때 텍스트에 악의적인 내용이 포함되어 있는지 확실하지 않은 경우에는 다음 중 하나를 수행하십시오.

자세한 내용은 방법: 문자열에 HTML 인코딩을 적용하여 스크립트를 이용한 공격으로부터 웹 응용 프로그램 보호를 참조하십시오.

LinkButton 컨트롤

LinkButton 컨트롤은 다시 게시를 수행하기 위해 클라이언트 스크립트를 사용하는 링크(a 요소)를 렌더링합니다. 보안을 위해 브라우저에 클라이언트 스크립트 기능이 해제된 경우 이 컨트롤은 작동하지 않습니다.

MultiView

MultiView 컨트롤을 사용하면 여러 View 컨트롤을 추가하고 이를 조건에 따라 표시할 수 있습니다. 이렇게 하면 여러 페이지 폼처럼 보이는 페이지를 만들 수 있습니다.

URL 쿼리 문자열과 같이 쉽게 손상될 수 있는 항목에 따라 뷰를 전환하면 의도하지 않은 다른 사용자가 정보를 쉽게 볼 수 있습니다. 따라서 뷰 전환을 위한 메커니즘은 최대한 보안적으로 구성하십시오. 자세한 내용은 ASP.NET 상태 관리 개요를 참조하십시오.

TextBox 컨트롤

TextBox 컨트롤을 사용하면 거의 모든 텍스트를 페이지에 입력할 수 있기 때문에 이 컨트롤을 사용하여 사용자 입력을 받아들일 때는 주의해야 합니다. TextBox 컨트롤에 보안을 설정하려면 다음 지침을 따르십시오.

  • 허용 가능한 값으로 사용자 입력을 제한할 수 있도록 가능하면 언제나 유효성 검사 컨트롤을 사용하십시오. 자세한 내용은 유효성 검사 컨트롤 소개를 참조하십시오.

  • 서버 코드를 실행하기 전에 IsValid 속성이 true로 설정되어 있는지 확인하십시오.

  • 서버 유효성 검사를 중복해서 사용하십시오. 이 방법은 CustomValidator 컨트롤의 경우에 특히 중요합니다. 클라이언트측 유효성 검사 논리만 만들지는 마십시오.

  • TextBox 컨트롤의 MaxLength 속성을 설정하여 사용자가 입력할 수 있는 텍스트 양을 제한하십시오. 악의적인 사용자는 텍스트 상자에 매우 많은 양의 정보를 전송하여 응용 프로그램의 성능에 영향을 주고 잠재적으로 데이터베이스 오류를 발생시킬 수 있습니다.

  • HTML을 해당 텍스트 표현으로 바꿔(예: <b>를 &ltb&gt;로 변환) HTML이 브라우저에서 실행되지 않도록 방지하는 HtmlEncode 메서드를 사용하여 사용자 입력을 인코딩합니다. 자세한 내용은 방법: 문자열에 HTML 인코딩을 적용하여 스크립트를 이용한 공격으로부터 웹 응용 프로그램 보호를 참조하십시오.

  • TextMode 속성을 Password로 설정하여 텍스트 상자의 내용이 텍스트 상자에 표시되지 않도록 하십시오(점으로 표시). TextMode 속성을 Password로 설정하는 경우 다른 보호는 제공되지 않습니다. 텍스트 상자의 내용은 암호화 또는 모호하게 되지 않으며 해당 정보가 일반 텍스트로 서버에 전송됩니다. 따라서 Password를 사용할 때는 데이터 보안을 유지하기 위한 추가 방법을 제공하십시오.

  • 암호나 신용 카드 번호와 같은 중요한 정보를 수집할 때는 SSL(Secure Sockets Layer)을 사용하여 클라이언트와 서버 간의 통신 보안을 유지하십시오. 이는 CreateUserWizard 컨트롤과 같이 TextBox 컨트롤을 포함하는 컨트롤을 비롯하여 TextBox 컨트롤을 사용하는 모든 경우에 적용됩니다.

마법사

Wizard 컨트롤을 사용하면 여러 단계의 입력 폼을 만들 수 있습니다. Wizard 컨트롤을 사용할 때는 다음과 같은 보안 고려 사항에 주의하십시오.

  • Wizard에서는 기본적으로 중요한 정보가 보호되지 않습니다. 마법사에서 중요한 정보를 수집할 때는 Wizard가 포함된 페이지에서 SSL을 사용하여 클라이언트와 서버 간의 통신 보안을 유지하십시오.

  • 이 기능을 지원하기 위해 Wizard 컨트롤에는 표시되지 않는 여러 컨트롤이 포함됩니다. 사용자는 잠재적으로 이러한 컨트롤과 값을 조작하여 마법사 단계를 순서를 바꿔서 표시하거나 일부 사용자에게만 표시되어야 하는 마법사 단계를 표시할 수 있습니다. 이를 방지하려면 마법사가 올바른 순서로 표시되고, 올바른 조건이 아니면 중요한 정보가 포함된 단계가 표시되지 않도록 하십시오.

XML 컨트롤

Xml 컨트롤은 XML 파일의 내용이나 XML을 포함하는 문자열을 페이지에 표시하고 선택적으로 XML 변환을 적용할 수도 있습니다. Xml 컨트롤에 보안을 설정하려면 다음 지침을 따르십시오.

  • XML 파일의 내용을 표시하는 경우 사이트의 App_Data 폴더 내용은 웹 요청에 응답하여 제공되지 않으므로 필요한 경우 XML 파일을 이 폴더에 저장하십시오.

  • 신뢰할 수 있는 소스의 XML만 표시하십시오.

  • 신뢰할 수 있는 소스로부터의 변환만 사용하십시오.

참고 항목

개념

Login 컨트롤 보안

웹 파트 페이지 보안

데이터 액세스 보안