Mengenal Keamanan API (Application Programming Interface)

API (Application Programming Interface) merupakan sekumpulan sintak yang berisi perintah atau fungsi yang dapat digunakan untuk berinteraksi dengan sistem operasi tertentu atau dengan sistem lainnnya. Sebuah API dapat diimplementasikan dengan menulis sintaks dalam program yang menyediakan sarana untuk meminta layanan program tersebut.

Sebagai contoh, Facebook menyediakan API sehingga para pengembang website dapat mengintegrasikan komentar di websitenya langsung melalui komentar akun Facebook si pengunjung, atau yang lebih spesifik lagi API Facebook juga dapat digunakan untuk membuat fungsi auto post artikel ke Facebook saat artikel di website ditambahkan. Semua ini dapat dilakukan karena Facebook menyediakan API untuk dapat mengakses sebagian fungsi dari program Facebook.

Berikut adalah ilustrasi permintaan layanan data pelanggan ke sistem (misalnya) X menggunakan API:

contoh-api

Sistem X mengembalikan data pelanggan sesuai dengan permintaan yang diminta oleh client dengan berbagai format data yang disediakan oleh sistem, misalnya JSON, XML, dan sebagainya. Pada contoh di atas, data yang dikirimkan oleh sistem X merupakan data pelanggan dan bisa dibayangkan apabila ketika data pelanggan yang dikirimkan kepada client di tengah jalan sebelum diambil oleh seseorang atau hacker untuk kepentingan yang tidak seharusnya? Misal data yang diambilnya adalah nomor telepon, alamat, dan nomor kartu kredit. Tentunya hal tersebut tidak boleh terjadi ketika menggunakan API. Oleh karena itu, API  harus didesain sebagus mungkin agar terhindar dari hal-hal semacam itu.

Ada tiga faktor utama yang menjadi sasaran hacker terhadap penggunaan API. Ketiga faktor itu adalah parameter, identitas, man-in-the-middle. Berikut adalah penjalasan dari ketiga faktor tersebut.

  1. Parameter, sasaran ini dilakukan dengan cara mengirimkan data input secara terus menerus kepada suatu fungsi API agar hacker mendapatkan data yang diinginkan olehnya, sepertinya misalnya data pelanggan. Para hacker dapat membaca respon balikan dari API, karena biasanya API mendefinisikan dengan jelas data balikan yang dikirim. Sasaran ini memang bukan hal baru, namun sering banyak digunakan karena kebanyakan developer mengabaikan untuk memfilter inputan pada api yang digunakan.
  2. Identitas, dilakukan dengan cara mengekploitasi kelemahan dari otentikasi, otorisasi dan penggunaan session. Kelemahan pada API dicari  karena kesalahan dalam mempraktekkan penggunaan otentikasi, otorisasi, dan session pada API. Dalam penggunaan API dalam suatu sistem, biasanya API pengirim memiliki suatu identitas (key) agar dikenali oleh API penerima. API key ini tersimpan pada aplikasi pengirim yang digunakan untuk keperluan autorisasi misalnya. Meskipun API key ini disimpan secara baik oleh pengirim API, biasanya API key mudah untuk ditemukan oleh hacker. Yang perlu digaris bawahi adalah jangan pernah memperlakukan API key sebagai sesuatu yang rahasia.
  3. Man-in-the-middle, pada hal ini, hacker memposisikan dirinya berada diantara pengirim API (client) dan penerima API. Hacker melakukannya dengan cara mengambil data yang dikirimkan oleh user, lalu mengubah data tersebut, dan diteruskan kepada penerima API. Hal ini dapat terjadi karena data yang dikirimkan oleh client tidak terenkripsi. API yang tidak menggunakan SSL/TLS sangat rentan terhadap serangan ini. Namun sayangnya, kebiasaan developer membiarkan hal ini agar komunikasi antara pengirim API dan penerima API dapat dilihat dengan jelas. man-in-the-middle

 

