2014-02-14 8 views
1

Java EE 및 일부 오픈 소스 구성 요소 (Spring, Struts 2, jQuery 등)를 사용하여 웹 응용 프로그램을 개발하고 있습니다. 내 웹 페이지 중 일부는 인증 (스프링 보안)이 필요하고 다른 것은 필요하지 않습니다. 일부 REST API (Restlet)를 작성하고 AJAX 호출 (jQuery)에서 내 페이지에서 사용합니다. CORS를 사용 설정하고 내가 원한다면 다른 웹 사이트에서 내 REST API를 사용할 수 없다는 것을 알고 있습니다.브라우저가 아닌 클라이언트의 안전한 REST API

그러나 브라우저가 아닌 클라이언트 (컬, Java 응용 프로그램 등)는 내 REST API를 호출 할 수 있습니다. 어떻게이를 금지 할 수 있습니까? 인증이 필요하지 않아야하는 웹 페이지에서 일부를 사용하기 때문에 모든 REST API에 대해 인증을 사용할 수 없습니다. 일부 API (Facebook SDK와 같은)는 호출을 가능하게하기 위해 애플리케이션 ID가 필요하지만 누군가 내 웹 페이지에 포함 된 자바 스크립트 코드에서 키를 훔칠 수 있다는 것을 알고 있습니다.

두 번째 경우에만 일종의 인증을 적용하기 위해 브라우저 또는 다른 클라이언트 응용 프로그램에서 HTTP 요청을 보낸 경우 서버 측에서 인식하고 싶습니다. 내가 우려하는 것처럼, 모든 클라이언트 응용 프로그램은 HTTP 헤더를 설정할 수 있으므로 HTTP 헤더를 사용할 수 없습니까? 나는 내 문제가 공통적 인 문제라고 생각한다. 그래서 나는 아마도 뭔가를 놓친다.

답변

2

할 수 있는게 없습니다.

대부분의 사람들은 응용 프로그램을 사용하는 권한이없는 사용자가 걱정됩니다. 허가받지 않은 프로그램에 대해 걱정하고 있습니다.

그러나 프로그램이 서버와 통신하는 데 필요한 모든 정보는 서버에서 토큰으로, 사용자가 자격 증명에서와 같이 알려줍니다.

"비 브라우저"클라이언트를 두려워하는 이유는 무엇입니까? 왜 그들이 어떤 클라이언트를 사용하는지 신경 쓴다. 브라우저 이외의 클라이언트가 일반 브라우저와 다른 점은 무엇입니까?

그 질문에 답하면 더 나은 답변을 찾을 수 있습니다.

당신은 사이트를 "긁어내어 화면을 찍을 것"이라며 wget과 같은 것으로 신속하게 다운로드 할 수 있습니까? 그런 다음 IP x.y.z.w가 BLEEM 당 Q 요청보다 많은 시간을 보낸 다음 요청/절전 10 초를 버리거나 실제로 콘텐츠를 보내면 서버 액세스 규칙을 적용 할 수 있습니다.

이러한 조치는 사용자가해야하는 조치입니다. 고객을 "보호"할 수는 없으며 고객을 확보하는 것이 아닙니다. 서버를 보호하고 문제를 해결해야합니다.

클라이언트/서버 디자인 # 1의 규칙 "클라이언트 신뢰 안함"을 기억하십시오. 인터넷에서 아무도 당신이 봇이라고 몰라요.

+0

예, DoS 공격 및 기타 맬웨어에 대해 걱정합니다. 두통없이 모든 API에 적용 할 수있는 간단한 해결책을 찾고 있습니다. –