2012-04-11 5 views
0

나는 안드로이드 애플 리케이션이 PHP 파일 또는 이와 유사한 매개 변수를 보내는 API를 일종의 일을해야한다고 생각했습니다.안전하게 안드로이드 애플 리케이션에서 원격 데이터베이스에 작성

나는 어떤 종류의 높은 점수 목록을 가지고있는 앱을 생각하고 있습니다. 제출 된 높은 점수 값이 실제로 앱을 통해 달성되었는지 확인하려면 어떻게해야합니까? 그 사람이 9001 점을 달성했다고합시다. 이제 이것으로 인해 file.php? score = 9001 호출 만 발생하면 사람들이 PHP 위치를 찾고 그들이 좋아하는 것을 제출하는 것에 대해 매우 안전하지 않습니다.

이런 종류의 문제에 대한 모든 의견이 있으십니까? 고맙습니다.

답변

3

는 요청이 어디에서 왔는지 확인할 방법이 없기 때문에이 100 % 안전하게 보호 할 수있는 방법이 없지만,하는 것이 약간 어렵게 만들 수있는 방법이있다 최고 기록을 해킹. 기본적으로 보안을 유지하기는 어렵지만 네트워크 연결을 보는 것보다는 실제 응용 프로그램 바이너리를 파고들 필요가 있습니다.

먼저 앱의 '비밀번호'를 선택하십시오. 점수 만 보내지 말고 점수와 연결된 암호 해시 (예 : SHA-256 등)를 보냅니다. 서버 측에서는 점수와 연결된 암호의 해시를 다시 계산하고 제출 된 해시와 일치하는지 확인합니다. 그렇지 않은 경우 점수 제출을 거부하십시오. 앱이 요청한 사항을 살펴본 결과 점수를 위조 할 수 없으므로 초기 접근 방식보다 다소 안전합니다. 그러나 앱에서 바이너리 코드를 살펴보면 공격자가 비밀번호를 복구하고 점수 제출을 위조 할 수는 있지만 이는 매우 복잡하고 사용자 목적에 충분히 부합 할 수 있습니다.

물론 이것은 점수를 복제 할 수 있다는 것을 배제하지 않습니다 (올바른 해시를 알고 나면 원하는만큼 점수를 제출할 수 있습니다). 이것을 방지하기를 원한다면 점수를 제출하는 것은 서버에서 요청 (임의의) ID 번호, 해시 점수 + ID + 암호, 점수 + 해시를 제출 한 다음 서버가이 해시 값이 올바른지 확인합니다. 서버가 ID 번호를 기억해야하기 때문에 프로그램에 조금 더 관련되어 있습니다. 간단한 해결책은 각 점수를 플레이어 이름과 연결하고 플레이어 당 1 점만 허용하는 것입니다. 그러면 암호 + 이름 + 점수를 해시 할 수 있습니다.

+0

위대한입니다. 당신의 대답은 거래에서 보안을 구현하기위한 참고 자료로 유용 할 것입니다. – kishu27

+0

"당신의 목적에 충분하다"고 말할 때, 온라인 고득점 목록 (예 : Angry Birds)을 가진 대형 앱조차도 유사한 접근법을 수행한다는 것을 의미합니다 이에? 당신이 말했듯이, 더 큰 정도의 모호함을 가지고 있습니까? 좋은 아이디어를 가져 주셔서 감사합니다! – TragedyStruck

0

안녕하세요!

POST를 통해 서버와 통신하는 것이 좋습니다. 따라서 매개 변수를 추가로 보낼 수 있습니다. 키를 앱에서 서버로 가져와 확인하십시오.

PHP의 샘플 :

<? 
$key = trim(htmlspecialchars($_POST['KEY'])); 

if ($key == 'your_secret_string') { 
    //write data to DB 
} 
?> 
+0

"키"라고 말하면 무엇을 의미합니까? 나는 디 컴파일이나 유사한 것을 시도하는 사람이 소스 코드를 얼마나 많이 발견 할 수 있는지에 대해 매우 확신하지 못한다. 내 앱에서 어딘가에 고유 한 문자열이 있고이를 POST로 보내면 다른 사람이이를 가로 채서 키를 가져올 수 없습니까? 어떻게하면 이런 식으로 안전하게 구현할 수 있을까요? – TragedyStruck

+0

이 방법만으로는 안전하지 않습니다. 누구나 네트워크를 통해 트래픽을 검사하고 쉽게 이러한 특성의 핵심을 탐지하고 추출 할 수 있습니다. 보다 안전한 접근 방법은 https와 함께 표준 인증을 사용하여 트래픽을 보호하고 원격 엔드 포인트에 액세스하는 것입니다. –

+0

인증 데이터 (401)로 요청을 보낼 수도 있습니다. – kpotehin

관련 문제