1. Deep Link là gì
Deep linking là một tính năng quan trọng trong phát triển ứng dụng di động, giúp tối ưu hóa trải nghiệm người dùng và tăng cường tương tác với ứng dụng. Deep linking cho phép liên kết trực tiếp đến một màn hình cụ thể hoặc nội dung trong ứng dụng, thay vì phải mở ứng dụng từ trạng thái ban đầu, chuyển qua một số màn hình, bấm một vài lần để đến được màn hình mình muốn.
Deep link hiện đang được sử dụng phổ biến nhiều hơn trong các ứng dụng ngày nay, đặc biệt là các ứng dụng sàn thương mại điện tử, tiếp thị liên kết,... nhờ các lợi ích nó đem lại:
- Tăng trải nghiệm của người dùng
- Tối ưu hoá quảng cáo và tiếp thị
- Gia tăng sự liên kết giữa trang web và ứng dụng
- Hỗ trợ phân tích và thống kê hành vi người dùng
Với khả năng tối ưu hóa sự tương tác và tạo liên kết chặt chẽ giữa người dùng và ứng dụng, tính năng deep linking đóng vai trò quan trọng trong việc định hình thành công của ứng dụng di động trong thế giới ngày nay.
2. Phân loại Deep Link
Deep link trong ứng dụng Android được chia thành 2 loại như sau:
- Deep link
- App link
Điểm khác nhau giữa 2 loại Deep Link như sau:
Deep link | App link | |
---|---|---|
URL scheme | Có thể cấu hình thoải mái | Phải là http hoặc https |
Action | Có thể cấu hình thoải mái | Phải là android.intent.action.VIEW |
Category | Có thể cấu hình thoải mái | Phải là android.intent.category.BROWSABLE và android.intent.category.DEFAULT |
Liên kết xác thực | Không yêu cầu | Phải có tệp tin Digital Asset Links trên máy chủ truy cập được qua https |
Trải nghiệm người dùng | Có thể hiển thị hộp thoại lựa chọn ứng dụng để mở liên kết | Ứng dụng đăng ký App link sẽ mở liên kết, không cần người dùng lựa chọn ứng dụng |
Tương thích hệ điều hành | Mọi phiên bản Android | Android 6 trở lên |
Có thể thấy Deep link thì cho phép cấu hình thoải mái hơn, còn App link thì cung cấp trải nghiệm tốt hơn cho người dùng.
2.1. Khai báo Deep Link
Để khai báo một Deep Link mới, lập trình viên sẽ tạo ra thêm các thẻ <intent-filter>
trong phạm vi của thẻ <activity>
. Deep Link được đặt trong phạm vi của Activity nào, thì được kích hoạt, Deep Link sẽ đưa người dùng tới thẳng Activity đó.
<!-- AndroidManifest.xml -->
<activity android:name="ActivityX"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <!-- Chấp nhận liên kết bắt đầu bằng "example://myapp/" --> <data android:scheme="example" android:host="myapp" /> </intent-filter>
</activity>
2.2. Khai báo App Link
Việc khai báo App Link sẽ gồm nhiều bước hơn Deep Link. Đầu tiên thì vẫn cần khai báo trong tệp tin AndroidManifes.xml
<!-- AndroidManifest.xml -->
<activity android:name="ActivityX"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <!-- Chấp nhận liên kết bắt đầu bằng "https://myapp/" hoặc "http://myapp/" --> <data android:scheme="https" android:host="myapp" /> <data android:scheme="http" android:host="myapp" /> </intent-filter>
</activity>
Ngoài ra còn cần phải tạo một tệp tin JSON gọi là Digital Asset Link, và đưa tệp tin này lên trang web tương ứng với App Link tại đường dẫn https://domain.name/.well-known/assetlinks.json
Chi tiết về các bước tạo App Links các bạn có thể đọc thêm tại bài viết sau trên Viblo: https://viblo.asia/p/huong-dan-cai-dat-android-app-link-07LKXYjeZV4
3. Cấu hình Deep Link thiếu an toàn
Khi cấu hình deep link và xử lý dữ liệu từ deep link thiếu an toàn, tuỳ trường hợp, có thể tạo ra những lỗ hổng bảo mật nguy hiểm. Sau đây, chúng ta sẽ tìm hiểu về 1 số trường hợp thường thấy, và 1 số kịch bản tấn công có độ nguy hiểm cao.
3.1. Khai báo trùng lặp
Như đã trình bày ở bảng so sánh trong phần 2, Deep Link có thể được khai báo bởi nhiều ứng dụng khác nhau. Trong trường hợp này, khi Deep Link được kích hoạt thì có thể đưa người dùng tới nhiều ứng dụng khác nhau. Trong trường hợp có nhiều hơn 1 ứng dụng có thể được mở bởi Deep Link, hệ thống Android sẽ hiển thị một bảng lựa chọn các ứng dụng. Ứng dụng nào được người dùng chọn thì Deep Link sẽ được kích hoạt trên ứng dụng đó.
Ở hình dưới đây, mình sử dụng ADB để kích hoạt Deep Link trên môi trường ảo hoá. Điều tương tự sẽ xảy ra khi mở Deep Link qua việc truy cập từ trình duyệt, ứng dụng ghi chú, tin nhắn,...
Hậu quả: người dùng có nguy cơ truy cập ứng dụng giả mạo, bị đánh cắp dữ liệu.
3.2. Xử lý dữ liệu từ Deep Link thiếu an toàn
Deep Link có thể nhận dữ liệu qua các tham số trên URL. Khi Deep Link được kích hoạt, Activity tương ứng với Deep Link có thể lấy ra các dữ liệu đó. Nếu lập trình viên tin tưởng dữ liệu từ Deep Link, không tiến hành các bước xác thực và lọc dữ liệu thì ứng dụng có thể bị kẻ xấu tấn công.
Bởi Deep Link thì được công khai, mã nguồn ứng dụng cũng không thể che giấu. Do đó kẻ xấu có thể nghiên cứu và xây dựng kịch bản tấn công nhắm tới ứng dụng. Người dùng có thể bị lừa bấm vào Deep Link khi đang duyệt web trên thiết bị di dộng. Lúc này Deep Link sẽ được kích hoạt, nếu trong thiết bị của người dùng có cài đặt ứng dụng tương ứng thì payload sẽ được thực thi.
3.3. Bỏ qua quy trình nghiệp vụ
Các ứng dụng Android có một lỗ hổng đặc thù mang tên Exported Activity, khi khai thác thì có thể vượt qua quy trình nghiệp vụ. Ví dụ như một chức năng mua hàng cần thực hiện qua các bước/màn hình để hoàn thành quá trình đặt đơn: Xác nhận số lượng hàng => Kiểm tra thông tin thanh toán và địa chỉ => Thanh toán
. Nếu ở màn hình thanh toán có lỗ hổng Exported Activity thì có thể trực tiếp nhảy đến màn hình thanh toán, bỏ qua hai màn hình trước đó. Kết quả là đơn hàng sẽ được thực hiện trong trạng thái không chắc chắn về số lượng hàng tồn trong kho, địa chỉ nhận hàng, phương thức thanh toán,...
Điều tương tự cũng sẽ xảy ra nếu như ở màn hình thanh toán có deep link. Việc kích hoạt deep link tương tự như kích hoạt Activity, thậm chí deep link kích hoạt còn dễ hơn do người dùng chỉ cần bấm vào đường link ở trình duyệt là được.
Trên đây là những thông tin cơ bản về Deep Link và một số lỗ hổng bảo mật thường gặp do cấu hình sai Deep Link/App Link. Bạn biết những trường hợp tấn công nào hay với Deep Link nữa không? Hãy cùng thảo luận trong phần bình luận nhé.