Untuk menanggulangi ancaman dari ketiga faktor tersebut, API harus dibuat lebih aman dan tetap dapat berfungsi dengan semestinya. Berikut adalah penjelasan cara untuk menanggulangi acaman yang mungkin terjadi pada penggunaan API.

  1. Memvalidasi parameter, langkah pertama yang dilakukan adalah dengan cara memvalidasi semua data yang masuk oleh penerima API, pastikan data yang diterima valid dan tidak menyebabkan kerusakan. Cara yang paling efektif adalah dengan mendeskripsikan input apa saja yang boleh diterima oleh suatu fungsi pada penerima API. Selalu periksa inputan bertipe raw untuk menghindari SQL injection. Selain itu berhati hati dengan serangan denial of service (Dos) yang dapat menyebabkan penerima API menjadi hang atau tidak berfungsi karena menerima begitu banyak data dan ditambah lagi apabila data yang dikirimkan data bertingkat. Gunakan pendeteksi virus untuk memeriksa beberapa konten file apabila penerima API dapat mendecode base64 attachment agar file attachment tersebut benar-benar bebas dari virus.
  2. Gunakan SSL/TLS untuk semua API. Untuk jaman sekarang, SSL bukan hal yang mewah lagi, tapi merupakan kebutuhan yang mendasar sebagai API. Dengan menambahkan SSL/TLS dan menerapkannya dengan benar merupakan hal yang sangat efektif untuk melawan serangan man-in-the-middle. SSL/TLS memberikan kepercayaan integritas pertukaran data diantara pengirim dan penerima API.
  3. Identitas user dan sistem yang menggunakan API merupakan sesuatu yang harus diimplementasikan dan dimanajemen secara terpisah. Selain menggunakan identitas user dan sistem sebagai tambahan keamanan, ada faktor lain yang dapat ditambahakan seperti alamat IP pengirim API, waktu akses API, identifikasi hardware (untuk penggunaan mobile apps), geolokasi, dan lainnya.

Sumber :

https://www.tuliskode.com/mengenal-konsep-application-programming-interface-api/

https://stormpath.com/blog/secure-your-rest-api-right-way

https://www.ca.com/content/dam/ca/us/files/ebook/five-simple-strategies-for-securing-apis.pdf

https://19yw4b240vb03ws8qm25h366-wpengine.netdna-ssl.com/wp-content/uploads/securing-the-api-stronghold.pdf

https://www.upwork.com/hiring/mobile/tips-for-building-a-safe-secure-api/

https://19yw4b240vb03ws8qm25h366-wpengine.netdna-ssl.com/wp-content/uploads/securing-the-api-stronghold.pdf

Mengenal Javalite

Javalite merupakan sekumpulan framework yang digunakan untuk menyederhanakan tugas seorang developer dalam membangun aplikasi. Sekumpulan framework yang disediakan oleh javalite yaitu sebagai berikut:

captuasdre

Sekumpulan framework tersebut dapat digunakan sesuai kebutuhan, misal kita akan membuat aplikasi web menggunakan javalite, maka kita dapat menggunakan ActiveWeb untuk aplikasi webnya, dan ActiveJDBC sebagai ORM nya. Pada penerapannya framework ini juga dapat bekerja dengan framework lain, contohnya kita dapat menggunakan ActiveJDBC sebagai ORM pada framework spark, penggunaan JSpec sebagai unit testing pada framework lain, dan masih banyak lagi penggunaan lainnya.

Dengan banyaknya pilihan framework java yang tersedia saat ini, memang javalite bukan framework yang terkenal atau umum digunakan. Namun framework ini dapat menjadi pilihan jika ingin menggunakan framework lain yang lebih “ringan”. Sesuai dengan tagline dari javalite sendiri “light as a feather”, framework ini berdasarkan pengalaman penulis memang tergolong lebih ringan dan mudah digunakan dibandingkan dengan framework yang sudah ada sekarang.

Beberapa kemudahan yang penulis rasakan ketika menggunakan framework ini salah satunya adalah minimnya penggunaan anotasi pada kode. Tidak seperti framework spring atau framework lainnya, javalite tidak banyak menggunakan anotasi.

contoh

Javalite sendiri secara default menggunakan maven sebagai build manager nya, namun bagi yang tidak terbiasa menggunakan maven, framework ini juga dapat menggunakan gradle. seperti framework lain yang menggunakan metode mvc, javalite memiliki tiga komponen penting yaitu Model, View dan Controller. Model pada framework ini menggunakan ActiveJDBC yang disimpan pada direktori src/main/java/app/models,  sedangkan View pada framework ini menggunakan freemarker untuk templating nya yang tersimpan pada direktori webapp/WEB-INF/views, dan Controller yang berfungsi sebagai routing tersimpan pada direktori src/main/java/app/controllers.

berikut contoh struktur project penggunaan javalite (ActiveWeb, ActiveJDBC dan DB Migrator) untuk aplikasi web.

