2011-10-07 3 views
0

해당 API에 대한 ajax 호출을하는 API와 웹 사이트가 동일한 서버 (심지어 도메인)에있는 경우 어떻게 해당 API를 보호하겠습니까?전화를 걸는 웹 사이트와 동일한 도메인/서버에서 API 보안 설정?

같은 서버의 요청 만 허용됩니다. 다른 도메인의 원격 요청이 없으며 SSL이 이미 설치되어있어 안전하다는 뜻입니까?

+0

로컬 호스트의 요청 만 원하거나 동일한 도메인의 요청 만 원하는지 여부를 명확히 할 수 있습니까? – stivlo

답변

1

내가 혼란을 피우는 데 도움이되고 싶다고 생각합니다.

"Ajax 호출하기"에 관해서는 응용 프로그램에 대해 서버에 원격 요청을하는 것에 대해 이야기하고 있습니다. 웹 사이트가 동일한 도메인에서 제공 되더라도 원격 요청을하고있는 것입니다.

같은 서버의 요청 만 허용됩니다.

거기에 문제가있다. 서버 간 요청을하는 것이 아닙니다. 클라이언트 - 서버 (Ajax)에서 요청하는 것에 대해 이야기하고 있으므로 IP 제한을 사용할 수 없습니다 (사이트에 액세스 할 모든 클라이언트의 IP 주소를 알지 못하는 경우).

Ajax 요청을 제한하는 것은 다른 요청을 제한하는 것과 다를 필요는 없습니다. 권한이없는 사용자가 "정상적인"웹 페이지에 액세스하지 못하도록하려면 어떻게합니까?일반적으로 사용자를 인증하고 서버에서 사용자 세션을 생성 한 다음 세션 쿠키를 전달하여 모든 요청에 ​​제출합니다. 모든 것들은 Ajax 요청에도 적용됩니다.

API가 인터넷에 노출 된 경우 허용 된 클라이언트의 IP를 모두 알지 못하면 다른 사람이 요청을 시도하지 못하게 할 수 없습니다. 따라서 허용 된 클라이언트의 원격 호출을 인증하려면 서버 측 제어 기능을 사용해야합니다.

아, TLS가 올바른 위치에있는 단계입니다. 나는 TLS없이 할 수 있다고 생각하는 개발자의 수에 항상 놀란다. 그러나 TLS만으로는 충분하지 않습니다.

1

HTTP 헤더에서 request_referer을 확인하십시오. 요청이 어디에서 왔는지 알려줍니다.

+0

안정적으로 알려주지 않습니다. – Quentin

+0

쉽게 가짜입니다. 안전하지 않은 방법. – mlissner

0

동일한 서버에서만 요청을 받아들이고 api 디렉토리 또는 가상 호스트 구성 지시어에 127.0.0.1 또는 localhost 만 허용하려면 IP 주소를 확인할 수 있습니다. 구성은 보유하고있는 웹 서버를 기반으로합니다.

+0

Ajax가 사용되고있는 것이 문제입니다. 거의 확실하게 "웹 사이트를 방문하는 브라우저"가 아니라 "웹 사이트"를 의미합니다. 브라우저는 일반적으로 다른 IP 주소를 가진 다른 컴퓨터에서 실행되므로이 ​​방법은 도움이되지 않습니다. – Quentin

+0

예, 내 잘못 ... '원격 요청 없음'및 '해당 API에 대한 아약스 호출'은 임무가 불가능합니다. 어쩌면 당신은 Google과 같은 API 키를 설정할 수 있습니다. 키가 해당 도메인에 유효하면 액세스를 허용합니다. – Guntis

1

보호 대상에 따라 다릅니다.

써드 파티 당신이 disableprotection 그 조치를하지 않는 사이트

브라우저 will protect you automatically에 그 방문자가 자격 증명을 사용하여 API에서 데이터를 요청하는 방문자를 받고.

써드 파티 당신의 API와 원정 팀 자격 증명

아무것도 아약스이 문제와 관련된를 사용하여 사이트에 대한 변경을 요청하는 방문자를 받고. CSRF에 대한 일반적인 방어를 구현하십시오. 다시 자신의 클라이언트

,이 문제와 관련된 아무것도 Ajax를 사용하여 데이터를 요청

써드 파티. 요청이 내려지는 것을 막을 수는 없습니다. 인증/승인 (예 : 비밀번호 보호)이 필요합니다. 이미 SSL 설치 한

이 평균 내가 도중에 차단되는 데이터를 보호 안전

번호입니다 않습니다. 다른 사람이 데이터를 요청하거나 끝점에서 액세스하는 것을 막지는 못합니다.