본문 바로가기
역사&지식

Ajax 보안이란 무엇인가?

by Forward-Man 2023. 6. 24.

Ajax 보안이란 무엇인가?

Ajax 보안이란 무엇인가?

Ajax는 비동기식 자바스크립트와 XML의 약자로 웹 애플리케이션 개발 방식입니다. Ajax를 사용하면 웹 페이지가 동적으로 업데이트되고 사용자와의 상호작용이 향상됩니다. 하지만 Ajax는 새로운 보안 위협과 취약점을 야기하기도 합니다. 예를 들어, Ajax는 다음과 같은 공격에 취약할 수 있습니다.

  • XSS (Cross-site Scripting): 이는 악의적인 스크립트를 웹 페이지에 삽입하여 사용자의 브라우저에서 실행시키는 공격입니다. Ajax에서 XSS는 JavaScript 객체, JSON 데이터, XML 스트림, JS 배열 등에 악성 코드를 삽입할 수 있는 여러 기회를 제공합니다. XSS 공격은 사용자의 개인 정보, 쿠키, 세션 등을 탈취하거나 웹 사이트의 기능을 변경하거나 악성 소프트웨어를 설치할 수 있습니다.
  • Same-Origin Policy 우회: Same-Origin Policy는 웹 브라우저가 다른 도메인에서 온 웹 애플리케이션들을 고립시키는 보호 메커니즘입니다. 예를 들어, http://www.example.com에서 다운로드된 웹 페이지는 http://www.example.com 이외의 서버와 통신할 수 없습니다. 하지만 Same-Origin Policy는 여러 가지 방법으로 우회될 수 있습니다. 예를 들어, 동적 스크립트 태그, JSONP, 프록시 서버, Flash 소켓 등을 이용하여 다른 도메인과 통신할 수 있습니다. Same-Origin Policy 우회는 원격 서버와의 비인가된 통신을 가능하게 하고, CSRF (Cross-site Request Forgery) 공격 등을 유발할 수 있습니다.
  • Web 2.0 콘텐트 신뢰성 문제: Web 2.0은 사용자가 콘텐트에 기여하고 참여할 수 있는 웹 애플리케이션을 말합니다. 예를 들어, 블로그, 위키, 소셜 네트워크 등이 있습니다. Web 2.0에서 콘텐트는 신뢰할 수 있는 서버에서 제공되기도 하지만 익명의 사용자나 다른 서비스에서 제공되기도 합니다. 따라서 콘텐트의 출처와 품질을 검증하기 어렵습니다. Web 2.0 콘텐트 신뢰성 문제는 XSS 공격이나 SQL Injection 공격 등을 유발할 수 있습니다.

 

Ajax 보안과 관련된 실제 사례

마이스페이스의 새미 웜: 이는 2005년에 마이스페이스라는 소셜 네트워크 사이트에서 발생한 XSS 공격입니다. 새미라는 공격자가 자신의 프로필 페이지에 악성 스크립트를 삽입하였고, 이 스크립트는 다른 사용자가 그 페이지를 방문할 때마다 실행되어 새미를 친구로 추가하고 그의 메시지를 복사하여 전파하였습니다. 이 공격으로 인해 수백만 명의 사용자가 영향을 받았습니다.

구글 웹 툴킷의 JSON 파싱 취약점: 이는 2006년에 구글 웹 툴킷이라는 Ajax 개발 프레임워크에서 발견된 JSON 파싱 취약점입니다. 구글 웹 툴킷은 JSON 데이터를 받아서 eval() 함수로 실행하는 방식을 사용하였는데, 이는 악의적인 JSON 데이터가 실행되어 XSS 공격이나 원격 코드 실행 공격이 가능하게 하였습니다. 이 취약점은 구글 웹 툴킷의 업데이트로 해결되었습니다.

구글 리더의 CSRF 취약점: 이는 2007년에 구글 리더라는 RSS 리더 서비스에서 발견된 CSRF 취약점입니다. 구글 리더는 사용자가 자신의 RSS 피드를 공유하고 댓글을 달 수 있는 기능을 제공하였는데, 이 기능을 이용하여 악의적인 웹 사이트가 사용자의 세션을 탈취하고 구글 리더에 액세스할 수 있었습니다. 이 취약점은 구글 리더의 업데이트로 해결되었습니다.

 

Ajax 보안을 향상시키기 위한 방법

입력값 검증: Ajax 애플리케이션은 사용자나 다른 서비스로부터 입력값을 받을 때마다 적절한 검증을 수행해야 합니다. 입력값에 악성 스크립트나 SQL 명령어 등이 포함되어 있지 않은지 확인하고, 필요한 경우 인코딩하거나 필터링해야 합니다. 또한, 서버 측에서도 입력값 검증을 반복해야 합니다.

Same-Origin Policy 준수: Ajax 애플리케이션은 Same-Origin Policy를 준수하여 다른 도메인과의 통신을 제한해야 합니다. Same-Origin Policy를 우회하는 방법들은 보안 위험을 높일 수 있으므로 사용하지 않는 것이 좋습니다. 만약 다른 도메인과의 통신이 필요하다면, CORS (Cross-Origin Resource Sharing) 같은 안전한 메커니즘을 사용해야 합니다.

콘텐트 신뢰성 검증: Ajax 애플리케이션은 다른 서비스나 사용자로부터 받은 콘텐트의 신뢰성을 검증해야 합니다. 콘텐트의 출처와 품질을 확인하고, 디지털 서명이나 해시 값 등을 이용하여 콘텐트의 무결성을 보장해야 합니다. 또한, 콘텐트를 실행하기 전에 안전한지 확인하고, 필요한 경우 샌드박스 환경에서 실행해야 합니다.

암호화와 인증: Ajax 애플리케이션은 원격 서버와의 통신에 SSL/TLS 같은 암호화 프로토콜을 사용해야 합니다. 이는 중간자 공격이나 데이터 변조를 방지할 수 있습니다. 또한, Ajax 애플리케이션은 사용자나 서비스의 신원을 확인하기 위해 적절한 인증 메커니즘을 사용해야 합니다. 예를 들어, 세션 ID나 토큰 등을 이용하여 인증 상태를 유지하고, CSRF 공격을 방지하기 위해 CSRF 토큰 등을 사용해야 합니다.

또 다른 방법으로는, Ajax 애플리케이션에서는 사용자가 볼 필요가 없는 데이터를 클라이언트 측에서 가지고 있지 않도록 하는 것입니다. 이러한 데이터는 서버 측에서 관리하고, 필요할 때마다 Ajax 요청을 통해 가져오도록 합니다. 이렇게 하면 클라이언트 측에서 데이터를 관리하는 것보다 보안성이 높아집니다.