Reach

Grow

Manage

Automate

Reach

Grow

Manage

Automate

Whitelist IP untuk Kunci API

Email

1 min read

Whitelist IP untuk Kunci API

Email

1 min read

Whitelist IP untuk Kunci API

Ada banyak cara untuk membangun otentikasi dalam produk yang mengutamakan API seperti SparkPost, dan yang kami pilih di awal adalah penggunaan kunci API. Menyisipkan kunci API Anda sebagai header Otorisasi mentah atau melalui HTTP Basic Auth standar membuatnya sangat mudah untuk menggunakan API kami. Kunci API seperti ini adalah standar umum untuk layanan web, tetapi seberapa aman sistem ini?

Ada banyak cara untuk membangun autentikasi dalam produk API-first seperti SparkPost, dan yang kami pilih sejak awal adalah penggunaan API keys. Menyuntikkan API key Anda sebagai header Authorization mentah atau melalui HTTP Basic Auth standar membuatnya sangat mudah untuk menggunakan API kami. API keys seperti ini adalah standar umum untuk webservices, tetapi seberapa amankah sistem ini?

Risiko

Ketika menggunakan layanan web apa pun, jika seorang penyerang mendapatkan kunci API Anda, mereka dapat bertindak atas nama Anda, dan melakukan hal-hal seperti (dalam kasus kami):

  • mengirim email mereka secara gratis melalui akun Anda

  • mengunduh daftar penerima Anda dan memberikan kepada spammer (jika mereka bukan spammer itu sendiri)

  • mengedit template Anda untuk menyuntikkan tautan phishing

  • mengirim spam atau phishing atas nama Anda

Salah satu dari hasil ini bisa sangat merusak reputasi Anda dan bisnis Anda, dan dalam kasus phishing, berpotensi merusak langsung pengguna akhir Anda.  Inilah mengapa sangat penting memastikan tidak ada yang dapat menemukan kunci API Anda.

Peluang

Apakah saya mendengar bruteforce? Kunci API kami dihasilkan secara acak berupa string heksadesimal sepanjang 40 karakter. Ini menghasilkan total 1.4615e+48 kunci API. Jika semua 3 miliar komputer dan smartphone di dunia mencoba 100 kunci api per detik, dengan asumsi bahwa server kami mengizinkan itu, mencoba semua kemungkinan kunci API akan memakan waktu lebih dari 150.000.000.000.000.000.000.000.000.000 tahun. Jadi memaksa kunci API secara brute force tidak masuk akal.

Jadi bagaimana seseorang dapat menemukan kunci API Anda? Karena kunci tersebut dikirimkan sebagai header, kunci tersebut dapat dibaca dengan serangan man-in-the-middle, jadi Anda harus selalu memastikan bahwa klien Anda memeriksa sertifikat SSL saat terhubung ke API kami (ini adalah alasan utama mengapa kami mengharuskan https untuk koneksi API). Juga, jika Anda ceroboh dalam penggunaan repositori kode publik seperti github, kunci API Anda dapat dengan mudah terekspos di dunia luar. Ini bukanlah masalah akademis: ada bot yang dikenal menjelajah github untuk mencari kunci API, dan telah ada serangan yang berhasil melalui vektor itu.

Apakah saya mendengar bruteforce? Kunci API kami dihasilkan secara acak berupa string heksadesimal sepanjang 40 karakter. Ini menghasilkan total 1.4615e+48 kunci API. Jika semua 3 miliar komputer dan smartphone di dunia mencoba 100 kunci api per detik, dengan asumsi bahwa server kami mengizinkan itu, mencoba semua kemungkinan kunci API akan memakan waktu lebih dari 150.000.000.000.000.000.000.000.000.000 tahun. Jadi memaksa kunci API secara brute force tidak masuk akal.

Jadi bagaimana seseorang dapat menemukan kunci API Anda? Karena kunci tersebut dikirimkan sebagai header, kunci tersebut dapat dibaca dengan serangan man-in-the-middle, jadi Anda harus selalu memastikan bahwa klien Anda memeriksa sertifikat SSL saat terhubung ke API kami (ini adalah alasan utama mengapa kami mengharuskan https untuk koneksi API). Juga, jika Anda ceroboh dalam penggunaan repositori kode publik seperti github, kunci API Anda dapat dengan mudah terekspos di dunia luar. Ini bukanlah masalah akademis: ada bot yang dikenal menjelajah github untuk mencari kunci API, dan telah ada serangan yang berhasil melalui vektor itu.

