2008-09-01 10 views

답변

27

페이지에서 AJAX 호출이 할 수있는 요청은 응용 프로그램 외부의 사람이 할 수도 있습니다. 제대로 된 경우, 웹 애플리케이션에서 AJAX 호출의 일부로 만들 었는지 아니면 손으로/다른 방법으로 만들 었는지 알 수 없습니다.

AJAX 호출 만 데이터를 게시 할 수 있다고 말하면서 생각할 수있는 두 가지 시나리오가 있습니다. 악의적 인 사용자가 데이터를 게시하지 못하도록하려는 경우 이는 다른 사용자의 데이터를 방해하거나 실제로 게시물을 다중 요청 작업의 "흐름"에 있도록 제한하려고합니다.

첫 번째 사례 (다른 사용자와 /에 다른 사용자에게 악의적 인 데이터를 게시하는 사용자)와 관련하여 해결 방법은 AJAX를 사용하든 아니든간에 동일합니다. 즉, 필요한 모든 수단을 통해 사용자를 인증하면됩니다. - 일반적으로 세션 쿠키를 통해.

두 번째 사례에 관심이있는 경우 프로세스의 각 단계에서 고유 한 토큰을 발급하고 서버 측에 예상 토큰을 저장하는 등의 작업을해야합니다. 그런 다음 요청이 이루어지면 수행중인 작업과 예상 토큰이 일치하고 해당 토큰이 아직 사용되지 않았 음을 나타내는 서버 측에 해당 항목이 있는지 확인하십시오. 아니오 인 경우 요청을 거부하고, 존재할 경우 해당 토큰을 사용 된 것으로 표시하고 요청을 처리합니다.

이 두 가지 시나리오 중 하나가 아닌 다른 것에 대한 우려가있는 경우 답변은 제공 한 것보다 더 구체적인 내용에 따라 달라질 수 있습니다.

+2

세션 쿠키 인증의 문제점은 CSRF 공격을 막는 것만으로는 충분하지 않다는 것입니다. 아약스 사용 여부에 관계없이 보안의 추가 레이어를 배치하는 것이 좋습니다. http://en.wikipedia.org/wiki/Csrf –

+0

@JesseHallett, 안녕하세요, 저는 보안 계층으로 Spring Securiy을 사용하고 있으며 클라이언트 측에서 AJAX 게시 요청을하고 있습니다. CSRF 토큰을 사용하도록 설정 했으므로 AJAX 게시 요청 중에 전달하는 각 요청마다 서버 클라이언트 토큰을 공유합니다. 내 절차가 충분히 안전합니까? –

5

Ajax 게시물이 인증 된 컨텍스트에서 수행되도록 세션을 사용하십시오. Ajax 코드를 서버의 다른 클라이언트로 생각하면 인증 문제를 쉽게 해결할 수 있습니다.