> ## Documentation Index
> Fetch the complete documentation index at: https://docs.didit.me/llms.txt
> Use this file to discover all available pages before exploring further.

# Kode Peringatan Fingerprinting Perangkat & Risiko IP

> Daftar kode peringatan Analisis Perangkat & IP Didit: VPN/Tor, ketidakcocokan negara, daftar blokir, duplikat IP/perangkat, dan perangkat dipulihkan.

## Gambaran Umum

Analisis Perangkat & IP menghasilkan tag peringatan pada `ip_analyses[].warnings[]` setiap kali mendeteksi perilaku perangkat, jaringan, atau lokasi yang mencurigakan. Sembilan tag memiliki tindakan yang dapat dikonfigurasi (Tolak / Tinjau / Tidak ada tindakan) per node alur kerja; dua tag daftar blokir selalu menerapkan `Declined`, dan dua tag daftar izin selalu bersifat informasional. `log_type` dari setiap peringatan mencerminkan tindakan yang berlaku: `error` (Tolak), `warning` (Tinjau), atau `information` (Tidak ada tindakan). Setiap risiko dipicu paling banyak satu kali per sesi.

Setiap risiko di bawah ini diverifikasi terhadap pipeline keputusan yang berjalan; peringatan menyertakan tag fitur `LOCATION` dan format [objek peringatan](https://docs.didit.me/id/reference/data-models.md#objek-peringatan) standar.

Peringatan fingerprint perangkat sengaja dipisahkan menjadi sinyal pasti dan sinyal yang dipulihkan:

* `DUPLICATED_DEVICE_FINGERPRINT` berarti identitas perangkat deterministik yang sama (`match_source` `persistent_id` atau `legacy_fp`) digunakan kembali di seluruh sesi dengan nilai `vendor_data` yang berbeda.
* `DEVICE_RECOVERED_HIGH_CONFIDENCE` berarti pemulihan fingerprint v2 mencocokkan sesi dengan perangkat yang pernah terdeteksi **setelah** ID persisten berubah (penyimpanan dibersihkan, mode penyamaran, penginstalan ulang aplikasi). Peringatan ini hanya muncul ketika kecocokan melewati ambang batas kemiripan dengan tingkat keyakinan tinggi dan pemeriksaan wajib.

![Contoh peringatan Analisis Perangkat & IP Didit dengan alert perangkat, VPN, proxy, dan ketidakcocokan lokasi](https://mintcdn.com/didit-0f962782/z6T2GHM4Zh-iSj-K/images/ip-analysis-warning-example.png?fit=max\&auto=format\&n=z6T2GHM4Zh-iSj-K\&q=85\&s=370f87af45a6138ebd7454abe9131665)

## Peringatan yang dihasilkan

| Risiko | Penyebab | `log_type` | Memengaruhi status | Remediasi yang disarankan |
| - | - | - | - | - |
| `PRIVATE_NETWORK_DETECTED` | `is_vpn_or_tor` bernilai `true` — sesi dibuka melalui VPN, proxy, atau node keluar Tor. `additional_data` bernilai `null`. | mencerminkan tindakan yang dikonfigurasi | Dapat dikonfigurasi: Tolak / Tinjau / Tanpa tindakan (default: Tanpa tindakan). | Tentukan apakah toleransi risiko Anda mengizinkan lalu lintas yang disamarkan. Jika Anda menerimanya, tetap pilih Tanpa tindakan. |
| `COUNTRY_FROM_DOCUMENT_DOES_NOT_MATCH_COUNTRY_FROM_IP` | Negara ISO dari dokumen identitas berbeda dari negara yang diperoleh dari alamat IP. `additional_data` memuat kedua kode ISO-3: `document_country_code`, `ip_country_code`. | mencerminkan tindakan yang dikonfigurasi | Dapat dikonfigurasi: Tolak / Tinjau / Tanpa tindakan (default: Tanpa tindakan). | Lakukan peninjauan saat pengguna bepergian secara sah. Tolak jika dipadukan dengan sinyal VPN atau perangkat duplikat. |
| `EXPECTED_IP_ADDRESS_MISMATCH` | Sesi dibuat dengan alamat IP yang diharapkan, dan IP aktual berbeda. `additional_data` memuat `expected_ip_address` dan `actual_ip_address`. | mencerminkan tindakan yang dikonfigurasi | Dapat dikonfigurasi: Tolak / Tinjau / Tanpa tindakan (default: Tanpa tindakan). | Gunakan saat Anda melakukan pra-penyematan IP pada saat pembuatan sesi. Tolak sesi atau tingkatkan autentikasi jika terjadi ketidakcocokan. |
| `IP_ADDRESS_IN_BLOCKLIST` | Alamat IP sesi cocok dengan entri dalam daftar blokir IP aplikasi. `additional_data`: `ip_address`. | selalu `error` | Memaksa status `Declined`. | Tolak sesi. Audit sumber daftar blokir untuk mendeteksi positif palsu jika diperlukan. |
| `DEVICE_FINGERPRINT_IN_BLOCKLIST` | Sidik jari perangkat sesi cocok dengan entri dalam daftar blokir perangkat. `additional_data`: `device_fingerprint`. | selalu `error` | Memaksa status `Declined`. | Tolak sesi. |
| `IP_ADDRESS_IN_ALLOWLIST` | IP sesi memiliki kecocokan duplikat tetapi berada dalam daftar izin IP aplikasi, sehingga peringatan IP duplikat dilewati. `additional_data`: `ip_address`. | selalu `information` | Tidak ada. | Gunakan untuk NAT perusahaan tepercaya, jaringan QA, atau titik akses bersama yang diketahui. |
| `DEVICE_FINGERPRINT_IN_ALLOWLIST` | Sidik jari perangkat sesi memiliki kecocokan duplikat deterministik tetapi berada dalam daftar izin perangkat, sehingga peringatan perangkat duplikat dilewati. `additional_data`: `device_fingerprint`. | selalu `information` | Tidak ada. | Gunakan hanya untuk perangkat bersama tepercaya. Daftar blokir tetap memiliki prioritas. |
| `DUPLICATED_IP_ADDRESS` | IP yang sama digunakan dalam sesi lain dengan `vendor_data` yang berbeda. `additional_data`: `duplicated_session_id`, `duplicated_session_number`, `api_service`. Dilewati jika IP masuk dalam daftar izin. | mencerminkan tindakan yang dikonfigurasi | Dapat dikonfigurasi: Tolak / Tinjau / Tanpa tindakan (default: Tanpa tindakan). | Umum terjadi pada NAT perusahaan atau NAT bersama. Padukan dengan sinyal lain (perangkat duplikat, ketidakcocokan negara) sebelum menolak. |
| `DUPLICATED_DEVICE_FINGERPRINT` | Identitas perangkat deterministik yang sama digunakan kembali di berbagai sesi dengan `vendor_data` yang berbeda. `additional_data`: `duplicated_session_id`, `duplicated_session_number`, `api_service`, `match_source` (`persistent_id` atau `legacy_fp`). Dilewati jika sidik jari masuk dalam daftar izin. | mencerminkan tindakan yang dikonfigurasi | Dapat dikonfigurasi: Tolak / Tinjau / Tanpa tindakan (default: Tanpa tindakan). | Bukti kuat penyalahgunaan banyak akun. Tinjau atau tolak tergantung pada toleransi penipuan. |
| `DEVICE_RECOVERED_HIGH_CONFIDENCE` | Model pemulihan perangkat v2 mencocokkan sesi dengan perangkat yang pernah terdeteksi sebelumnya dengan keyakinan tinggi, bahkan setelah ID persisten berubah. `additional_data`: `duplicated_session_id`, `duplicated_session_number`, `api_service`, `match_source` (`recovered_high`), `recovery_similarity`, `recovery_match_device_uuid`. Tidak diabaikan oleh daftar izin perangkat. | mencerminkan tindakan yang dikonfigurasi | Dapat dikonfigurasi: Tolak / Tinjau / Tanpa tindakan (default: Tanpa tindakan). | Mulailah dengan Tinjau, ukur tingkat positif palsu Anda, lalu perketat tindakan. Sinyal kuat untuk upaya mereset penyimpanan atau menggunakan mode penyamaran. |
| `DEVICE_LINKED_TO_LIVENESS_ATTACK` | Perangkat yang sama (dicocokkan berdasarkan ID perangkat persistennya) digunakan dalam sesi sebelumnya oleh pengguna lain yang pengambilan liveness-nya dinilai sebagai serangan. Perangkat yang telah digunakan untuk menyerang pemeriksaan liveness merupakan indikator kuat bahwa pengambilan ini berasal dari penyerang yang sama. `additional_data`: `liveness_attack_session_id`, `liveness_attack_session_number`, `liveness_attack_sessions_count`, `match_source` (`persistent_id`). | mencerminkan tindakan yang dikonfigurasi | Dapat dikonfigurasi: Tolak / Tinjau / Tanpa tindakan (default: Tanpa tindakan). | Mulailah dengan Tinjau dan ukur tingkat positif palsu Anda sebelum memperketat menjadi Tolak. |
| `DEVICE_MODEL_INCONSISTENT` | Perangkat yang sama (dicocokkan berdasarkan ID perangkat persistennya) dilaporkan sebagai model perangkat yang berbeda dalam sesi sebelumnya. Satu perangkat fisik tidak mengubah model, sehingga model yang dilaporkan kemungkinan besar mengalami spoofing, atau pengidentifikasi perangkat disalin ke perangkat lain. String model generik tidak pernah dibandingkan. `additional_data`: `device_model`, `earlier_device_model`, `earlier_session_id`, `earlier_session_number`, `match_source`. | mencerminkan tindakan yang dikonfigurasi | Dapat dikonfigurasi: Tolak / Tinjau / Tanpa tindakan (default: Tanpa tindakan). | Bandingkan kedua model yang dilaporkan dan tinjau sesi sebelumnya sebelum mengambil tindakan. |
| `IP_LOCATION_NOT_ALLOWED` | Geofencing IP diaktifkan dan IP sesi berlokasi di negara atau negara bagian/wilayah yang ditandai sebagai tidak diizinkan. `additional_data`: `ip_country_code` (ISO-3), `ip_country`, `ip_state`, `restricted_by` (`country` atau `state`). | mencerminkan tindakan yang dikonfigurasi | Dapat dikonfigurasi: Tolak / Tinjau / Tanpa tindakan (default: Tolak). | Gunakan untuk menegakkan pembatasan yurisdiksi. Gabungkan dengan `vpn_detection_action` agar lalu lintas yang disamarkan tidak dapat melewati pembatas geografis. |

Ketika perangkat yang dipulihkan belum memiliki sesi terkait yang memenuhi syarat (sehingga tidak ada yang masuk ke `matches[]`), `DEVICE_RECOVERED_HIGH_CONFIDENCE` tetap dipicu dengan bentuk fallback `additional_data`: `recovery_match_device_uuid`, `recovery_match_similarity`, `recovery_match_band`, `recovery_gate_reason`.

`IP_LOCATION_NOT_ALLOWED` dipicu ketika geofencing IP diaktifkan (`is_ip_geofencing_enabled`) dan IP sesi berlokasi di negara atau negara bagian/wilayah yang ditandai sebagai tidak diizinkan dalam `ip_geofencing_by_country`. `additional_data` memuat `ip_country_code` (ISO-3), `ip_country`, `ip_state`, dan `restricted_by` (`country` atau `state`). Entri negara bagian/wilayah menimpa pengaturan negara dan dicocokkan dengan nama wilayah penyedia IP tanpa membedakan huruf besar-kecil (misalnya `"California"`); negara yang tidak tercantum dalam konfigurasi diizinkan.

## Integritas perangkat dan runtime

Sinyal yang dilaporkan oleh SDK native dan klien web yang mendeskripsikan status perangkat tempat verifikasi dijalankan. Sinyal ini digunakan untuk mendeteksi serangan injeksi: penyerang yang dapat melakukan root pada perangkat atau melakukan hook pada proses aplikasi dapat mengganti umpan kamera sebelum mencapai pemeriksaan biometrik.

Masing-masing dapat dikonfigurasi per alur kerja dan default-nya adalah **Tidak ada tindakan**, sehingga mengaktifkan fitur ini tidak mengubah keputusan apa pun hingga Anda memilih untuk menggunakannya.

| Risiko | Penyebab | Kunci konfigurasi | Default |
| - | - | - | - |
| `DEVICE_APP_TAMPERED` | Atestasi platform gagal memverifikasi bahwa permintaan berasal dari build aplikasi asli yang tidak dimodifikasi pada perangkat asli. | `device_app_tampered_action` | `NO_ACTION` |
| `DEVICE_RUNTIME_HOOKING_DETECTED` | Framework instrumentasi runtime atau hooking (Frida, Xposed, LSPosed, Substrate) terdeteksi dalam proses aplikasi. | `device_hooking_action` | `NO_ACTION` |
| `DEVICE_ROOTED_OR_JAILBROKEN` | Perangkat menunjukkan indikator root atau jailbreak, yang menghapus perlindungan sistem operasi untuk mencegah intersepsi kamera. | `device_rooted_action` | `NO_ACTION` |
| `DEVICE_EMULATOR_DETECTED` | Sesi berasal dari emulator atau simulator alih-alih perangkat fisik. | `device_emulator_action` | `NO_ACTION` |
| `DEVICE_DEBUGGER_ATTACHED` | Debugger atau pelacak proses terpasang pada aplikasi selama verifikasi. | `device_debugger_action` | `NO_ACTION` |
| `AUTOMATION_FRAMEWORK_DETECTED` | Sesi dijalankan oleh framework otomatisasi browser atau browser tanpa antarmuka alih-alih oleh manusia. | `automation_detected_action` | `NO_ACTION` |
| `DEVICE_INTEGRITY_SIGNALS_MISSING` | Klien melaporkan versi SDK yang mendukung pelaporan integritas, tetapi tidak ada sinyal integritas yang diterima — yang dapat mengindikasikan bahwa sinyal telah dihilangkan selama transmisi. | `device_integrity_missing_action` | `NO_ACTION` |

> [!NOTE]
>
> Setiap probe dilakukan dengan upaya terbaik. Saat pemeriksaan tidak dapat dijalankan, sistem melaporkan **tidak ditentukan** alih-alih hasil yang tidak bermasalah, sehingga probe yang gagal tidak akan pernah menghasilkan positif palsu terhadap pengguna yang sah. Sinyal dilaporkan dari SDK native versi **4.4.0** ke atas; sesi dari SDK versi sebelumnya secara wajar tidak mengirimkan apa pun dan tidak akan pernah memunculkan `DEVICE_INTEGRITY_SIGNALS_MISSING`.

> [!WARNING]
>
> Sinyal root dan emulator umum terjadi di antara pengguna sah pada perangkat yang dimodifikasi namun tidak curang. Mulailah dengan tindakan Tinjau alih-alih Tolak untuk sinyal-sinyal ini dan pantau tingkat penolakan Anda sendiri sebelum memperketatnya.

## Pengaturan yang dapat dikonfigurasi

Kontrol alur kerja per node (juga dapat dikonfigurasi secara global pada pengaturan verifikasi aplikasi; setiap tindakan default-nya adalah **Tidak ada tindakan** kecuali dinyatakan lain):

| Pengaturan | Mengontrol | Default |
| - | - | - |
| `vpn_detection_action` | `PRIVATE_NETWORK_DETECTED` | Tidak ada tindakan |
| `ip_mismatch_action` | `COUNTRY_FROM_DOCUMENT_DOES_NOT_MATCH_COUNTRY_FROM_IP` | Tidak ada tindakan |
| `expected_ip_mismatch_action` | `EXPECTED_IP_ADDRESS_MISMATCH` | Tidak ada tindakan |
| `duplicated_ip_action` | `DUPLICATED_IP_ADDRESS` | Tidak ada tindakan |
| `duplicated_device_action` | `DUPLICATED_DEVICE_FINGERPRINT` | Tidak ada tindakan |
| `recovered_device_action` | `DEVICE_RECOVERED_HIGH_CONFIDENCE` | Tidak ada tindakan |
| `device_liveness_attack_history_action` | `DEVICE_LINKED_TO_LIVENESS_ATTACK` | Tidak ada tindakan |
| `device_model_inconsistency_action` | `DEVICE_MODEL_INCONSISTENT` | Tidak ada tindakan |
| `ip_geofencing_action` | `IP_LOCATION_NOT_ALLOWED` | Tolak |

Allowlist IP dan perangkat hanya menyembunyikan peringatan IP duplikat persis atau perangkat duplikat deterministik untuk nilai yang dimasukkan ke allowlist. Allowlist ini tidak menyembunyikan peringatan VPN/proksi, ketidakcocokan negara, ketidakcocokan IP yang diharapkan, perangkat yang dipulihkan, atau daftar blokir.

Peringatan perangkat yang dipulihkan berguna untuk mendeteksi sindikat penipuan yang merotasi akun dan sesi dari perangkat keras yang sama, tetapi Didit dirancang secara konservatif — sistem lebih memilih melewatkan beberapa pengguna duplikat daripada menggabungkan perangkat yang tidak terkait ketika buktinya tidak cukup kuat. **Peluncuran yang disarankan**: mulailah dengan Tinjau, pantau volumenya selama dua minggu, lalu perketat tindakan jika tingkat positif palsu Anda rendah.

## Perangkat duplikat vs. perangkat yang dipulihkan

Perlakukan kedua peringatan ini secara berbeda — keduanya terpicu berdasarkan bukti yang berbeda:

| Peringatan | Pemicu | Makna umum | Tindakan awal yang disarankan |
| - | - | - | - |
| `DUPLICATED_DEVICE_FINGERPRINT` | Kecocokan identitas perangkat persisten (`persistent_id`) atau hash fingerprint lawas (`legacy_fp`) yang persis. | Bukti kuat bahwa perangkat yang sama muncul pada pengguna yang berbeda. | Tinjau atau Tolak, bergantung pada toleransi Anda terhadap penipuan. |
| `DEVICE_RECOVERED_HIGH_CONFIDENCE` | Pemulihan v2 dengan keyakinan tinggi (`recovered_high`) setelah identitas penyimpanan, sesi, atau aplikasi berubah. | Sinyal kuat untuk upaya incognito / reset penyimpanan / penginstalan ulang aplikasi. Sengaja dipisahkan agar Anda dapat memantaunya secara independen. | Mulai dengan Tinjau, lalu perketat setelah mengukur tingkat positif palsu Anda. |

## Kecocokan lintas sesi

Saat alamat IP yang sama, identitas perangkat persis yang sama, atau perangkat yang dipulihkan terdeteksi di berbagai sesi milik **pengguna yang berbeda**, Didit mencatatnya sebagai `matches[]` pada `ip_analyses[]`. Sesi dikelompokkan berdasarkan `vendor_data`: sesi dengan `vendor_data` yang sama diperlakukan sebagai pengguna yang sama dan dikecualikan dari kecocokan. Tanpa `vendor_data`, setiap sesi diperlakukan sebagai pengguna unik dan semua potensi duplikat akan ditampilkan — kami sangat menyarankan untuk selalu menyertakan `vendor_data` guna mengurangi derau.

Setiap kecocokan mencakup:

* `session_id`, `session_number`, `vendor_data`, dan `verification_date` dari sesi yang cocok, ditambah `status` siklus hidup dan `api_service`-nya (`null` untuk sesi alur kerja); `source` selalu bernilai `session`
* `match_type` — `ip_address` atau `device_fingerprint`
* `match_source` — `ip_address`, `persistent_id`, `legacy_fp`, atau `recovered_high`
* `matched_value` — IP bersama, pengidentifikasi perangkat, atau (untuk kecocokan yang dipulihkan) UUID perangkat yang dipulihkan
* `confidence` (0–1, `1 - P(false positive)`) dan `match_mode` (`deterministic` / `probabilistic` / `co_occurrence`)
* `device_info` — `device_brand`, `device_model`, `browser_family`, `os_family`, `platform`, `device_fingerprint`
* `location_info` — `ip_address`, `ip_country`, `ip_country_code`, `ip_state`, `ip_city`, `is_vpn_or_tor`, `is_data_center`
* Tambahan perangkat yang dipulihkan saat `match_source` bernilai `recovered_high`: `recovery_similarity`, `tls_ja4_corroborated`, `recovery_gate_reason`

Kecocokan IP dan kecocokan perangkat dibatasi masing-masing 5 entri (maksimal 10 entri). Lihat [halaman laporan](https://docs.didit.me/id/core-technology/ip-analysis/report-ip-analysis.md#semantik-pencocokan) untuk skema kecocokan lengkap dan model keyakinan.

## Contoh

### VPN + ketidakcocokan negara (dikonfigurasikan ke Peninjauan)

```json theme={null}
{
  "warnings": [
    {
      "feature": "LOCATION",
      "risk": "PRIVATE_NETWORK_DETECTED",
      "additional_data": null,
      "log_type": "warning",
      "short_description": "Private network (VPN/Tor) detected",
      "long_description": "The system detected that the user tried to use a private network (VPN/TOR) to complete the verification process.",
      "node_id": "ip-1"
    },
    {
      "feature": "LOCATION",
      "risk": "COUNTRY_FROM_DOCUMENT_DOES_NOT_MATCH_COUNTRY_FROM_IP",
      "additional_data": { "document_country_code": "ESP", "ip_country_code": "NLD" },
      "log_type": "warning",
      "short_description": "Document country does not match IP country",
      "long_description": "The country from the document does not match the country from the IP address, suggesting a potential mismatch between the document and the user's location.",
      "node_id": "ip-1"
    }
  ]
}
```

### Kecocokan dengan daftar blokir (memaksa penolakan)

```json theme={null}
{
  "warnings": [
    {
      "feature": "LOCATION",
      "risk": "IP_ADDRESS_IN_BLOCKLIST",
      "additional_data": { "ip_address": "45.61.20.5" },
      "log_type": "error",
      "short_description": "IP address in blocklist",
      "long_description": "The IP address used for this session was found in the application's IP blocklist, indicating a known suspicious or forbidden origin.",
      "node_id": "ip-1"
    }
  ]
}
```

### Perangkat yang dipulihkan dengan keyakinan tinggi (dikonfigurasikan ke Peninjauan)

```json theme={null}
{
  "warnings": [
    {
      "feature": "LOCATION",
      "risk": "DEVICE_RECOVERED_HIGH_CONFIDENCE",
      "additional_data": {
        "duplicated_session_id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
        "duplicated_session_number": 5101,
        "api_service": null,
        "match_source": "recovered_high",
        "recovery_similarity": 0.9874,
        "recovery_match_device_uuid": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
      },
      "log_type": "warning",
      "short_description": "Device matches a previously seen device with high confidence",
      "long_description": "A previously seen device matched this session with high confidence through v2 fuzzy fingerprint recovery after passing strict hard gates, indicating the same physical device under a fresh persistent_id.",
      "node_id": "ip-1"
    }
  ]
}
```

## Terkait

* [Laporan Analisis Perangkat & IP](https://docs.didit.me/id/core-technology/ip-analysis/report-ip-analysis.md) — bentuk respons lengkap dan semantik status
* [Gambaran umum Analisis Perangkat & IP](https://docs.didit.me/id/core-technology/ip-analysis/overview.md) — hal yang diukur oleh setiap blok
* [Model data — Analisis IP](https://docs.didit.me/id/reference/data-models.md#analisis-ip) — skema kanonis
* [Webhook](https://docs.didit.me/id/integration/webhooks.md) — `status.updated` memuat peringatan analisis IP

### Jenis peringatan


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.