Apakah saya mendengar bruteforce? Kunci API kami dihasilkan secara acak berupa string heksadesimal sepanjang 40 karakter. Ini menghasilkan total 1.4615e+48 kunci API. Jika semua 3 miliar komputer dan smartphone di dunia mencoba 100 kunci api per detik, dengan asumsi bahwa server kami mengizinkan itu, mencoba semua kemungkinan kunci API akan memakan waktu lebih dari 150.000.000.000.000.000.000.000.000.000 tahun. Jadi memaksa kunci API secara brute force tidak masuk akal.

Jadi bagaimana seseorang dapat menemukan kunci API Anda? Karena kunci tersebut dikirimkan sebagai header, kunci tersebut dapat dibaca dengan serangan man-in-the-middle, jadi Anda harus selalu memastikan bahwa klien Anda memeriksa sertifikat SSL saat terhubung ke API kami (ini adalah alasan utama mengapa kami mengharuskan https untuk koneksi API). Juga, jika Anda ceroboh dalam penggunaan repositori kode publik seperti github, kunci API Anda dapat dengan mudah terekspos di dunia luar. Ini bukanlah masalah akademis: ada bot yang dikenal menjelajah github untuk mencari kunci API, dan telah ada serangan yang berhasil melalui vektor itu.

IP whitelisting sebagai penyelamat

Ketika Anda membuat kunci API, Anda sekarang dapat menentukan daftar IP yang diotorisasi untuk menggunakan kunci ini. Anda dapat menentukan beberapa IP, serta blok IP, menggunakan notasi CIDR, sehingga Anda tidak perlu mencantumkan server Anda satu per satu. Ketika kunci API digunakan, baik untuk REST API atau SMTP, kami akan mencocokkan IP yang terhubung dengan daftar ini untuk mengizinkan atau menolak akses.

Dengan fitur ini, bahkan jika kunci API Anda ditemukan atau dicuri, hanya server Anda yang akan dapat menggunakannya. Mengingat risikonya dan betapa mudahnya menyiapkannya, kami sangat merekomendasikan semua pelanggan kami untuk menggunakan fitur ini.

Kata-kata terakhir

Beberapa rekomendasi pribadi seputar keamanan:

  • Jangan simpan kunci API Anda di dalam kode. Ada banyak manfaat dalam menyimpannya sebagai variabel lingkungan, seperti yang dilakukan Heroku

  • Anda dapat membuat jumlah kunci API yang tidak terbatas, dan untuk keamanan terbaik adalah membagi tanggung jawab di antara beberapa kunci API, daripada hanya satu kunci serbaguna. Ini juga akan memungkinkan Anda memiliki daftar putih IP yang berbeda per kunci, untuk pemisahan tugas yang lebih baik

  • Jika Anda bekerja dengan pihak ketiga, jangan berbagi kunci API Anda tetapi buat yang baru untuk mereka, dengan hanya izin yang dibutuhkan, dan terhubung dengan IP mereka

  • Karena kunci API hanya dapat dibuat melalui UI, mengaktifkan otentikasi 2-faktor pada akun SparkPost Anda sangat penting dan hanya memerlukan waktu 2 menit

Mari hubungkan Anda dengan pakar Bird.
Lihat kekuatan penuh dari Bird dalam 30 menit.

Dengan mengirimkan, Anda setuju Bird dapat menghubungi Anda tentang produk dan layanan kami.

Anda dapat berhenti berlangganan kapan saja. Lihat Pernyataan Privasi Bird untuk detail tentang pemrosesan data.

Perusahaan

Newsletter

Tetap terinformasi dengan Bird melalui pembaruan mingguan ke kotak masuk Anda.

Mari hubungkan Anda dengan pakar Bird.
Lihat kekuatan penuh dari Bird dalam 30 menit.

Dengan mengirimkan, Anda setuju Bird dapat menghubungi Anda tentang produk dan layanan kami.

Anda dapat berhenti berlangganan kapan saja. Lihat Pernyataan Privasi Bird untuk detail tentang pemrosesan data.

Perusahaan

Newsletter

Tetap terinformasi dengan Bird melalui pembaruan mingguan ke kotak masuk Anda.

Mari hubungkan Anda dengan pakar Bird.
Lihat kekuatan penuh dari Bird dalam 30 menit.

Dengan mengirimkan, Anda setuju Bird dapat menghubungi Anda tentang produk dan layanan kami.

Anda dapat berhenti berlangganan kapan saja. Lihat Pernyataan Privasi Bird untuk detail tentang pemrosesan data.

R

Reach

G

Grow

M

Manage

A

Automate

Perusahaan

Newsletter

Tetap terinformasi dengan Bird melalui pembaruan mingguan ke kotak masuk Anda.