차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판이전 판
다음 판
이전 판
다음 판양쪽 다음 판
guide:ajax_개발_보안_가이드 [2013/11/26 06:14] 121.140.124.172guide:ajax_개발_보안_가이드 [2013/11/26 06:35] 121.140.124.172
줄 101: 줄 101:
   </SCRIPT>   </SCRIPT>
 </code> </code>
 +== (2) 보안 대책 ==
 +XSS는 공격자들이 웹 어플리케이션에 몰래 침투하기 위해 이용하는 가장 일반적인 공격 중에 하나이다. XSS는 JavaScript를 통해 이루어지는 공격이므로 JavaScript로 구성된 Ajax에게 치명적인 공격이 될 수 있다. Ajax가 비동기 방식으로 웹 페이지를 불러오는 과정에서 악성 스크립트가 삽입된다면 Ajax의 특성상 사용자는 공격 당하고 있다는 사실을 모른 채 공격 코드가 사용자의 시스템에서 실행된다. 또한 Ajax는 한번 신뢰된 사이트는 지속적으로 신뢰를 하게 되기 때문에 방화벽 등을 우회할 수 있다는 것이 가장 큰 문제점이라 할 수 있다.
 +\\
 +결국 악의적인 사용자는 Ajax의 XSS 취약점을 가지고 여러 가지 방법으로 악성 스크립트를 삽입하여 임의의 사용자의 세션 및 쿠키, 패스워드, 중요한 개인정보 등을 훔치는 등의 공격을 행할 수 있기 때문에 다음과 같은 대응 방안을 권고한다.
 +\\
 +  - Server-Side에서 입력값 검증이 이루어져야 한다.
 +  - 사용자 입력처리 모듈을 사용하여 비정상적인 악성 스크립트 삽입이 되지 않도록 필터링을 해야 한다.
 +    - 사용자 계정 및 패스워드 타입\\ 사용자 인증 부분에는 SQL Injection 유형을 차단하기 위해 숫자, 영문 대/소문자 길이 등을 정의하고 기타 문자는 입력 받지 않는다.
 +    - 게시판 타입\\ 입력문자의 타입(영문 대/소문자) 및 길이를 정의하여 통제할 수 있다. CSS에 사용되는 문자열이 삽입될 수 있으니 주의해야 한다.
 +    - 주민등록번호 타입\\ 주민등록번호를 입력 받기 위해 숫자형태의 6~7자리를 정의한다.
 +    - 날짜타입\\ 사전에 정의된 날짜 형식을 사용하거나 날짜형식에 맞는 표현식을 작성한다.
 +    - 숫자타입\\ 계좌이체의 경우 이체금액을 음수(-)로 입력할 경우 잔액계좌에는 오히려 금액만큼 증가될 수 있기 대문에 금액을 입력 받는 부분은 양수(+)만을 입력 해야한다.
 +    - 기타 취약성 문자\\ <  >  \  ”   ‘  (   ) &  등의 문자를 사용하는 경우 해당 문자를 다른 문자로 변경하는 것이 보안상 안전하다.
 +\\
 +^ From ^ To ^
 +|  <  | &lt; |
 +|  >  | &gt; |
 +|  (  | &#40; |
 +|  )  | &#41; |
 +|  #  | &#35; |
 +|  &  | &#38; |
 +== Anti XSS Ajax ==
 +XSS는 대부분의 웹 개발자들이 현재까지 여전히 고통 받는 문제점이라고 이야기한다. 검증 없이 사용자 입력 값을 출력하는 코드의 한 라인 한 라인의 모든 사용자 입력 값을 검증하는 게 힘들기 때문에, 한번 취약한 몇 개의 공격 메소드들을 웹 어플리케이션 사용자에게 적용 된다면 이 공격들은 방어 할 수 없을 정도로 위험할 수 있다.
 +\\
 +우리가 이미 알다시피, 완전한 코드는 현실세계에 존재하지 않으며 몇몇 버그들은 방어 없이 검사 구문을 빠져나간다. 특히 코드 검사자가 보안 마인드 없이 검사를 수행한다면, 몇 번의 검사를 반복해서 수행 하더라도 웹 어플리케이션을 XSS 공격에 취약할 것이다. 실제 환경에서 제품에 XSS취약점이 나타난 경우,XSS 공격을 피하는 위험 완화 계획에 대한 해답을 얻기위해서는 다음에 대해 생각해 보아야 한다.
 +\\
 +  - XSS 공격은 기본적으로 사용자 단에서 발생된다.
 +  - XSS 공격은 보통 javaScript를 이용해서 발생된다.
 +\\
 +위의 두 관점을 살펴보면 우리는 서버 단에의 방어와 검증을 빠져 나오는 XSS공격을 멈추기 위해 클라이언트 단에서 이를 막아야 한다는 결론이 나온다. 이는 XSS공격이 <script>를 사용하는 javascript에 기본을 두고 있으므로, 지금 이런XSS공격을 막기 위해서 넘겨지는 HTML을 서버 단에서 필터 하는 JavaScript를 사용한다. 이는 공격자 Javascript를 확인하고 사용자와 관리자에게 공격을 알리는 기능을 한다.
 +\\
 +지금 당면한 진짜 과제는 어떻게 정상적인 javascript에서 공격자 javascript를 확인하는가 하는 것이다.  우리는 정상적인 javascript 어떤 시그니쳐 같은 것을 적용하여 웹 페이지에 삽입된 악의적인 javascript인지 확인할 수 있고, 다른 javascript를 사용해 공격자의 비정상적인 javascript인지를 확인해 페이지 내용을 필터 할 수 있을 것이다. 다음은 클라이언트 단에서 비정상적인 javascript가 발견되었을 때 비정상 적인 행동을 유발할 수 있는 javascript의 예이다.
 +\\
 +