차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판이전 판다음 판 | 이전 판 | ||
guide:asp.net_개발_보안_가이드 [2013/11/22 04:56] – 121.140.124.172 | guide:asp.net_개발_보안_가이드 [2024/04/04 05:12] (현재) – 바깥 편집 127.0.0.1 | ||
---|---|---|---|
줄 138: | 줄 138: | ||
==== 취약점 상세 내용 및 보안 대책 ==== | ==== 취약점 상세 내용 및 보안 대책 ==== | ||
- | Javascript, Vbscript 등 PC의 웹브라우저에서 실행되는 클라이언트 사이트 스크립트를 다른 사용자의 웹브라우저에서 실행하도록 함으로서 웹 브라우저를 제어하여 PC를 공격하는 취약점을 말한다. 공격에 사용되는 유형은 크게 두가지로 분류할 수 있다. | + | Javascript, Vbscript 등 PC의 웹브라우저에서 실행되는 클라이언트 사이트 스크립트를 다른 사용자의 웹브라우저에서 실행하도록 함으로서 웹 브라우저를 제어하여 PC를 공격하는 취약점을 말함. 공격에 사용되는 유형은 크게 두가지로 분류. |
\\ | \\ | ||
(1) Reflected XSS | (1) Reflected XSS | ||
\\ | \\ | ||
- | 이 유형의 XSS는 클라이언트 측에서 전송된 데이터가 서버측에서 즉시 처리된 후 사용자에게 응답으로 전송되는 돌아오는 경우에 해당한다. 다음과 같은 상황에서 발생이 가능하다. | + | 이 유형의 XSS는 클라이언트 측에서 전송된 데이터가 서버측에서 즉시 처리된 후 사용자에게 응답으로 전송되는 돌아오는 경우에 해당함. 다음과 같은 상황에서 발생이 가능함. |
\\ | \\ | ||
* 검색 페이지에서 입력된 검색어가 검색 결과 페이지에 표시되는 경우 | * 검색 페이지에서 입력된 검색어가 검색 결과 페이지에 표시되는 경우 | ||
* URL에 포함된 특정 파라미터가 응답 페이지에 hidden 속성으로 포함되어 있는 경우 | * URL에 포함된 특정 파라미터가 응답 페이지에 hidden 속성으로 포함되어 있는 경우 | ||
- | 위의 두가지 유형은 본질적으로는 동일한 내용이다. | + | 위의 두가지 유형은 본질적으로는 동일한 내용임. |
- | 이러한 유형의 XSS 는 사회 공학적 방법 등을 통해서 공격 스크립트가 포함된 URL을 타인이 실행하도록 유도함으로서 (예를 들면 메신저로 링크를 전송하거나, | + | 이러한 유형의 XSS 는 사회 공학적 방법 등을 통해서 공격 스크립트가 포함된 URL을 타인이 실행하도록 유도함으로서 (예를 들면 메신저로 링크를 전송하거나, |
- | 그러나 공공기관이나 금융권과 같이 신뢰도가 중요한 대상인 경우에는 이 유형의 XSS 도 모두 제거해야 하며, 그 외에도 대외에 공개된 웹사이트라면 일반적으로 제거하도록 하는 것이 좋다. | + | 그러나 공공기관이나 금융권과 같이 신뢰도가 중요한 대상인 경우에는 이 유형의 XSS도 모두 제거해야 하며, 그 외에도 대외에 공개된 웹사이트라면 일반적으로 제거하도록 하는 것이 좋음. |
\\ | \\ | ||
(2) Stored XSS | (2) Stored XSS | ||
\\ | \\ | ||
- | 게시판과 같이 사용자가 입력한 정보가 서버측 DB에 저장되어 있다가 타 사용자가 해당 정보를 열람할 때 DB에 저장되어 있는 정보를 가져와 화면에 출력하는 방식의 웹 애플리케이션에서 발생하는 취약점으로서, | + | 게시판과 같이 사용자가 입력한 정보가 서버측 DB에 저장되어 있다가 타 사용자가 해당 정보를 열람할 때 DB에 저장되어 있는 정보를 가져와 화면에 출력하는 방식의 웹 애플리케이션에서 발생하는 취약점으로서, |
- | 공격자가 XSS를 목적으로 악성 스크립트를 삽입하여 둘 수 있는 위치는 비단 게시판의 글 본문 뿐만 아니라 제목, 작성자 이름, 날짜, 첨부파일 이름 등이 모두 가능하며, | + | 공격자가 XSS를 목적으로 악성 스크립트를 삽입하여 둘 수 있는 위치는 비단 게시판의 글 본문 뿐만 아니라 제목, 작성자 이름, 날짜, 첨부파일 이름 등이 모두 가능하며, |
* 게시판 : 제목, 본문, 작성자, 날짜, 첨부파일 이름, 태그, 분류 등 | * 게시판 : 제목, 본문, 작성자, 날짜, 첨부파일 이름, 태그, 분류 등 | ||
* 사용자 프로필 : 이름, 닉네임, 주소, 전화번호, | * 사용자 프로필 : 이름, 닉네임, 주소, 전화번호, | ||
줄 162: | 줄 162: | ||
=== ASP.NET 요청 유효성 검사가 활성화되어 있는지 확인 === | === ASP.NET 요청 유효성 검사가 활성화되어 있는지 확인 === | ||
- | 기본적으로 요청 유효성 검사는 Machine.config 파일에서 사용할 수 있습니다. 그 요청 | + | 기본적으로 요청 유효성 검사는 Machine.config 파일에서 사용할 수 있음. 그 유효성 검사가 현재 서버의 Machine.config 파일에서 활성화되고 응용 프로그램의 Web.config 파일에서 설정을 무시하지 않는지 확인함. |
- | 가. ASP.NET | + | 가. ASP.NET 유효성 검사가 활성화되어 있는지 |
- | 1. 요청 | + | 1. 유효성 검사를 비활성화 |
<%@ Page Language=" | <%@ Page Language=" | ||
줄 189: | 줄 189: | ||
</ | </ | ||
- | 2. 페이지를 실행합니다. 그 표시 여 의 스크립트 때문에 메시지 상자에 txtString가 통과하고 | + | 2. 페이지를 실행함. 그럴 경우 |
\\ | \\ | ||
- | 3. 설정 ValidateRequest를 = "진정한" 또는 제거 ValidateRequest를의 페이지 속성을 다시 페이지로 이동합니다. 다음과 같은 오류 메시지가 표시되어 있는지 확인합니다. | + | 3. 설정값이 |
A potentially dangerous Request.Form value was detected from the client (txtString="< | A potentially dangerous Request.Form value was detected from the client (txtString="< | ||
줄 200: | 줄 200: | ||
<% = | <% = | ||
=== HTML 출력은 입력 매개 변수를 포함 여부 확인 === | === HTML 출력은 입력 매개 변수를 포함 여부 확인 === | ||
- | 출력은 입력 매개 변수가 포함되어 있는지 여부를 확인하는 당신의 | + | 출력은 입력 매개 변수가 포함되어 있는지 여부를 확인하고 디자인 및 당신의 페이지 코드를 분석함. 이러한 매개 변수는 다양한 소스로부터 올 수 있음. |
+ | \\ | ||
+ | |||
+ | 예)일반적인 입력 소스 | ||
* Form 필드 | * Form 필드 | ||
줄 229: | 줄 232: | ||
=== 잠재적으로 위험한 HTML 태그와 속성 검토 === | === 잠재적으로 위험한 HTML 태그와 속성 검토 === | ||
- | 당신이 | + | 동적으로 HTML 태그를 생성하고 잠재적으로 안전하지 않은 입력으로 태그 속성을 구성하는 경우, |
예) aspx 페이지에서는 < | 예) aspx 페이지에서는 < | ||
<%@ Page Language=" | <%@ Page Language=" | ||
줄 257: | 줄 260: | ||
가. 잠재적으로 위험한 HTML 태그 | 가. 잠재적으로 위험한 HTML 태그 | ||
- | 다음과 같은 일반적으로 사용되는 HTML 태그 | + | \\ |
+ | |||
+ | 예)악의적인 사용자가 스크립트 코드를 삽입 할 수 있는 일반적으로 사용되는 HTML 태그 | ||
* < | * < | ||
* < | * < | ||
줄 273: | 줄 278: | ||
* < | * < | ||
* < | * < | ||
+ | |||
+ | \\ | ||
예) HTML 특성을 사용하여 SRC , lowsrc , 스타일 및 HREF 크로스 사이트 스크립팅을 삽입 | 예) HTML 특성을 사용하여 SRC , lowsrc , 스타일 및 HREF 크로스 사이트 스크립팅을 삽입 | ||
<img src=" | <img src=" | ||
<img src=" | <img src=" | ||
<img src=" | <img src=" | ||
+ | \\ | ||
예) 사용할 수있는 스타일을 다음과 같이 MIME 타입을 변경하여 스크립트를 삽입하는 태그 | 예) 사용할 수있는 스타일을 다음과 같이 MIME 타입을 변경하여 스크립트를 삽입하는 태그 | ||
<style TYPE=" | <style TYPE=" | ||
alert(' | alert(' | ||
</ | </ | ||
+ | === 대책 평가 === | ||
+ | 몇 가지 입력을 사용하여 HTML을 생성하는 ASP.NET 코드를 찾을 때, 특정 응용 프로그램에 대한 적절한 대책을 평가 | ||
+ | \\ | ||
+ | |||
+ | 가. HTML 출력을 인코딩 | ||
+ | \\ | ||
+ | 웹 페이지에 텍스트 출력을 작성하고 텍스트를 HTML 특수 문자 (예 : <,>, and & 포함 된 경우 모르는 경우 )를 사용하여 텍스트를 미리 처리 | ||
+ | \\ | ||
+ | 예) 텍스트 사용자 입력, 데이터베이스 또는 로컬 파일에서 온 경우이 작업을 수행 | ||
+ | Response.Write(HttpUtility.HtmlEncode(Request.Form[" | ||
+ | |||
+ | 나. URL의 출력 인코딩 | ||
+ | \\ | ||
+ | 클라이언트 입력을 포함하는 URL 문자열을 반환 | ||
+ | \\ | ||
+ | 예) URL 문자열을 인코딩하는 방법 | ||
+ | Response.Write(HttpUtility.UrlEncode(urlString)); | ||
+ | |||
+ | 다. 필터 사용자 입력 | ||
+ | \\ | ||
+ | 텍스트 입력 필드의 어떤 종류를 예를 들어 HTML 요소의 범위를 수락해야 페이지가 있다면, 페이지에 대해 ASP.NET 유효성 검사를 요청시 비활성화해야함. 이렇게 여러 페이지가있는 경우, 동의 할 경우에만 HTML 요소를 허용하는 필터를 만듬. | ||
+ | \\ | ||
+ | * 안전 제한된 HTML 입력 | ||
+ | - ASP.NET 유효성 검사를 요청시 비활성화 ValidateRequest=" | ||
+ | - 문자열 입력 인코딩 HtmlEncode 방법. | ||
+ | - 사용되는 StringBuilder을 불러오고 교체 선택적으로 허용 할 HTML 요소에 인코딩을 제거하는 방법. |