728x90
서론
문자 보내기 기능을 구현하면서 android.permission.SEND_SMS 권한에서 reject 이슈가 발생했다.
해당 권한은 민감한 권한으로 단순히 사유를 변경하는 것으로 해결이 불가능하여,
url_launcher 패키지를 활용하여 launchUrl 함수를 통해 sms Scheme를 호출하는 것으로 해결한다.
SEND_SMS 왜 민감한건데?
- 기능 구현에 있어서는 단순히 문자 보내기에 불과한 기능이지만, 심각한 취약점을 유발할 수 있다.
- 예를 들면, 설치한 단말기에서 스팸 문자를 대량으로 발송하는 것이나 스피어 피싱을 수행하는 시나리오를 생각해 볼 수 있었다.
- Play Store를 통해 설치하는 것이 아닌 직접 설치라고 가정한다면 위 시나리오가 모두 구현 가능하다..!
URI 호출은 무엇이길래?
1. URI 구문 분석
- URI는 일반적으로 다음과 같은 구조를 가지고 있다: scheme://authority/path?query#fragment.
- Scheme: 리소스에 접근하는 방법을 정의. 예: http, https, ftp, mailto 등.
- Authority: 리소스가 위치한 권한을 나타내며, 호스트명(예: www.example.com)과 포트 번호(예: :80)를 포함
- Path: 서버에서 리소스의 경로 정의. 예: /index.html.
- Query: 리소스에 전달되는 추가적인 데이터를 포함. 예: ?name=value.
- Fragment: 리소스 내의 특정 부분 지정. 예: #section1.
2. URI 해석
- 웹 브라우저, 이메일 클라이언트 등 사용자가 사용하는 애플리케이션이 URI를 해석한다.
- 예를 들어, mailto:example@example.com은 이메일 클라이언트에서 이메일 작성 창을 엽니다.
- https://www.example.com은 웹 브라우저가 이를 인식하고, 웹 서버에 HTTP 요청을 보내 해당 페이지를 호출한다.
3. 프로토콜 결정 및 리소스 접근
- Scheme을 기반으로 사용자가 접근하려는 리소스에 어떤 프로토콜이 사용될지를 결정한다.
- http는 HTTP 프로토콜, ftp는 FTP 프로토콜, 문자 메세지 발송 기능은 sms로 정의할 수 있다.
Flutter PoC Code
Uri uri = Uri(
scheme: 'sms', // sms:: 기능 내포
path: recipients.join(','), // 수신자 여러 명을 콤마로 구분
queryParameters: <String, String>{
'body': smsMessage // 송신하려는 문자 메세지 내용
},
);
if (await canLaunchUrl(uri)) { // uri 호출이 가능한지
await launchUrl(uri); // 가능하다면 uri 호출
}
728x90
반응형
'Develop' 카테고리의 다른 글
[k8s] 구성 요소별 관련 명령어 (3) | 2024.10.02 |
---|---|
[k8s] Kubernetes 주요 구성 요소 (0) | 2024.10.02 |
[Spring] IoC(Inversion of Control)와 DI(Dependency Injection) 이해하기 (0) | 2024.09.10 |
[Spring] Spring Bean 생명주기와 @Annotation 정리 (0) | 2024.09.10 |
[SMTP] 수신 메일에서의 hover, onmouse 기능 미지원 이슈 (4) | 2024.08.28 |
[Java] params URLEncoder 처리 (0) | 2024.07.30 |
[CI/CD] Spring Boot .jar 서버 배포 스크립트 개선 (0) | 2024.07.25 |
[Spring Boot] IndexOutOfBoundsException 개선 작업 (0) | 2024.07.24 |