2012-04-26 4 views
1

HTML/CSS/JS + 애셋만으로 대부분 정적 인 웹 앱에서 작업하고 있습니다. 나는 그것을 제공하기 위해 랙 서버 (Thin, 실제로)를 사용하고있다.API 호출을 비공개/보호 된 상태로 유지

앱이 대부분 정적이지만, 그 과정에서 몇 가지 서버 측 요구 사항이 있습니다. 앱이 자바 스크립트를 통해 이러한 요구 사항과 상호 작용해야하기 때문에 Sinatra를 스택에 추가하여 간단한 경로로 손쉽게 간단한 API로 사용할 수 있도록했습니다.

이러한 API 호출 중 하나는 전자 메일을 보내는 것으로, 웹 응용 프로그램은 사용자에게 전자 메일을 보내는 방법이 필요합니다. JSON 객체를 포함하는 POST로 호출 할 수있는 경로 (/ api/mail)를 설정하고 Ruby는 SendGrid를 통해 전자 메일을 시작합니다.

여기 내 문제가 있습니다. 본질적으로 이러한 API 호출은 공개됩니다. 대부분의 경우 괜찮습니다. 이메일 API를 사용하면 아무도 내 POST로 간단한 POST로 악성 전자 메일을 보내기 시작할 수 없도록 보호하고 싶습니다.

문제는 인증 방법을 잘 모르겠습니다. 누군가가 POST 헤더를 냄새 맡고 앱이 API에 게시하는 자격 증명을 잡을 수 있기 때문에 웹 앱 자체는 사용자가 아닌 클라이언트이므로 비밀번호 나 API 키는 쓸모없는 것처럼 보입니다.

SSL을 통해 모든 것을 암호화하는 것이 유일한 옵션입니까 아니면 눈에 띄게 분명한 해결책이 누락 되었습니까?

+1

SSL이 어떻게 도움이 될까요? 당신은 누구로부터 보호하려고합니까? – ykaganovich

+0

간단한 공개 POST 호출을 통해 익명 사용자가 내 이메일 API를 가로채는 것을 방지하려고합니다. 아무도 그들이 원하는 이메일을 보낼 수 없도록 두 가지 이유가 있습니다. 비싸고 보안 위험이 있습니다. 악의적 인 사용자가 내 앱으로 생각합니다. API 키 (또는 암호 또는 뭔가)를 POST에서 전달하여 내 사이트에 전화를 걸 수 있음을 알았지 만 POST 헤더에서 키를 잡아 내지 못하도록 SSL 암호화가되어 있어야합니다. – redhotvengeance

+0

SSL은 클라이언트에 대한 서버를 인증하고 전송시 데이터를 암호화 된 상태로 유지합니다. 그러나 클라이언트를 인증하지는 않습니다. 누구든지 (a) 브라우저를 열고 양식 페이지에 포함 된 API 키를 보거나 (b) 양식 페이지를 다운로드하고 프로그래밍 방식으로 가져 오는 스크립트를 작성할 수 있습니다. 기본적으로 공개가 아니므로 API에 대한 액세스를 암호로 보호 할 수는 있지만 이는 시스템에 계정이있는 사용자를 신뢰한다는 의미입니다. 기본 질문은 누구이며,이 API를 신뢰할 수있는 사람이 누구인지 믿습니다. – ykaganovich

답변

2

하루가 끝날 때, 당신이하는 일은 쉽게 긁힐 수 있습니다. 나는 공격적인 속도로 IP와 세션을 제한하고, 다른 것이 가능할 것 같지 않거나 효과적 일 것이라고 생각하지 않는다.

+0

SSL을 사용하더라도 POST 호출을 긁을 수 있습니까? – redhotvengeance

+0

SSL을 사용하는 @idollar, 네트워크 내의 트래픽은 암호화되지만, 어떤 사람이 브라우저 봇을 작성한 경우 매트보다 앞서 서버 측에서 확인해야합니다. – Adeel

+0

@Adeel 그럼 내 앱이 전화를 걸고 POST를하는 무작위 사용자가 아닌지 확인하기 위해 구현할 수있는 서버 측 검사는 무엇입니까? 속도 제한은 솔루션처럼 느껴지지 않습니다. 이메일 API를 사용하여 1 시간이든 1000 시간이든간에 내 앱으로 악의적으로 포즈를 취하는 사람을 원하지 않기 때문입니다. – redhotvengeance

관련 문제