Rabu, 19 April 2017

Push ke Firebase Cloud Messaging di PHP

Apa itu Firebase?

Saya tidak menjelaskan ke arah sana, karena sudah pasti dan cukup memuaskan apa itu dan mekanisme kerja dari firebase sesuai dengan yang terlihat di websitenya.

Jadi langsung saja..

Sebenernya sudah banyak package yang menyediakan FCM, tapi kita coba kostum dikit sesuai dengan yang sudah dicontohkan di dokumentasi oleh firebase.

Sesuai dengan cara kerjanya sebenernya kita tinggal tembak saja ke app url yang diberikan.

Kita buat saja langsung classnya.
Saya menggunakan package Jyggen CURL, jadi pastikan temen2 sudah menyediakan package tersebut. Jangan lupa server keynya dimasukan.


use \Jyggen\Curl\Curl;
use \Jyggen\Curl\Request as Request;
class FirebaseManager
{
       private $key = 'yourfcmkey';
       private $appURL = 'https://fcm.googleapis.com/fcm/send';
       private $device_target;
       private $data;
       private $response;
       private $notification;
 public function sendPush()
 {
         $headers = array('Authorization:key=' . $this->key, "Content-Type: application/json");
         $fields = array();
         $target = $this->device_target;
         $fields['data'] = $this->data;
         if(is_array($target))
         {
             if (count($target) == 1)
             {
                   $fields['condition'] = "'".$target[0]."' in topics";
             }
             if (count($target) >= 2) 
             {
                   $topics = '';
                   foreach ($target as $k => $v)
                   {
                        if ($topics == '') 
                        {
                             $topics = "'".$v."' in topics";
                        }
                        else
                        {
                             $topics .= " || '".$v."' in topics";
                        }
                   }
                   $fields['condition'] = $topics;
             }
         }
         else
         {
             $fields['condition'] = "'".$target."' in topics";
         }
         $request = new Request($this->appUrl);
         $request->setOption(CURLOPT_POST, true);
         $request->setOption(CURLOPT_HTTPHEADER,$headers);
         $request->setOption(CURLOPT_SSL_VERIFYHOST, 0);
         $request->setOption(CURLOPT_SSL_VERIFYPEER, FALSE);
         $request->setOption(CURLOPT_POSTFIELDS, json_encode($fields));
         $request->execute();
         $this->response = $request->getResponse();
     }
     public function setData($push_data)
     {
      $this->data = $push_data;
     }
   public function setTarget($target)
   {
    $this->device_target = $target;
   }
   public function setNotification($notif)
   {
    $this->notification = $notif;
   }
     public function getResponse()
     {
      return $this->response;
     }
}


Cara pakainya tinggal di instansiasi saja.

$contoh = new FirebaseManager;
$contoh->setData($data);
$contoh->setNotification($notif);
$contoh->setTarget($target);
$contoh->sendPush();

Terimakasih

Rabu, 01 Maret 2017

Fizz Buzz dan Fibonacci serta Pemecahannya dalam PHP


Tulisan ini sebenarnya hanya untuk pengingat pribadi, karena dasar ini penting sebagai logika kita dalam penyelesaian masalah.

Pertanyaannya yang paling banyak ditemukan adalah mengenai fizz and buzz dan fibonacci.

Contoh kasus:
1. Buatkanlah program php untuk mencetak angka 1-100 dengan kriteria sebagai berikut:
  • apabila bilangan tersebut kelipatan 3 maka bertuliskan fizz
  • apabila bilangan tersebut kelipatan 5 maka bertuliskan buzz
  • apabila bilangan tersebut kelipatan 3&5 maka bertuliskan fizzbuzz
Jawaban:

// Memakai fungsi for dimulai dengan $i=1 dan akan bertambah terus sampai $i<=100
for($i=1; $i<=100; $i++){ 
if($i%3 == 0){
echo "Fizz ";
}
elseif($i%5 == 0){
echo "Buzz ";}
elseif($i%3 == 0 && $i%5 == 0){
echo "FizzBuzz ";}
else{
echo $i." ";}}
 2. Buatkanlah function php untuk mencetak bilangan fibonacci dengan contoh output 10 deret bilangan fibonacci

Jawaban:

function cetak_deret_fibonacci($jumlah){
$bilangan_awal = 0;
$bilangan_kedua = 1;
echo "$bilangan_awal $bilangan_kedua ";
for($i=0; $i<=$jumlah-2; $i++){
$hasil = $bilangan_awal+$bilangan_kedua;
echo "$hasil ";
$bilangan_awal = $bilangan_kedua;
$bilangan_kedua = $hasil;}}
//Cetak dengan function
cetak_deret_fibonacci(10);