structure

Berdasarkan pada pengalaman penulis menggunakan framework javalite, framework ini memiliki kelebihan dan kelemahan dibandingkan framework lain.

Kelebihan :

  1. Mudah digunakan bagi pemula atau bagi yang baru memulai belajar menggunakan framework java.
  2. Mudah untuk di pelajari, karena tergolong mirip dengan framework mvc lainnya.

Kekurangan :

  1. Dokumentasi yang minim
  2. Tidak memiliki basis komunitas yang besar

Dengan kelebihan dan kekurangan yang dimiliki framework ini, penulis menganggap framework ini layak digunakan untuk membangun aplikasi kecil atau menengah, namun tidak disarankan untuk digunakan dalam membangun aplikasi besar atau komersil, mengingat komunitas pengguna framework ini yang tidak besar, dan dokumentasi nya yang minim.

sumber:

  1. http://javalite.io
  2. https://github.com/javalite

Berkenalan dengan Javascript Higher Order Function untuk Array

Halo! Salam, perkenalkan saya Aria, saya adalah salah satu dari tim kontributor baru di blog Akhdani ini, saya tidak ada spesialisasi teknologi, jadi apa ilmu yang saya punya akan saya tuangkan di blog ini.

Untuk postingan pertama di sini, saya akan membahas higher-order function untuk array pada Javascript. Beberapa fungsi ada yang sepertinya sudah sering dipakai, tapi saya akan tetap sedikit membahas untuk semuanya. Fungsi-fungsi ini sebenarnya cenderung functional programming, tapi kita abaikan dulu saja. Nah, apa fungsinya? Salah satunya agar kode program kita sedikit lebih “bersih”, operasi pada array tidak perlu lagi menggunakan looping semacam for atau while.

(Mohon maaf sebelumnya jika ada penjelasan yang masih sulit dipahami, saya berusaha menjelaskan semudah mungkin. Silakan komentari artikel ini jika ada pertanyaan)

Sebelum mulai, diketahui kita memiliki array yang akan melakukan fungsi-fungsi higher-order ini.

var source = [1,2,3,4,5];
  1. forEach

Looping pada semua elemen array, dan menjalankan operasi yang kita berikan.

Contoh:

source.forEach(function(currentValue, currentIndex){
   console.log("index", currentIndex, "isinya", currentValue);
});

// index 0 isinya 1
// index 1 isinya 2
// index 2 isinya 3
// index 3 isinya 4
// index 4 isinya 5

 

  1. filter

Looping pada semua elemen array, setiap elemen yang memenuhi kondisi akan dimasukkan ke dalam array hasil fungsi filter, array sumber akan tetap utuh.

Contoh:

var filterGanjil = source.filter(function(currentValue, currentIndex){
   return currentValue % 2 === 1;
});

console.log(filterGanjil); // [1, 3, 5]

 

  1. map

Looping pada semua elemen array, dan menjalankan operasi pada masing-masing elemen array. Hasilnya adalah array dengan panjang (length) yang sama namun isinya berupa hasil dari operasi pada masing-masing elemen array yang bersesuaian.

Contoh:

var dikaliDua = source.map(function(currentValue, currentIndex){
   return currentValue * 2;
});

console.log(dikaliDua); // [2, 4, 6, 8, 10]

 

  1. reduce

Looping pada semua elemen array, dan menjalankan operasi pada elemen array. Hasil operasi pada elemen ke-i, akan dijadikan parameter untuk operasi pada elemen berikutnya (i+1), sehingga hasil operasi reduce adalah akumulasi operasi pada semua elemen, bukan array. Pendeknya, value yang tadinya banyak (array) menjadi satu saja.

Contoh:

var ditotalin = source.reduce(function(previousValue, currentValue, currentIndex){
   return previousValue + currentValue;
});

console.log(ditotalin); // 15

Untuk reduce, bisa ditambahkan parameter kedua yaitu initial value sebagai nilai permulaan sebelum reduce dieksekusi. Jadi seb

Contoh:

var ditotalin = source.reduce(function(previousValue, currentValue, currentIndex){
   return previousValue + currentValue;
}, 5);

console.log(ditotalin); // 20
  1. reduceRight

Sama seperti reduce, hanya saja dilakukan mulai dari elemen terakhir.

Contoh:

var ditotalinDariKanan = source.reduceRight(function(previousValue, currentValue, currentIndex){
   return previousValue + currentValue;
});

