2010-04-05 4 views
6

i를 HTML 내에서 index.htmlhttp://example.com/json/?a=...&b=...내 웹 서비스에 대한 액세스를 제한하는 방법은 무엇입니까?

에서 다음 index.html에 표시되는 정보의 JSON 배열을 웹 서비스 반환 웹 서비스를 호출하는 자바 스크립트 (XMLHttpRequest의)를 사용 http://example.com/index.html을 보유하고 있습니다.

누구나 index.html의 소스 코드를보고 내가 JSON 웹 서비스 (http://example.com/json/)를 호출하는 방법을 볼 수 있으므로 사람들이 내 JSON 웹 서비스를 직접 호출하지 못하게하려면 어떻게해야합니까? 웹 서비스가 오픈 내 데이터베이스에를 읽을 본질적이기 때문에, 나는 사람들이 웹 서비스를 남용하고 웹 서비스에서 직접 데이터를 가져 오는 시작하지 않으

,보다 더 많은 정보를 가져 오는, 서비스 거부 내 서버를 시작 그들이해야한다, 등등

UPDATE :

동일한 서버 (IP) 및 http://example.com/index.html의 URL 요청에서 온 만에 http://example.com/json/에 대한 요청을 제한 할 수있는 방법이 무엇입니까?

의미,요청자가 ($_SERVER['REQUEST_URI'] == http://example.com/index.html)임을 감지하고 허용 할 수 있습니까?

+2

음, 안녕하세요? 이 질문은 이미 우리가 이미 여기에서 대답하고있는 것과 같습니다. http://stackoverflow.com/questions/2576734/how-to-prevent-direct-access-to-my-json-service – Matchu

+0

@Matchu, 그것은 비슷하지만 Joshua Smith가 연결된 StackOverflow 게시물에 대한 주석으로 언급 한 것처럼) – Hank

+0

"내 JSON 서비스에 직접 액세스하지 못하도록하는 방법"== "사람들이 내 JSON 웹 서비스를 직접 호출하지 못하게하려면 어떻게해야합니까?" 이번에는 합리적인 근거를 제시 했으므로 합리적 대안 대안을 제시 할 수는 있지만 여전히 동일한 질문입니다. – Matchu

답변

0

서비스에 보안을 추가하기 위해 수행 할 수있는 다양한 작업이 있습니다. 이것을 확인하십시오 out

0

클라이언트 측 자바 스크립트에서 호출 할 수있는 웹 서비스를 안전하게 보호 할 수 없습니다.

자바 스크립트 난독 처리와 같은 모호한 기술을 통해 보안을 시도 할 수 있지만 동기 부여를받는 사람을 막지는 못합니다.

4

쉽게 방지 할 수있는 방법은 없습니다.. 귀하의 서비스가 매우 인기가 없어서 서비스 거부 공격의 대상이 될 가능성이있는 경우 귀찮은 일이 아닙니다.

내 마음에 들어온 한 가지는 일회용 토큰을 사용하는 것입니다 (10 개 또는 100 개의 요청에 유효 함).

다른 방법은 요청시 X-Requested-With 헤더가 있는지 확인하는 것입니다. 물론 쉽게 위조 될 수 있습니다. 그래서, 내 조언은 : 문제가 아닌 한 아무것도하지 않습니다.

한 가지 아이디어 : hash calc. 서버 측에서 계산을 검증하는 것은 저렴하지만 클라이언트는 모든 요청마다 다소 비싼 계산을 수행하도록 요구하는 것이 좋습니다. 단일 요청의 경우 오버 헤드가 매우 작지만 1000 요청의 경우 상당한 CPU 시간이 소요될 수 있습니다. hashcalc가 DoS'ing 웹 서비스를 막는 데 사용되었는지 전혀 모른다. 몇 년 전에는 안티 스팸 조치로 제안되었지만 결코 인기를 얻지는 못했습니다.

+0

일회용 토큰은 어떻게 작동하며 index.html 파일에서 생성됩니까? – Hank

+0

글쎄, 공격자는 새로운 토큰을 얻기 위해 index.html을 다시 가져올 수 있기 때문에, ip 등에서 분당 생성되는 토큰의 수를 제한하지 않는 한 매우 효율적인 대책이 아닙니다. – jholster

+0

HTTP_X_REQUESTED_WITH와 관련하여, 저는 믿을 수 없습니다 모든 언어로 제공됩니다 ... 예. PHP – Hank

1

답변은 정말 간단합니다. CSRF 보호를 사용하십시오. http://en.wikipedia.org/wiki/Cross-site_request_forgery

단순히 사용자가 세션에 넣어 사이트 (index.php에) 올 때 : CSRF = (RANDOM_HASH)

JSON 요청에 대해 물어 example.com/json.php?hash=$_SESSION['CSRF']

그리고 JSON이다.PHP가 $_GET['hash']과 일치하는지 확인하십시오. $_SESSION['CSRF']

간단 ... 서버 측 솔루션입니다!

+5

침입자가 직접 서비스에 액세스하는 것을 방지하기위한 것입니다. 당신의 접근 방식은 그것을 해결하지 못할 것입니다. 공격자는 index.html에 액세스하여 토큰을 얻은 다음 서비스에 직접 호출하여 원하는 정보를 얻습니다. –

+0

일회용 토큰이라고 생각합니다. index.php를 사용하지 않고 어떻게 할 수 있습니까? index.html과 함께이 작업을 수행 할 수 있습니까? – Hank

+0

파일 접미사는 중요하지 않지만 CSRF에는 "동적"페이지가 필요합니다. 즉 정적 파일로 수행 할 수 없습니다. – jholster

1

요청을하는 IP 주소를 추적합니다. 동일한 IP에서 많은 요청을받는 것을 본 적이 있다면 차단하거나 보안 문자를 제공 할 수 있습니다.

관련 문제