본문 바로가기
Framework/AJAX

AJAX 보안

by windrises 2007. 12. 24.

AJAX 보안 : AJAX에서 사용되는 XMLHttpRequest는 HTTP 방식과 동일하게 GET, POST 방식으로 요청을 보내고 문자열이나 XML 형태로 응답을 받기 때문에 HTTP traffic을 훔쳐봄으로써 정보가 노출될 수 있고, 이런 문제로 AJAX가 보안에 취약하다는 꼬리표를 달고 있다. https와 같은 암호화 통신은 지원되지 않지만 AJAX에 적용될 수 있는 보안기법을 정리해보았다.

AJAX에서 사용되는 보안은 기존 웹과 유사하다. 기본적으로 javascript에서와 같이 동일 도메인으로만 요청이 가능하도록 제한이 되어 있고, cookie를 사용한 인증도 가능하다. 하지만 이런 방식이 데이타 자체의 안정성을 보장하지는 못하기 때문에 몇가지 다른 기법이 사용될 수 있다.

1. token 사용 : UUID와 같은 토큰을 사용함으로써 유효한 사용자의 요청에만 응답할 수 있다. session에 키를 저장한 후 동일서버로 일정한 시간안에 XMLHttpRequest 요청이 들어오는 경우만 응답을 하는 방식으로 유효성을 체크할 수 있다.

<head>
<script language="Javascript">
//Generated on the server and included as part of the dynamically generated HTML
var ajaxToken = "dff0194b-384f-43d3-0059-889247de5f88";	

//Make a request for some data and include the token
var req = new XMLHttpRequest();
req.setRequestHeader("AJAX-Token", ajaxToken);
. . ..
</script>
</head>

2. 문자열 암호화 : XMLHttpReqeust는 문자열로 응답을 주기 때문에 문자열 자체를 암호화 해서 데이타를 전송할 수 있다. 하지만 암호화된 내용을 javascript 로 decription 하는 과정에서 key 또는 암호화 algorithm이 노출 될 위험이 있다. (참고) 이 문제를 해결하기 위해서는 AJAX 관련 js 파일을 매번 서버에서 새로 생성해 줌으로써 해킹의 위험성을 줄이는 방법이 있다.

위의 방법으로 어느정도 데이타를 보호할 수는 있지만 완벽한 보안이란 존재하지 않는다. 특히 AJAX로 데이타를 주고 받는 경우 사용자 인증 과정을 꼭 거쳐야 하고, 민감한 내용은 가급적 보안이 되는 통신을 사용하는 것이 좋으리라 생각된다.