서버 백엔드가있는 iPhone 앱 - 모든 액세스가 iPhone 앱에서만 제공되는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/2409719

  •  18-09-2019
  •  | 
  •  

문제

나는 불법 행위 ETCETERA에 대해별로 신경 쓰지 않지만 백엔드 (레일 기반)가 DOS 등을 제공 할 수있는 자동화 된 서비스에 열려 있지 않도록하고 싶습니다. 따라서 모든 백엔드에 액세스 할 수 있는지 확인하고 싶습니다. (데이터를 가져오고 넣을 수있는 몇 가지 휴식 쿼리가 될 것입니다)는 유효한 iPhone 응용 프로그램을 통한 것이며 컴퓨터에서 실행되는 스크립트가 아닙니다.

사용자 경험이 원활하지 않도록 계정 사용을 피하고 싶습니다.

저의 첫 번째 의도는 UDID와 비밀을 함께 해시하고 서버에 대한 HTTPS 연결을 통해 (및 UDID를 제공하는 것입니다. 이렇게하면 인증 된 세션이 생성되거나 오류를 반환 할 수 있습니다.

도청하면 공격자가 해시를 가져 와서 재생할 수 있어이 계획이 공격을 재생할 수 있습니다. 그러나 HTTPS 연결이 도청으로부터 나를 보호해서는 안됩니까?

감사!

도움이 되었습니까?

해결책

BPAPA가 말했듯이, 스푸핑 될 수 있지만, 당신이 말한 것처럼, 당신은 누구나 와서 서버에 수천 개의 요청을 연속으로 보내고 서버를 각각 처리 해야하는만큼 걱정하지 않습니다. .

해시에 대한 당신의 아이디어는 좋은 출발입니다. 거기에서 현재 타임 스탬프를 사전 호시 값에 추가하여이를 보낼 수도 있습니다. 주어진 타임 스탬프가 서버의 현재 시간과 1 일 이상 다른 경우 액세스를 허용하지 않습니다. 이것은 어쨌든 하루 후에 재생 공격을 중단합니다.

또 다른 옵션은 Nonce를 사용하는 것입니다. 누구나 서버에서 Nonce를 요청할 수 있지만 해시를 서버로 전송하기 전에 사전 하시 데이터에이를 추가해야합니다. 생성 된 비 안장은 저장되어야하거나 단순히 서버의 현재 타임 스탬프 일 수 있습니다. 그런 다음이 장치는 자체 타임 스탬프 대신 서버의 타임 스탬프를 사전 호시 데이터에 추가하여 재생 공격이 발생할 수있는 하루 종일보다 훨씬 짧은 기간을 허용해야합니다.

다른 팁

클라이언트 인증서와 함께 SSL을 사용하십시오. 클라이언트에 개인 키를 갖고 인증서를 발행하고 웹 서버는 세션이 진행되기 위해이 클라이언트 인증을 요구할 수 있습니다.

나는 레일에 대한 코드 세부 사항을 줄 수는 없지만 건축 면적은 약간 과잉 일지라도 가장 안전한 일입니다. 인증서가있는 SSL은 표준 업계 솔루션이며 iPhone/Client End 및 Server End에 라이브러리가 존재하므로 아무것도 발명하거나 많이 구현할 필요가 없습니다.

HMAC-SHA1과 같은 HMAC도 기본적으로 다른 사람들이 말하는 해시의 표준화입니다. 당신이 그것에 비스를 추가하면, 당신은 또한 재생 공격에 안전합니다. Nonce를 사용하여 HMAC-SHA1을 구현하는 방법에 대한 아이디어를 얻으려면 OAUTH 프로토콜을 볼 수 있습니다 (전체 흐름이 아니라 Nonce 및 기타 매개 변수를 인증 된 요청에 묶는 방법).

스푸핑 할 수 있기 때문에 그것을 보장 할 방법이 없습니다.

이 경로를 정말로 가고 싶다면 (정직하게, 여기서 정말로 슈퍼 미션 비판적인 일을하지 않는 한 아마도 시간을 낭비하고있을 것입니다), iPhone 장치 토큰을 따라 전달할 수 있습니다. 아니면 어쩌면 그것을 해시 한 다음 함께 전달하십시오. 물론, 당신은 서버 쪽이나 다른 어떤 것에서 그것을 검증 할 방법이 없지만, 나쁜 사람이 실제로 당신을 쓰러 뜨리고 싶어한다면, 여기에 그가 먼저 다루어야 할로드 블록 #1이 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top