Oke Mungkin cukup sekian, semoga berguna dan bermanfaat.
 

Selasa, 14 Februari 2017

Mari Menjaga Keamanan Website

Tulisan ini sebenernya suatu kekesalan saya pribadi terhadap banyaknya developer web yang tidak mengindahkan pentingnya sebuah pengamanan  website.

Setelah beberapa pekan terakhir saya berseluncur khususnya di website-website Indonesia banyak sekali yang saya temukan. Dan akan sedikit saya share disini mengenai yang saya temukan disini, tapi sekali lagi sebelum saya share disini, jauh-jauh hari saya sudah mengingatkan webmasternya atau administratornya dengan contoh melalui email, log, dll.

Apa saja yang saya temukan:


  1. Menampilkan/Mengupload File yang menurut saya tidak semestinya di upload atau Fatal. Silahkan Klasifikan sendiri :p.
    Mau itu terpublish atau tidak. Contoh kasus kita mengupload file .sql(berisi dump database). Pertanyaan selanjutnya apakah file tersebut bisa diselancar dan dicari? Jawabannya kemungkinan bisa! Karena beberapa features mesin pencari google bisa kita gunakan untuk ini. Sekali lagi, mau itu penting, tidak penting, rahasia, atau apapun tolong jangan sekali-kali asal upload ke server yang akhirnya menjadi boomerang untuk web/server tersebut.

    Kita contohkan saja

    Google Dork:
    Inurl:go.id Filetype:sql Intext:INSERT
    Silakan dicoba! Atau kita rubah menjadi Inurl:.id 
  2. Memakai plugin yang memiliki vuln.
    Saya sarankan developer sebelum memasang plugin dalam sebuah website untuk mencari tahu dahulu apa ada atau tidak bugs dalam plugin tersebut. Dan saya sangat sarankan lagi untuk membaca dan memahami kembali coding dalam plugin tersebut, karena biasanya ini bisa menyasar kemana-mana. Atau bisa dibilang efeknya dominos dan berkaitan dengan lainnya.
  3. SQL Injection.
    Ini pun sama, biasanya banyak developer tidak mengindahkan dan memahami apa itu SQL injection. Biasanya dalam feature shared hosting sudah mulai ditutupi dengan plugin plugin untuk menutupi ini. Tapi sekali lagi saya harapkan developer pun menjaga agar code yang dibuatnya tidak memiliki potensi untuk dimasukan sesuatu yang akhirnya menjadi fatal.
    Biasanya bagi mereka yang masih belum memahami ini akhirnya database bisa tercuri dan fatalnya lagi efek ini berkelanjutan. Dalam beberapa kasus seorang yang telah melewati SQL Injection bisa memasuki page administrator dan memasang backdoor. Apa itu shell, atau bahkan bisa sampai root(user tertinggi) dan akhirnya saya tidak perlu memberi tahu lagi apa efeknya.
    Contoh paling yang sangat fatal adalah saya berhasil melihat isian database dari website sumselprov.go.id
    Tapi sekali lagi saya tidak melakukan apa-apa, saya hanya meneliti saja di dalamnya. Dan sudah saya ingatkan melalui beberapa kali email, jawabannya: tidak ada balasan :))
  4. Unrestricted File Upload
    Di beberapa kasus juga biasanya para developer tidak mengindahkan dan memahami code yang dibuatnya. Akhirnya, sekali lagi siapapun bisa mengupload backdoor kedalam server tersebut. Dan efeknya? Silahkan dicoba sendiri :D saya sudah jelaskan diatas.
Sekali lagi sebetulnya masih banyak, tapi hanya itu dulu yang saya sampaikan. Harapan dan saran untuk kita semua untuk menjaga keamanan website sederhanan sekali. Aktif dalam forum, update, baca, dan jangan makan gaji buta:))
Aktif dalam artian memiliki keinginan untuk terus memperbaharui apabila setelah di analisis/dilaporkan memiliki banyak kekurangan dan celah keamanan.
Beberapa kasus disini sekali lagi hanya sebagian besar, dan masih banyak yang belum saya ketahui dari berbagai aspek lainnya. Mungkin nanti dapat ditambahkan oleh teman-teman yang lain.

Jadi kesimpulannya adalah : Mari Menjaga Keamanan Website :)

Sedikit quotes untuk para web developer untuk lebih semangat dan bekreasi:

Most good programmers do programming not cause they expect to get paid/get adulation by the public, but cause it is fun to program. ~Linus Torvalds

Akhir kata, SALAM BERSAMA!! Hehehe