Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Yii
Code

Membangun Startup Anda: Mengamankan API

by
Difficulty:IntermediateLength:ShortLanguages:
This post is part of a series called Building Your Startup With PHP.
Building Your Startup: Leveraging Crowdfunding
Building Your Startup: Approaching Major Feature Enhancements

Indonesian (Bahasa Indonesia) translation by Febri Ardian Sanjoyo (you can also view the original English article)

Final product image
What You'll Be Creating

Selamat Datang di Building Your Startup With PHPseries, yang membimbing pembaca melalui peluncuran actual startup, Meeting Planner. Setiap episode merinci tantangan coding dan bisnis yang berbeda, dengan contoh terperinci yang dapat Anda gunakan untuk belajar.

Pengenalan

Baru-baru ini, saya mengenalkan Anda pada generasi REST API sederhana milik Yii dan API layanan "RESTful" Meeting Planner yang baru. Pada saat itu, saya menyebutkan bahwa API ini hanya diamankan secara longgar. Tentu, ada rahasia bersama antara klien dan server, tapi ada beberapa masalah.

Pertama, kunci rahasia dan token pengguna berulang kali ditransmisikan dalam parameter kueri dari panggilan SSL. Dan tidak ada data keaslian lain untuk data tersebut, yang memungkinkan a middle-person attack.

Dalam episode hari ini, saya akan memandu Anda melalui bagaimana saya mengamankan API terhadap kelemahan ini untuk API yang lebih kuat.

Jika Anda telah membaca serial startup kami, Anda mungkin sudah mencoba Meeting Planner dan Simple Planner , namun jika tidak, silakan lakukan. Menjadwalkan pertemuan mudah dilakukan;

Seperti biasa, saya akan ikut serta dalam komentar di bawah ini, jadi tolong tawarkan pemikiran anda. Anda juga bisa menghubungi saya di Twitter @lookahead_io. Saya selalu sangat tertarik jika Anda mau menyarankan fitur atau topik baru untuk tutorial masa depan.

Sebagai pengingat, semua kode untuk Meeting Planner ditulis dalam Yii2 Framework untuk PHP. Jika Anda ingin mempelajari lebih lanjut tentang Yii2, lihat seri paralel kami Programming Dengan Yii2.

Keamanan API Awal

Mari kita mulai dengan melihat keamanan API awal yang saya kodekan. Kami akan menganggap ada aplikasi seluler yang telah saya bagikan $app_id dan $app_secret. Hanya pemanggil API dengan kunci ini yang diterima.

Misalnya, aplikasi mencoba mendaftarkan pemiliknya, kemungkinan pengguna baru Meeting Planner:

Aplikasi memanggil di atas actionRegister melalui https://api.meetingplanner.io/user-token/register/ dengan argumen sebagai berikut:

  • $app_id dan $app_secret untuk autentikasi
  • $source = 'facebook' untuk layanan OAuth yang kami gunakan, dan menemani $oauth_token dari layanan itu
  • $email, $firstname, dan $lastname disediakan via OAuth

Semua itu adalah argumen permintaan seperti:

Service::verifyAccess($app_id,$app_secret) Mencari kunci untuk mengotentikasi panggilan seperti yang ditunjukkan di bawah ini:

Karena kunci dan data dikirim via SSL, mereka cukup aman tapi tidak terkalahkan. Kunci rahasia itu juga tidak aman pada pengguna iPhone.

Bagaimana kita bisa membuat ini lebih aman? Berikut adalah beberapa ide:

  1. Jangan pernah mengirimkan kunci rahasia melalui Internet.
  2. Jangan mengirimkan salah satu data sebagai parameter URL yang mungkin muncul di log server.
  3. Masukkan semua data untuk memverifikasi keakuratannya.

Ini sebenarnya adalah praktik standar yang digunakan untuk mengamankan API.

Catatan: Contoh risiko transmisi data yang bisa terpapar di log server adalah email dan token OAuth Facebook. Jika ditemukan di log, ini bisa digunakan dengan Facebook API untuk mengakses akun Facebook seseorang.

Menerapkan Keamanan API yang Lebih Baik

Menggunakan Hash Signatures

Pertama, saya akan berhenti mentransmisikan $app_secret. Sebagai gantinya, kami akan menandai data keluar sebelum melakukan panggilan API.

Jadi kita akan men-alfabet variabel dan menggabungkannya menjadi string, seperti ini:

Yang menghasilkan:

Kemudian, kita akan hash data dengan hash_hmac PHP dan algoritma sha256 menggunakan kunci rahasia kami.

Building Your Startup Securing API - PHP hash_hmac docs

Ini menciptakan kode hash unik berdasarkan argumen panggilan API dan kunci rahasia kami yang dibagikan:

Sekarang, kita bisa membuat panggilan di API tanpa mentransmisikan secret key. Sebagai gantinya, kami mengirimkan signature data hash di atas.

Saya telah menggunakan Postman untuk menguji API, namun Anda juga dapat menggunakan cURL:

Building Your Startup Securing API - Testing the API with a signature

Inilah kode API penerima yang menanggapi panggilan di atas:

Selanjutnya, seperti yang saya tinjau terakhir kali, setiap pengguna menerima token mereka sendiri saat mereka mengakses Meeting Planner melalui API, misal. Melalui ponsel mereka. Jadi, setelah pendaftaran, kami dapat menandai panggilan dengan token masing-masing dan tidak perlu mengirimkan kunci rahasia (secret key) aplikasi atau token individu pengguna.

Mengirim Data di HTTPS Header

Selanjutnya, kita akan memigrasikan pengiriman data ke dalam header. Anda dapat melakukannya dengan mudah dengan Postman atau cURL. Inilah Postman:

Building Your Startup Securing API - Testing the API sending data in the headers

Dan inilah cURL-nya:

Inilah kode penerimaan yang mendapatkan data API dari HTTPS Header:

Dalam Penutupan

Kami mulai hari ini dengan tujuan sebagai berikut:

  1. Jangan pernah mengirimkan kunci rahasia melalui Internet.
  2. Jangan mengirimkan salah satu data sebagai parameter URL yang mungkin muncul di log server.
  3. Masukkan semua data untuk memverifikasi keakuratannya.

Dan kami menyelesaikan semua tujuan ini hanya dengan sedikit perubahan pada kode API kami. Menyenangkan membuat perubahan ini dan melihat betapa mudahnya kita bisa mengamankan API dengan lebih baik. Saya harap Anda menikmati mengikuti episode hari ini.

Saya rutin memantau komentarnya, jadi silahkan ikut diskusi. Anda juga bisa menghubungi saya di Twitter @lookahead_io secara langsung. Dan, tentu saja, perhatikan tutorial yang akan datang di Membangun Startup Anda Dengan seri PHP.

Jika sebelumnya tidak, cobalah menjadwalkan pertemuan di Meeting Planner dan beri tahu apa pendapat Anda. Saya sangat menghargai permintaan fitur.

Tautan yang Berhubungan

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.