2011-03-07 3 views
1

요청이 안전하지 않은 클라이언트 식별이없는 AJAX 집중 웹 응용 프로그램이 있습니다. 나는 서버에서 요청을하는 내 응용 프로그램이 있는지 여부를 확인하지 않습니다.AJAX 요청에 대해 특정 클라이언트 만 허용

최근 내 웹 앱을 모방 한 iPhone 앱을 만들기 위해 일부 사람들이 내 아약스 요청 URL을 사용함을 알게되었습니다. 사용자 에이전트 문자열을보고 iPhone에서 요청을 삭제하는 필터를 추가했습니다. 이것은 확실히 일시적인 해결책입니다.

특정 사용자 에이전트를 차단하는 대신 요청을 내 응용 프로그램에서 가져온 것일 수 있습니까? FB 앱과 같은 서비스를 추가하는 경우 Google 가젯 등은 요청을하기 위해 이들을 원합니다.

질문은 어떻게 내 요청이 내 앱에서 비롯되었으며 다른 모든 요청을 삭제할 수 있는지입니다.

+0

Ajax 보안은 동기 양식 제출 보안과 다르지 않습니다. 세션 및 IP 로깅 기술을 사용할 수 있습니다. 서버 측에서 IP 및 세션의 유효성을 검사합니다. – vPJ

+0

@vPJ - 무엇에 대한 IP와 세션의 유효성을 검사합니까? '세션'이 iPhone 앱에 내장 된 프록시가 아니라는 것을 알 수있는 방법은 아직 없습니다. – Tony

답변

0

AJAX 호출에서 찾는 응답과 함께 보내는 특수 토큰을 사용할 수 있습니다. 그러면 호출자가 먼저 웹 페이지를로드해야합니다. 그러나 여전히 사용자가 iPhone 앱에서 오지 않는다고 보장 할 수는 없습니다. 응용 프로그램은 단순히 동일한 정보를 처리하고 프록시 역할을 할 수 있으며 HTTP 요청을 기반으로이를 알릴 방법이 없습니다.

사이트에 정의 된 이용 약관이 있습니까? 그렇다면 가장 먼저해야 할 일은 애플에게 연락하여 앱이 이용 약관을 위반했다고 말하면서 앱을 꺼내고 싶다는 것입니다. 그렇지 않은 경우 사용 약관을 작성하고 변경 사실을 알린 앱 작성자에게 연락하여 앱을 다운 받거나 다른 조건으로 안내해야합니다. 모든 문제가 해결되지 않으면 가장 좋은 방법은 AJAX 호출을 직접 사용하기 어렵게 만드는 것입니다. JS를 난독 화하고 최소화하는 (그리고 서버 측 함수의 이름을 너무 잘 지명하지 않는) 간단한 작업은 데이터 스크래핑에 대한 기준을 높입니다.

+0

토큰을 만드는 데 권장되는 방법이 있습니까? –

+0

@Aravindan 위의 Spike가 언급 한 CSRF toekn은 제가 말하고자했던 것과 정확히 같습니다. – Tony

1

응용 프로그램인지 아닌지는 알 수 없습니다. 단순히 응용 프로그램이 서버에 보내는 모든 내용을 다른 응용 프로그램에서 보낼 수도 있기 때문입니다. 그러나 응용 프로그램이 아닌 다른 곳에서는 서비스를 사용하기가 더 어려워 질 수 있습니다. 자주 변경되는 매개 변수 나 URL의 일부로 전송 된 일부 키를 가질 수 있으며 자신의 스크립트에 포함해야합니다. 그것은 발견하고 다른 응용 프로그램에서 사용하는 것이 아주 간단하게 만들지 만 매시간마다 바뀌는 것이면 스크립트를 가져 오지 않고도 항상 작동 할 간단한 AJAX 요청을 작성하는 것이 불가능할 것입니다. 열쇠를 찾으면 아무도 적어도 당신의 서비스가 모든 사람에게 공개적으로 사용 가능하다고 믿는 척하지 않을 것입니다. 이것은 거의 당신이 할 수있는 일이며, 사용하기가 더 어렵고 성가 시게 만듭니다. 당신은 그것을 불가능하게 만들 수 없지만, 충분히 어려워 질 수 있습니다.

0

서버와 앱이 어느 시점에서 비밀을 공유해야하기 때문에 어려울 것입니다. 이 비밀은 앱과 함께 배포되며 엔지니어를 리버스 할 수 있습니다. 지금은 각 양식에 CRSF 토큰 (this wiki 참조)을 추가 할 수 있습니다. 앱을 배포 한 다음 앱을 긍정적으로 식별하는 것은 해결되지 않은 문제입니다.

+0

호기심에서 벗어나 아직 해결되지 않은 문제인 경우 Gmail과 같은 앱이 어떻게 ajax 요청을 보호합니까? –

+1

그들은 각 요청에 CSRF 토큰 (nonce aka CSRF token)을 넣습니다. 서버가 브라우저에 임의의 값을 보내면 브라우저는 모든 요청에 ​​해당 값을 포함시킵니다. 그 문제는 해결되었습니다. 그들은 자신의 의정서를 알아 내고 내 자신의 GMail 클라이언트를 쓰는 것을 멈추지 않았습니다. 그 문제는 AFAIK 미해결입니다. –

+0

흥미 롭습니다. 어떻게 nonce를 생성 할 수 있습니까? MD5, SHA? 어떤 추천? –

0

요청의 성격을 모르지만 사용자를 인증해야하는 경우 매번 서버에서 인증해야합니다. Zed가 지적한대로 다른 개발자가 API를 호출하는 것을 막을 수는 없습니다. 나는 당신이 그것을 어렵게 만들 수 있다는 것에 동의한다. 그래서이 서드 파티 애플리케이션이 작동하지 못하게하는 것이 얼마나 중요한지에 따라 기본적으로 군비 경쟁이다.

2

지옥, 나는 여기에서 완전히 다른 길을 갈 것입니다.

아이폰 앱을 만든 사람에게 유료로 서비스를 계속 사용하게하십시오. 설치 당 $ .50 정도를 선택하십시오.그렇게하면 0.99 달러에 앱 스토어에서 앱을 판매 할 수 있습니다. 애플이 30 % 줄이자. 그러면 너는 거래에 대해서도 조금씩 얻는다.

누군가가 앱을 개발하는 데 어려움을 겪은 경우 잘 활용할 수 있습니다.

관련 문제