마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

API를 받아오기위해 서버에 접속할때

0 추천
API를 받아오기위해 서버에 접속할때
VPN이나 프록시 상태일때는 접속을 중지하는 방법을 찾고 있는데
간단히 VPN을 첵크하는 경우는
TRANSPORT_VPN 이나 TYPE_VPN을 체크하면 되는데
다른 의도 없이 VPN 서버만 사용하는 경우는 허용해 주고
VPN상태에서 패킷을 캡처하는 용도로 악용되는 앱이 실행중일때는
브로킹을 하는 방법이 궁금합니다
카밀라 (140 포인트) 님이 2023년 6월 23일 질문

1개의 답변

0 추천
 
채택된 답변
질문을 이해하는데 시간이 좀 걸렸습니다. 아직 제대로 이해한건지 100% 확신은 서지 않지만요.

님이 원하시는 건 님이 작업하신 안드로이드 앱이 님의 서버에 있는 API를 호출하는데, 다른 앱이나 사람이 중간에서 네트워크 데이터를 가로채지 않도록 하는 방법을 알고 싶다는 걸로 이해했습니다.

다음 사항만 지키신 다면 다른 앱이 님의 네트워킹 데이터를 들여다 보거나 가로챌 일은 없는 것으로 압니다.

1. 무조건 https를 사용하세요. http는 보안에 취약합니다. 그리고 https 서버에 공인인증된 certificate(인증서)를 사용하세요.
2. 구글이 권장하는 대로 앱을 sigining 하세요. 기존 앱은 님이 직접 sigining을 해서 apk를 만들 수 있지만, 새로운 앱은(언제 기준인지는 정확하게 기억나지 않음) app bundle이라는 포맷을 사용하여 Playstore에서  최종적인 signing을 하게 됩니다. https://developer.android.com/studio/publish/app-signing
3. 릴리즈 빌드라면 Obfuscation(한국말로는 뭔지 모르겠네요)을 수행하세요. R8이라는 툴이 기본 탑재되어 있기 때문에 이걸 그냥 이용하시면 됩니다. https://developer.android.com/build/shrink-code
4. network_security_config를 설정하세요.  https://developer.android.com/training/articles/security-config
5. 가능하다면 SSL pinning을 하세요.
https://mailapurvpandey.medium.com/ssl-pinning-in-android-90dddfa3e051
https://developer.android.com/training/articles/security-ssl

그리고 이외에도 여러가지 보안을 강화하기 위한 방법들이 존재합니다. 구글을 통해 찾아 보셔서 가능한 걸 적용하시면 좋을 것 같습니다. 위에 있는 것들만 제대로 적용하셔도 님의 앱에는 문제가 없을 겁니다. 님이 앱에서 일부러 proxy 툴들을 허용하는 코드를 집어넣지 않는 한 말이죠.
추가적으로, 앱도 앱이지만 서버 쪽의 보안이 얼마나 잘 적용되어 있는지가 더 중요할 거라고 봅니다. 예를 들면 앱과 세션이 없는 방법으로 토큰을 사용해서 통신을 한다던가, 사용자 ID나 비밀번호의 교환은 최소로 하되 암호화를 해서 통신한다던가, Email, Push notification같은 multi factor authentication을 이용한다던가 하는 등등, 서버 쪽이 훨씬 고려해야할 것이 많을 것 같습니다.
spark (227,910 포인트) 님이 2023년 6월 23일 답변
카밀라님이 2023년 6월 24일 채택됨
큰 도움되었습니다. 답변 감사합니다!
...