2011-03-19 1 views
0

네트워크로 연결된 iOS 게임을하고 있습니다. 그 GKMatch 클래스 참조iOS GKMatch didReceiveData : fromPlayer : security

, 애플은이 말을 가지고 : 중요

을 : 데이터가 신뢰할 수없는 데이터로 처리해야 다른 플레이어로부터 받았다. 경기에서받은 데이터의 유효성을 검사하고 보안 취약성을 피하기 위해주의 깊게 코드를 작성하십시오. 자세한 내용은 보안 코딩 가이드를 참조하십시오.

이제 아무도 내 작은 게임을 해킹하는 것에 신경 쓰지 않을 것이라고 생각합니다. 누군가 다른 사람의 전화를 해킹하기 위해 그것을 사용할 수 있었다면 그것은 또 다른 문제 일 것입니다.

저는 일반적으로 decodeObjectForKey : 메소드를 통해 객체를 생성하기 위해받은 데이터를 사용하고 있습니다.

무엇이 필요한가요?

답변

0

int 및 float와 같이받은 스칼라 값이 게임에 적합한 범위 내에 있는지 확인할 수 있습니다. 예를 들어 최대 획득 가능 점수가 100 단위가되도록 게임을 코딩 한 경우 최대 점수보다 높은 점수를 나타내는받은 스칼라를 버려야합니다.

문자열의 경우 길이가 합리적인지 확인해야합니다. 예를 들어 플레이어 이름의 문자열은 50 자 미만이어야합니다. 특정 형식 (예 : @"kMyGameHighScoreKey")의 문자열을 사용하는 경우 수신 된 문자열이 해당 형식을 준수하는지 확인해야합니다.

당신이받는 것이 게임에만 의미가 있는지 확인하는 것입니다. 다른 경우에는 수신 된 데이터를 폐기해야합니다.

내가 올바르게 이해했다면, 귀하는 귀하가 로컬 스토리지에서 일부 데이터를 읽기 위해 키로 사용하는 문자열을 수신하고있는 것입니다. decodeObjectForKey: 메서드와 함께 사용하기 전에받은 문자열이 실제로 예상되는 키 중 하나인지 확인해야합니다. 멍청하게 의 변환 된 NSData* 인수를 decodeObjectForKey:의 키로 사용하지 마십시오.