console.log(ditotalinDariKanan); // 15

Sama seperti reduce, reduceRight juga bisa ditambahkan parameter kedua sebagai initial value.

 

  1. some

Looping pada setiap elemen array dan menjalankan operasi pada setiap elemen array, jika ada satu saja yang hasilnya true, maka hasil fungsi some adalah true.

Contoh:

var apakahAdaAngkaTiga = source.some(function(currentValue, currentIndex){
   return currentValue === 3;
});

console.log(apakahAdaAngkaTiga); // true
  1. every

Mirip seperti some namun hasil operasi semua elemen harus bernilai true agar hasil fungsi every adalah true.

Contoh:

var apakahSemuanyaAngka = source.every(function(currentValue, currentIndex){
   return typeof currentValue === "number";
});

console.log(apakahSemuanyaAngka); //true
  1. find

Menampilkan isi elemen pertama yang memenuhi kondisi yang ditentukan, jika tidak ada maka hasilnya adalah undefined.

Contoh:

var angkaYangLebihBesarDariDua = source.find(function(currentValue, currentIndex){
   return currentValue > 2;
});
console.log(angkaYangLebihBesarDariDua); // 3
  1. findIndex

Menampilkan index elemen pertama yang memenuhi kondisi yang ditentukan, jika tidak ada maka hasilnya adalah -1.

Contoh:

var indexnyaAngkaYangLebihBesarDariDua = source.findIndex(function(currentValue, currentIndex){
   return currentValue > 2;
});

console.log(indexnyaAngkaYangLebihBesarDariDua); // 2

Nah, bagaimana kalau mau digabung? Contohnya, setelah difilter, ingin dilakukan map. Caranya adalah dengan method/function chaining, caranya seperti ini:

 var filterGanjilLaluKaliDua = source
   .filter(function(currentValue, currentIndex){
      return currentValue % 2 === 1;
   })
   .map(function(currentValue, currentIndex){
      return currentValue * 2;
   });

console.log(filterGanjilLaluKaliDua); // [2, 6, 10]

Tapi ingat, chaining di atas bisa dilakukan karena hasil dari filter adalah array, jadi masih memiliki method map. Kalau awalnya, misalnya, di­-reduce, hasilnya bukanlah array sehingga tidak memiliki method map.

Sekian saja bahasan sedikit dari saya, jika ada kesempatan maka akan saya bahas lebih dalam, jika ada pertanyaan silakan tulis komentar. Semoga bermanfaat!

Salam…

Membangun Mobile Apps dengan React Native

App

Instagram, Facebook, Pinterest, Uber, SoundCloud Pulse dan Skype.

Pasti sudah tidak asing dengan beberapa aplikasi yang disebutkan diatas. Aplikasi tersebut dibangun menggunakan React Native.

Sudah pernah mendengar React Native sebelumnya?

React Native merupakan framework berbasis JavaScript yang dibuat dan dikembangkan oleh Facebook. Bermula pada tahun 2013, React Native merupakan sebuah proyek internal Facebook Hackathon. Hingga akhirnya Maret 2015, pada F8 Conference, Facebook mengumumkan React Native terbuka untuk publik dan tersedia di GitHub.

Lalu, apa kelebihan React Native dibandingkan dengan framework mobile apps lainnya?

Dengan React Native, kita memungkinkan untuk membangun aplikasi Android dan IOS sekaligus. Aplikasi yang dibangun bukan hybrid atau web, tapi benar-benar native.

Untuk UI dan UX nya sendiri menggunakan CamelCase, yaitu Javascript styling hampir mirip dengan CSS.

Bagaimana cara belajar React Native? Apa sulit? Jawabannya tidak. Bagi pemula, Create React Native App adalah cara termudah untuk membuat suatu aplikasi dengan React Native tanpa menggunakan Android Studio.

Tools penunjang yang digunakan adalah Expo. Expo dapat dipasang di smartphone yang berfungsi sebagai emulator untuk melihat proyek yang sedang dibangun dengan React Native.

 

 

Tunggu apalagi, buka command prompt Anda, ketik syntax berikut, lalu mulai project pertama menggunakan React Native.

$ npm i -g create-react-native-app
$ create-react-native-app my-project
$ cd my-project
$ npm start

Namun pastikan NodeJS dan NPM sudah terpasang di perangkat Anda.

Selamat mencoba! :)

 

Referensi: