사용자가 자신의 데이터를 처리 여부를 제어할 수 있도록 하라.
두 번째, 사용자 데이터를 안전하게 처리하기 위해 암호화는 매우 중요합니다. 종종 휴대폰은 공격자들이 기밀 트래픽을 빼낼 수 있는 신뢰할 수 없는 네트워크에서 사용됩니다. 따라서 전송 중에 데이터를 암호화하는 것은 사용자 정보를 보호하는데 매우 중요한 요소입니다.
마지막으로, HTTP로 서버와 통신할 때 HTTP GET으로 사용되는 URL에 사용자 정보를 암호화하기보다, 메시지 바디 안에 POST하세요. POST를 사용한다고 해서 정보가 누출되지 않는다고 보장할 수는 없지만, URL 안에 넣으면 자동으로 기록될 가능성을 높입니다. 참고로 대다수 웹 서버 소프크웨어는 받은 모든 URL을 기록합니다.
사례 연구: 사용자 즐겨찾기
완전한 등록 절차 없이, 각 사용자들의 즐겨찾기 목록을 관리하는 앱을 만든다고 가정해 봅시다. 이론적으로 볼 때, 사용자의 전화번호나 디바이스 ID, SIM ID를 조합해서 서버로 보내면 됩니다. 하지만 굳이 사용자로 하여금 자신의 개인 정보 사용에 대해서 우려하게 만들 필요는 없습니다. 대신, 식별 정보가 무엇이든지 간에 일방향 해시 서명을 사용하여 보내는 방법은 어떤가요? 아니면 더 나은 방법으로, 랜덤 고유 ID를 만들어 휴대폰에 저장하고 해당 ID를 애플리케이션에 등록키로 사용하는 방법도 있습니다. 그러면 각 사용자들의 즐겨찾기 정보를 받으면서도 민감한 정보를 보내거나 저장할 필요가 없겠죠.
모르는 코드를 사용하지 않는다
오픈 소스 안드로이드 환경에서, 라이브러리와 프레임워크 형태로 다른 사람의 코드를 많이 사용하는 것은 일반적인 (혹은 바람직한) 일입니다. 하지만 해당 코드가 사용자의 정보를 부적절하게 처리하고 있다면 문제가 될 수 있습니다. 따라서 다른 개발자의 소스를 사용하기 전에 반드시 코드를 확인해야 합니다.
사용자 및 디바이스 전용 정보를 기록하지 않는다
애플리케이션 개발자는 디바이스 상에 기록되는 로그에 주의를 기울여야 합니다. 안드로이드에서는 용이하게 휴대폰 로그를 작성할 수 있으며 로그캣 결과 값을 확인하면 알 수 있듯, 해당 로그는 다양한 애플리케이션에서 보내는 랜덤한 디버깅 정보처럼 보이지만, 실제로 매우 중요한 정보를 가지고 있습니다. 안드로이드에서 로그는 공유되는 리소스로 READ_LOGS 권한을 가진 애플리케이션에서 사용할 수 있습니다 (물론 사용자가 동의할 경우에만). 휴대폰 로그 데이터가 일시적이고 재푸팅 시에 삭제된다 하더라도 사용자 정보를 부적절하게 기록하면 의도하지 않게 사용자 정보를 다른 애플리케이션으로 누출시킬 수도 있습니다.