2012-04-29 3 views
1

iPhone 응용 프로그램을 만들고 있습니다.안전한 통신 iPhone to Database

응용 프로그램에서 데이터베이스와 통신해야합니다. 나는 주변을 둘러 보았고 가장 좋은 방법은 iPhone -> webserver -> mysql이라는 것을 알았다.

https를 사용하는 경우 트래픽이 일반 텍스트로 표시되지 않습니다.

하지만 여전히 보안에 대해 우려하고 있습니다.

웹 서버와 현재 세션을 인증하는 auth.php가 있다고 가정 해 봅시다. 그런 다음 게임이나 무언가를 가지고 registerresult.php로 결과를 등록하면 사용자는 여전히 웹 사이트를 통해 auth.php를 통해 로그인하고 registerresult.php에 자신의 결과를 등록하십시오.

(데이터를 게시하려면 POST 방법을 사용하고 있습니다.)

문제가 있습니까?

나는이 검토 한 : http://www.icodeblog.com/2009/10/29/iphone-coding-tutorial-creating-an-online-leaderboard-for-your-games/2/

하지만, 정말 좋은 방법, 또는 더 나은 있다는 것입니다? (각 문장에 하드 코딩 된 "키"보내기)

https가 사용되지 않은 경우 해당 키는 일반 텍스트로 사용됩니다.

+0

결과 데이터를 'registerresult.php'로 보내기 전에 암호로 서명 한 경우에도 (사람이 위조하기가 훨씬 어려워 질 것입니다.) 서명 키는 여전히 휴대 전화의 앱에 임베드되어야합니다. 따라서 결정된 크래커는 여전히 결과를 위조 할 수 있습니다. 나는 사용자가 위조 된 결과를 제출할 수 없다는 것을 확신하기 위해 서버에서 게임을 실행해야만 상태 정보가 유지 될 것이라고 생각합니다. (하지만 나는 다른 사람들의 대안을 듣고 자합니다!) . – eggyal

+0

그래, 내 말은, 키를 로컬에 저장하는 것이 최적이 아닌 것 같습니다. 그 순간 내가 아마 할 일이지만, 나는 사람들이 가짜를 제출하기 위해 얼마나 많은 노력을 기울일지를 말하고있다. :) (나는 그것을 먹어서는 안되기를 바랍니다 : P) – netigger

+1

사람들이 넣을 수있는 노력의 양은 게임의 성공/중요성 또는 수상 할 수있는 상품의 기능. 이 경로를 따라 가면 인용 한 기사의 접근 방식이 좋지 않습니다 (단순한 패킷 스니퍼가 비밀 키를 보게됩니다) - 보안 해시 (데이터, 무작위 소금 값, 비밀 키)를 취하는 것이 좋습니다. 알려진 비밀 키의 해시를 다시 계산할 수있는 서버에 (데이터, 동일한 소금 값, 해시)를 보내고 확인하는지 확인하십시오. – eggyal

답변

2

에 대한 링크입니다 : 당신은 항상 위협이 (무엇을 고려해야 할 그들이 자원이 어떻게 누구로부터 , 등등).

예를 들어, 결과 데이터를 registerresult.php 페이지로 보내기 전에 암호로 서명 한 경우에도 서명 키는 사용자의 휴대 전화에 앱에 포함되어야합니다. 따라서 결정된 크래커가 키를 추출하고 위조 된 결과. 서버에서 게임을 실행해야만 자연의 위협을 물리 치기 위해 상태 정보가 유지되어야한다고 생각합니다.

그러나 게임이 엄청나게 인기 있거나 상품 가치가있는 경품을 제외하고는 누구도 아이폰 게임을 해킹 할 수 없을 것입니다. 고도로 숙련 된 소수의 사람들이 위조 된 결과를 보내는데 성공한다면 그것은 정말로 중요할까요? 그것에 대해 생각할 가치가 있습니다.

그러한 위협을 견딜 수 있다고 판단되면 질문에 인용 된 접근법에 몇 가지 결함이 있습니다. HTTPS는 비밀 키가 패킷 스니퍼에 의해 가로 챌 수 없도록 보호하지만, 전화가 허용하는 SSL 인증서 (예 : 추가 된 자체 서명 된 인증서)를 제공하는 투명한 프록시에 의해 차단됩니다. 키 체인).

이 종류의 위협을 무효화하려면 (데이터 + 임의의 소금 값 + secretkey)의 보안 해시를 계산하고 서버에 해시 값 (동일한 소금 값)을 전송하는 것이 좋습니다. 서버는 알려진 해시 키의 해시가 무엇 이었는지를 다시 계산하고 해시가 수신 해시와 대조되는지 확인합니다.

+0

+1 HTTPS 위에 추가 레이어를 추가하고 애플리케이션의 키를 찾아 보겠습니다. eggyval이 말했듯이 HTTPS에만 의존하지 마십시오. 또한, 고려해야 할 한 가지 더 ... 게임의 움직임을 기록하고 서버로 보냅니다. 서버는 동일한 점수에 도달했는지 확인하기 위해 재생할 수 있습니다. –

0

위의 사용자 @eggyal이 최고의 대답이라고합니다. 우르 프로젝트에서 암호화를 사용하는 것이 좋을 것입니다. 그런 다음 데이터베이스에 대한 ur 서버 파일에 데이터를 보냅니다. 서버 쪽에서는 프런트 엔드에서 수신 한 데이터를 해독 한 다음 데이터베이스를 통해 통신합니다. 그것은 보안 통신이 될 것입니다. 암호화 및 복호화 방법을 사용하십시오. 여기

그것은 전체의 보안을 달성하는 것은 불가능하다 (답변-업그레이드) Encryption and decryption.