HTML/CSS/JS + 애셋만으로 대부분 정적 인 웹 앱에서 작업하고 있습니다. 나는 그것을 제공하기 위해 랙 서버 (Thin, 실제로)를 사용하고있다.API 호출을 비공개/보호 된 상태로 유지
앱이 대부분 정적이지만, 그 과정에서 몇 가지 서버 측 요구 사항이 있습니다. 앱이 자바 스크립트를 통해 이러한 요구 사항과 상호 작용해야하기 때문에 Sinatra를 스택에 추가하여 간단한 경로로 손쉽게 간단한 API로 사용할 수 있도록했습니다.
이러한 API 호출 중 하나는 전자 메일을 보내는 것으로, 웹 응용 프로그램은 사용자에게 전자 메일을 보내는 방법이 필요합니다. JSON 객체를 포함하는 POST로 호출 할 수있는 경로 (/ api/mail)를 설정하고 Ruby는 SendGrid를 통해 전자 메일을 시작합니다.
여기 내 문제가 있습니다. 본질적으로 이러한 API 호출은 공개됩니다. 대부분의 경우 괜찮습니다. 이메일 API를 사용하면 아무도 내 POST로 간단한 POST로 악성 전자 메일을 보내기 시작할 수 없도록 보호하고 싶습니다.
문제는 인증 방법을 잘 모르겠습니다. 누군가가 POST 헤더를 냄새 맡고 앱이 API에 게시하는 자격 증명을 잡을 수 있기 때문에 웹 앱 자체는 사용자가 아닌 클라이언트이므로 비밀번호 나 API 키는 쓸모없는 것처럼 보입니다.
SSL을 통해 모든 것을 암호화하는 것이 유일한 옵션입니까 아니면 눈에 띄게 분명한 해결책이 누락 되었습니까?
SSL이 어떻게 도움이 될까요? 당신은 누구로부터 보호하려고합니까? – ykaganovich
간단한 공개 POST 호출을 통해 익명 사용자가 내 이메일 API를 가로채는 것을 방지하려고합니다. 아무도 그들이 원하는 이메일을 보낼 수 없도록 두 가지 이유가 있습니다. 비싸고 보안 위험이 있습니다. 악의적 인 사용자가 내 앱으로 생각합니다. API 키 (또는 암호 또는 뭔가)를 POST에서 전달하여 내 사이트에 전화를 걸 수 있음을 알았지 만 POST 헤더에서 키를 잡아 내지 못하도록 SSL 암호화가되어 있어야합니다. – redhotvengeance
SSL은 클라이언트에 대한 서버를 인증하고 전송시 데이터를 암호화 된 상태로 유지합니다. 그러나 클라이언트를 인증하지는 않습니다. 누구든지 (a) 브라우저를 열고 양식 페이지에 포함 된 API 키를 보거나 (b) 양식 페이지를 다운로드하고 프로그래밍 방식으로 가져 오는 스크립트를 작성할 수 있습니다. 기본적으로 공개가 아니므로 API에 대한 액세스를 암호로 보호 할 수는 있지만 이는 시스템에 계정이있는 사용자를 신뢰한다는 의미입니다. 기본 질문은 누구이며,이 API를 신뢰할 수있는 사람이 누구인지 믿습니다. – ykaganovich