Uncategorized

Membuat aplikasi CRUD menggunakan Java Swing dan MySQL Part 2

Posted by:

Kali ini penulis akan melanjutkan tutorial sebelumnya, syarat untuk mengikuti tutorial ini sudah tertera sebelumnya pada part 1 dari tutorial ini.  Dan pastikan anda sudah selesai membuat database dengan nama rumah_coding serta pastikan anda sudah berhasil membuat table di database tersebut dengan nama buku. Karena pada kali ini kita akan mulai membuat aplikasi java untuk mengontrol data pada database tersebut.

1. Menyiapkan Project

Bukan aplikasi Netbeans anda dan klik File > New Project sehingga akan muncul jendela dialog seperti dibawah ini :

Pastikan anda memilih Categories Java dan pilih Projects Java Application seperti yang ditunjukkan pada gambar diatas lalu klik Next. Pada jendela dialog dibawah ini :

anda hanya perlu mengganti kolom isian Project Name menjadi DataManagerBuku, sementara yang lainnya bisa diabaikan. Setelah itu klik Finish.

2. Netbeans Project Structure

Folder Source Package merupakan tempat untuk menaruh file-file java yang akan dibuat nanti sedangkan folder Libraries merupakan tempat sekumpulan aplikasi jar yang sudah jadi dan akan dikombinasikan dengan program ini,  yang mana nantinya akan menggunakan library JDBC Driver dari MySQL.

Dari gambar diatas project DataManagerBuku ini sudah memiliki root package dengan nama datamanagerbuku yang nantinya akan dijadikan folder utama dalam membuat aplikasi ini. Dan didalam folder ini juga sudah ada class dengan nama DataManagerBuku.java yang nantinya juga akan dijadikan sebagai class utama dari aplikasi. Artinya program ini akan mengeksekusi class ini terlebih dahulu.

3. Menambahkan Libraries Ke Project

Klik kanan pada folder Libraries lalu pilih Add Library, sehingga muncul dialog seperti dibawah ini :

Cari dan pilih MySQL JDBC Driver seperti yang tampak pada gambar diatas, kemudian klik Add Library sehingga project structure menjadi seperti dibawah ini :

 

4. Membuat class ConnectionHelper

Class ini nantinya akan digunakan sebagai pembantu koneksi antara aplikasi dengan database server kita, lebih khusunya dengan database yg sudah kita buat sebelumnya yaitu database rumah_coding.

Sekarang buat package baru dengan cara klik kanan pas bagian package datamanagerbuku sehingga muncul dialog seperti dibawah ini :

Isikan kolom package name menjadi database seperti apa tampak pada gambar diatas. Jika berhasil maka daftar package anda sekarang menjadi seperti dibawah ini :

Sekarang buat class baru didalam package database dan beri namanya sebagai ConnectionHelper. Perhatikan gambar dibawah ini untuk lebih jelasnya :

Buka class tersebut dan ubah codenya menjadi seperti dibawah ini :

import com.mysql.jdbc.Driver;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

/**
 *
 * @author dika
 */
public class ConnectionHelper {

    private static final String DATABASE_NAME = "rumah_coding";
    private static final String USER = "root";
    private static final String PASSWORD = "";
    private static final String URL = "jdbc:mysql://localhost:3306/" + DATABASE_NAME;

    public static Connection getConnection() throws SQLException {
        DriverManager.registerDriver(new Driver());
        Connection connection = 
                DriverManager.getConnection(URL, USER, PASSWORD);
        return connection;
    }
}

Penjelasan :

DATABASE_NAME adalah variabel bertipe data String yang akan menampung nama database yang akan dihubungkan.

USER adalah variabel bertipe data String yang akan menampung nama user yang akan digunakan untuk mengakses database yang akan dihubungkan. Secara default usernya adalah root.

PASSWORD adalah variabel bertipe data String yang akan menampung password yang akan digunakan untuk menghubungkan database.

Sedangkan code didalam method getConnection merupakan code untuk mendaftarkan libraries mysql driver dan membuat koneksi ke database berdasarkan setup yang telah dideklarasikan sebelumnya.

Sekarang buka class DataManagerBuku dan ubah codenya menjadi seperti dibawah ini :

import datamanagerbuku.database.ConnectionHelper;
import java.sql.SQLException;

/**
 *
 * @author dika
 */
public class DataManagerBuku {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        testConnection();
    }

    private static void testConnection() {
        try {
            ConnectionHelper.getConnection();
            System.out.println("Database connected");
        } catch (SQLException ex) {
            System.out.println("Failed to connect database");
        }
    }
}

Kemudian run project dengan cara menekan tombol   pada toolbar Netbeans IDE. Akan tetapi anda juga perlu menjalankan server apache dan mysql terlebih dahulu melalui Xampp control panel. Dan jika saat dijalankan anda dapat melihat output seperti dibawah ini :

Maka selamat anda sudah berhasil membuat koneksi ke database server.

5. Membuat Class Model

Kali ini kita akan membuat class model dengan nama Buku, dimana class ini merupakan representasi benda nyata atau object nyata yaitu buku. Data yang akan digunakan dari object buku adalah judul buku, pengarang, penerbit,  dan tahun terbit. Hal ini sesuai dengan design table buku pada database kita.

Langkah pertama yang perlu dilakukan adalah membuat package baru bernama models. Cara membuat package baru sama dengan membuat package database diatas, hanya saja nama package kali ini adalah models. Berikut struktur project saat ini jika anda berhasil membuat package model :

Didalam package models buat class baru dengan nama Buku, seperti yang tampak pada gambar dibawah ini :

Kemudian edit code didalam class Buku menjadi seperti dibawah ini :

public class Buku {
    private long id;
    private String judulBuku;
    private String penerbit;
    private String pengarang;
    private int tahunTerbit;

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getJudulBuku() {
        return judulBuku;
    }

    public void setJudulBuku(String judulBuku) {
        this.judulBuku = judulBuku;
    }

    public String getPenerbit() {
        return penerbit;
    }

    public void setPenerbit(String penerbit) {
        this.penerbit = penerbit;
    }

    public String getPengarang() {
        return pengarang;
    }

    public void setPengarang(String pengarang) {
        this.pengarang = pengarang;
    }

    public int getTahunTerbit() {
        return tahunTerbit;
    }

    public void setTahunTerbit(int tahunTerbit) {
        this.tahunTerbit = tahunTerbit;
    }
}

Selamat anda baru saja membuat representasi object nyata ke dalam class java. Teknik ini lebih dikenal sebagai pojo dalam java.

6. Membuat class BukuDatasource

Sekarang buatlah class baru di dalam package database dengan nama BukuDatasource. Class inilah yang akan bertanggung jawab dalam hal menyimpan data buku baru, memperbaharui data buku lama, menghapus data buku yang telah tersimpan sebelumnya dan juga mencari data buku yang sudah tersimpan sebelumnya. Jika dipersingkat maka class ini berfungsi sebagai implementasi konsep CRUD di mysql.

Jika anda sudah berhasil membuat classnya maka seharusnya sekarang terdapat 2 class didalam package database, seperti yang tampak pada gambar dibawah ini :

Sekarang edit code di dalam class BukuDatasource menjadi seperti dibawah ini :

import datamanagerbuku.models.Buku;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.List;

/**
 *
 * @author dika
 */
public class BukuDatasource {
    public void save(Buku buku) throws SQLException {
        
    }
    
    public void update(Buku buku) throws SQLException {
        
    }
    
    public void delete(Buku buku) throws SQLException {
        
    }
    
    public List<Buku> findAll() throws SQLException {
        return null;
    }
}

Sekarang edit code method save menjadi seperti dibawah ini :

public void save(Buku buku) throws SQLException {
        String sql = "INSERT INTO buku(judul, pengarang, penerbit, tahun_terbit) VALUES (?, ?, ?, ?)";
        Connection connection = ConnectionHelper.getConnection();
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        
        preparedStatement.setString(1, buku.getJudulBuku());
        preparedStatement.setString(3, buku.getPengarang());
        preparedStatement.setString(2, buku.getPenerbit());
        preparedStatement.setInt(4, buku.getTahunTerbit());
        
        preparedStatement.executeUpdate();
}

What is PrepareStatement ?

Merupakan class java yang dapat mendukung fitur precompile query sql, artinya kita dapat menggunakan query yang sama untuk nilai parameter query yang berbeda. Contoh : Sebelum menggunakan prepare statement :

Select *from buku where id=1;
Select *from buku where id=1;

Terlihat diatas bahwa kedua query tersebut dimaksudkan untuk melakukan pencarian data buku berdasarkan id.
Kedua struktur query tersebut terlihat sama yang berbeda hanya pada nilai id-nya saja. Disinilah kegunanaan dari
prepare statement dimana kita hanya memerlukan untuk mengisi value id-nya saja tanpa menulis ulang query-nya secara
berulang-ulang. Sehingga saat menggunakan prepare statement, query-nya menjadi seperti dibawah ini :

 
Select *from buku where id=?;

Sekarang edit isi dari method update menjadi seperti dibawah ini :

 
public void update(Buku buku) throws SQLException {
        String sql = "UPDATE buku SET judul=?, pengarang=?, penerbit=?, tahun_terbit=? WHERE id=?";
        Connection connection = ConnectionHelper.getConnection();
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        preparedStatement.setString(1, buku.getJudulBuku());
        preparedStatement.setString(2, buku.getPengarang());
        preparedStatement.setString(3, buku.getPenerbit());
        preparedStatement.setInt(4, buku.getTahunTerbit());
        preparedStatement.setLong(5, buku.getId());
        preparedStatement.executeUpdate();
}

Sekarang edit isi dari method delete menjadi seperti dibawah ini :

 
public void delete(Buku buku) throws SQLException {
        String sql = "DELETE FROM buku WHERE id=?";
        Connection connection = ConnectionHelper.getConnection();
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        preparedStatement.setLong(1, buku.getId());
        preparedStatement.executeUpdate();
}

Sekarang edit isi dari method findAll menjadi seperti dibawah ini :

 
public List<Buku> findAll() throws SQLException {
        String sql = "SELECT *FROM buku";
        Connection connection = ConnectionHelper.getConnection();
        ResultSet resultSet = connection.createStatement().executeQuery(sql);
        List<Buku> bukuList = new ArrayList<>();
        while (resultSet.next()) {            
            Buku buku = new Buku();
            buku.setId(resultSet.getLong("id"));
            buku.setJudulBuku(resultSet.getString("judul"));
            buku.setPengarang(resultSet.getString("pengarang"));
            buku.setPenerbit("penerbit");
            buku.setTahunTerbit(resultSet.getInt("tahun_terbit"));
            bukuList.add(buku);
        }
        return bukuList;
}

What is ResultSet ?

Merupakan class java yang menampung hasil dari query yang telah berhasil dilakukan. Mengakses data dalam ResultSet dapat dilakukan dengan menggunakan column index dan juga nama column. Sedangkan dalam method findAll diatas menggunakan nama column.

What is List ?

List merupakan interface java yang dimaksudkan untuk memiliki kemampuan menyimpan koleksi data secara dinamis. Hal ini tentu berbeda dengan array dimana koleksi data didalamnya tidaklah dinamis, artinya jumlah data dalam array bersifat tetap alias tidak dapat dimodifikasi lagi. Kesamaan antara List dan array adalah sama-sama hanya dapat menampung data yang tipe datanya sama dan setiap datanya dapat diakses melalui index serta index array dan List sama-sama dimulai dari 0.

Berbagai operasi dapat Anda lakukan terhadap ArrayList seperti berikut:

  • size(), untuk mencari panjang List
  • add(), untuk menambah elemen baru
  • get(), untuk mengambil elemen pada indeks tertentu
  • isEmpty(), untuk memeriksa apakah List kosong atau tidak
  • indexOf(), untuk mengetahui indeks dari suatu nilai
  • contains(), untuk memeriksa apakah suatu nilai ada dalam List
  • set(), untuk menimpa nilai pada indeks tertentu
  • remove(), untuk menghapus nilai pada indeks tertentu

What is ArrayList ?

ArrayList merupakan salah satu class java yang mengimplementasikan interface List. Sehingga fungsi class ini sama dengan List yaitu untuk menampung sejumlah data yang tipe datanya sama secara dinamis.

 

0

Nicko Perdana Putra: Laravel sebagai Best PHP Framework

Posted by:

Lahir di Kalimantan Selatan pada 15 Februari 1983, saat ini beliau tinggal di Banjarbaru, Kalimantan Selatan. Menempuh pendidikan Sarjana pada Program Studi Teknik Informatika pada tahun 2001, di Kota Pendidikan Yogyakarta. Latar belakang Pendidikan tersebut menjadi pijakan beliau dalam berkarir sebagai Pegawai Negeri Sipil di Instasi milik Pemerintah, yang bernama Badan Kepegawaian Daerah Provinsi Kalimantan Selatan Sub Bidang Data dan Informasi.  Salah satu produk yang dihasilkan pada Subid Data dan Informasi adalah Sistem Informasi Kepegawaian. Bekerja pada bagian tersebut ditambah lagi dengan semakin banyaknya teknologi terbaru dalam hal Web Development, membuat Pak Nicko merasa perlu upgrade keilmuannya, agar dapat terus mengoptimalkan Sistem Informasi Kepegawaian yang dibuat bersama timnya.

Selama 18 tahun berkecimpung di dunia programming, beliau tidak absen dari kompetisi IT, produk website yang diunggulkan beliau dalam perlombaan, meski kompetisinya sudah beberapa tahun berlalu. Fokus beliau pada ranah Web Development, mengantarkannya pada kelas PHP Laravel Batch #32 di Rumah Coding. Berawal dari pencariannya terhadap Best PHP Framework di Google, beliau menjatuhkan pilihannya untuk menekuni PHP Laravel. Saat ini, produk web yang digandrungi korporat/instansi besar memang merujuk ke PHP Laravel. Berbekal informasi yang didapat, beliau mendapatkan persetujuan dari instansi tempatnya bekerja untuk bisa mendalami PHP Laravel di Rumah Coding.

0

Roli Rusnandar: Upgrading diri tak berhenti, meski posisi sudah cukup mumpuni.

Posted by:

Sebagai penduduk asli Banjarbaru yang lahir pada 20 Juni 2019, saat ini beliau berdomisili di Banjarbaru, Kalimantan Selatan. Beliau menamatkan pendidikan Sarjana pada Program Studi Teknik Informatika tahun 2010. Latar belakang Pendidikan tersebut menjadi batu loncatan beliau dalam berkarir sebagai Pegawai Negeri Sipil di Instansi milik Pemerintah, yang bernama Badan Kepegawaian Daerah Provinsi Kalimantan Selatan Bidang Perencanaan. Meskipun tidak berhubungan langsung dengan programming atau coding, bidang tersebut menuntut Pak Roli untuk turut berjibaku dengan aplikasi-aplikasi dalam bidang perencanaan.

Beliau memasuki dunia programming sekitar tahun 2007, melalui jalur prestasi, jalur yang sangat didambakan oleh Siswa/i yang ingin melanjutkan kuliah ke bangku Universitas. Tak kenal maka tak sayang, peribahasa tersebut tampaknya cukup menggambarkan bagaimana Pak Roli bisa sampai berjodoh dengan jurusan Teknik Informatika. Meskipun sempat melirik Jurusan Teknik Elektro dalam jurusan yang dipilih saat jalur prestasi, bukanlah suatu hal sulit bagi beliau untuk bisa menekuni Teknik Informatika. Jika selama kuliah sudah mulai menyenangi TI, namun perjalanan beliau tidaklah selalu mulus. Selepas  kuliah  sempat mendapatkan posisi yang belum sesuai dengan background pendidikan Teknik Informatika, beliau berkisah saat lulus sebagai Calon Pegawai Negeri Sipil penempatan pada Badan Koordinasi Penyuluhan yg dimanan tupoksi kerja nya tidak berhubungan langsung dengan latar belakang pendidikan karena harus menggeluti pada ketenagaan pertanian dan kelembagaanya. Untuk menangani kepegawaian ketenagaan di penyuluh pertanian. Tetapi hal tersebut bukanlah halangan beliau untuk terus belajar dan mengupgrade diri dengan teknologi-teknologi yang terbaru. Seperti saat ini, salah satu motivasi beliau dalam mengikuti kelas PHP Code Igniter di Rumah Coding, karena ingin terus memperkaya khazanah keilmuan Teknik Informatika. Seperti kita tahu, bahwa produk teknologi digital semakin hari semakin banyak versi terbaru dan terbaiknya, bila kita tidak membekali diri, bukan tidak mungkin kita akan tergerus zaman.

0

5 Pionir Startup Unicorn di Indonesia

Posted by:

Startup merupakan perusahaan yang baru saja didirikan dan masih mengalami fase pengembangan dan juga penelitian dalam menemukan pasar yang tepat. Istilah startup sering dihubungkan dengan perusahaan baru di bidang teknologi dan informasi, alasannya karena pada era 1998-2000 terjadi bubble dot-com (banyaknya perusahaan dot-com yang didirikan secara bersamaan pada saat itu). Beberapa karakteristik startup diantaranya :

  1. Perusahaan yang berusia kurang dari 3 tahun
  2. Pegawai berjumlah kurang dari 20 orang
  3. Pendapatannya tidak lebih dari Rp 1.3 miliar per tahun
  4. Lazimnya beroperasi dalam bidang teknologi
  5. Produknya berbentuk aplikasi digital
  6. Banyak beroperasi melalui website

Menurut Menteri Komunikasi dan Informatika, Rudiantara, dalam acara Digital Economic Briefing yang diadakan oleh Tempo-Indosat Ooredo, mengatakan bahwa Indonesia optimis akan memiliki lebih dari 5 unicorn hingga tahun 2019. Hal ini sejalan dengan target pemerintah yang ingin menghasilkan 1000 startup sampai tahun 2020 mendatang. 

Hingga tahun 2017, Indonesia sudah memiliki 3 startup yang menyandang status unicorn. Unicorn sendiri, merupakan gelar yang diberikan bagi perusahaan startup yang memiliki nilai valuasi (nilai yang bukan sekedar pendanaan dari investor) lebih dari $ 1 miliar. Ketiga perusahaan tersebut ialah Gojek, Tokopedia, dan Traveloka.

Sampai tahun 2017, Gojek memiliki peringkat teratas untuk total pendanaan sebesar US$1,75 miliar, dan mendapat gelar unicorn pada 4 Agustus 2016. Perusahaan yang digawangi Nadiem Makarim ini, menerima gelar unicorn setelah mendapatkan pendanaan $550 juta dari konsorsium 8 invenstor diantaranya Sequoia capital dan Warbrug. Gelar unicorn diraih gojek setelah 6 tahun eksistensinya, hal ini diperkuat dengan suksesnya gojek mendapatkan suntikan dana dari Tencent holding dan JD.com sebesar $1,2 miliar, nilai ini merupakan tertinggi diantara keempat unicorn.

Posisi kedua ditempati oleh Tokopedia yang memiliki total pendanaan sebesar US$1,347 miliar. Dari perolehan tersebut, tercatat investasi terbesar yang didapat yaitu dari Alibaba pada 17 Agustus 2017 sebesar US$1,1 miliar. Dilihat dari tanggal kelahiran, Tokopedia mendapat gelar unicorn seperti Gojek, yaitu setelah 6 tahun berdiri.

Posisi ketiga diduduki oleh Traveloka, yang mendapat gelar unicorn setelah Expedia berinvestasi sebesar $350 juta pada 27 Juli 2017 lalu. Meski menduduki peringkat ketiga, Traveloka terhitung cepat dibanding Gojek dan Tokopedia, karena telah mendapat gelar unicorn pada usia 5 tahun.

Pada acara Digital Economic Briefing, CEO Bukalapak mengklaim bahwa perusahaannya telah sukses menyandang gelar unicorn, menyusul Gojek, Tokopedia dan Traveloka. Achmad Zaky mengungkap, Bukalapak telah menerima pendanaan dengan total valuasi $1 miliar, tetapi kabar tersebut tidak dijelaskan lebih lanjut/dirahasiakan mengenai siapa investornya dan berapa pendanaannya.

Dilansir dari Dailysocial.id, mantan direktur Ovo Johnny Widodo dalam wawancaranya dengan CNBC Indonesia, menyebutkan tahun ini Ovo menjadi salah satu start up yang bervaluasi lebih dari $1 miliar. Namun narasi tersebut tampaknya masih diredam. Menurut sumber Finance Asia, valuasi Ovo sampai pendanaan putaran terakhir mencapai $2,9 miliar. Satrtup Report 2018 yang disusun oleh DSResearch memposisikan Ovo sebagai calon terdekat untuk penyandang gelar status unicorn kelima.

Referensi :

  1. Finansialku. Definisi Start up adalah. https://www.finansialku.com/startup-adalah/
  2. Sutan Mudo. Apa itu bisnis startup? Dan bagaimana perkembangannya? https://id.techinasia.com/talk/apa-itu-bisnis-startup-dan-bagaimana-perkembangannya
  3. Ahmad Zaenudin. Melihat perjalanan 4 Startup “Unicorn” di Indonesia. https://tirto.id/melihat-perjalanan-4-startup-unicorn-asal-indonesia-cAdQ
  4. Dailysocialid. Startup Unicorn kelima Indonesia memang adalah OVO https://dailysocial.id/post/startup-unicorn-kelima-indonesia-memang-adalah-ovo
  5. What is a unicorn startup company. https://www.feedough.com/what-is-a-unicorn-startup-company/
0

CSRF Attack & Solution

Posted by:

A. CSRF Attack

  1. Untuk mencoba serangan, anda bisa mendownload project web yang sudah tersedia untuk penetrasi, download di sini -> https://github.com/raesene/bWAPP
  2. Kemudian download aplikasi sender penetrasi tambahan Burp Suite di sini -> https://portswigger.net/burp/communitydownload
  3. Setelah anda download, install pada localhost anda. Jika bingung, bisa lihat tutorial berikut -> https://www.youtube.com/watch?v=F3QcgmCuEC0
  4. Jika sudah terinstall, masuk ke halaman Login
    http://localhost/bwapp/login.php

5. Kemudian login dengan Login : bee, Password : bug

6. Untuk serangan CSRF terbagi menjadi beberapa serangan, kita coba satu – persatu. Sekarang kita coba CSRF (Change Password) kemudian pilih Hack

7. Setelah masuk ke halaman yang di tuju, klik kanan -> View page source ( Google Chrome )

8. Kemdian block baris code seeperti gambar di bawah, copy + paste di editor anda.

9. Buatlah sebuah file csrf.html simpan di lokasi yang anda inginkan. Paste code di atas.

10. Sekarang copy + paste url pada halaman ganti password

11. Sekarang kita akan mengganti password menggunakan file crsf.html yang dibuat, ubah code seperti gambar berikut

12. untuk melakukan perubahan password, buka file csrf.html pada browser anda, klik Change

13. Kemudian coba anda login dengan password baru yang dibuat lewat file csrf.html

B. Solution

  1. Untuk mengatasi serangan CSRF (Change Password) , pada bagian form input, tambahkan current password field seperti gambar di bawah
  2.  

2. Pada saat handling request get password_curr , tambahkan code berikut ( Sesuaikan nama tabel dan kolom )

if(isset($_REQUEST["password_curr"]))
                {
                              
                    $password_curr = $_REQUEST["password_curr"];
                    $password_curr = mysqli_real_escape_string($link, $password_curr);
                    $password_curr = hash("sha1", $password_curr, false);                

                    $sql = "SELECT password FROM users WHERE login = '" . $login . "' AND password = '" . $password_curr . "'";

                    // Debugging
                    // echo $sql;    

                    $recordset = $link-&gt;query($sql);             

                    if(!$recordset)
                    {

                        die("Connect Error: " . $link-&gt;error);

                    }

                    // Debugging                
                    // echo "<br /&gt;Affected rows: ";                
                    // printf($link-&gt;affected_rows);

                    $row = $recordset-&gt;fetch_object();   

                    if($row)
                    {

                        // Debugging
                        // echo "<br /&gt;Row: ";
                        // print_r($row);

                        $sql = "UPDATE users SET password = '" . $password_new . "' WHERE login = '" . $login . "'";

                        // Debugging
                        // echo $sql;

                        $recordset = $link-&gt;query($sql);

                        if(!$recordset)
                        {

                            die("Connect Error: " . $link-&gt;error);

                        }

                        // Debugging              
                        // echo "<br /&gt;Affected rows: ";         
                        // printf($link-&gt;affected_rows);

                        $message = "<font color=\"green\"&gt;The password has been changed!</font&gt;";

                    }

                    else
                    {

                        $message = "<font color=\"red\"&gt;The current password is not valid!</font&gt;";

                    }
                
                }
0

SQL Injection & Solution

Posted by:

A. SQL Injection

  1. Untuk mencoba serangan, anda bisa mendownload project web yang sudah tersedia untuk penetrasi, download di sini -> https://github.com/raesene/bWAPP
  2. Kemudian download aplikasi sender penetrasi tambahan Burp Suite di sini -> https://portswigger.net/burp/communitydownload
  3. Setelah anda download, install pada localhost anda. Jika bingung, bisa lihat tutorial berikut -> https://www.youtube.com/watch?v=F3QcgmCuEC0
  4. Jika sudah terinstall, masuk ke halaman Login
    http://localhost/bwapp/login.php

5. Kemudian login dengan Login : bee, Password : bug

6. Untuk serangan SQL Injection terbagi menjadi beberapa serangan, kita coba satu – persatu. Sekarang kita coba SQL Injection (GET/Search) kemudian pilih Hack

7. Lalu isi form seperti gambar di bawah, klik Search

8. Sekarang kita coba SQL Injection (GET/Select) kemudian pilih Hack

9. Kemudian pilih salah satu judul film selain yang pertama, lalu klik Go

10. Sekarang masukkan script modifikasi pada url seperti gambar dibawah, kemudian tekan enter pada url tersebut

B. Solution

  1. Untuk mengatasi serangan SQL Injection (GET/Search) &
    SQL Injection (GET/Select) , buatlah fungsi berikut
0

HTML Attack & Solution

Posted by:

A. Html Attack

  1. Untuk mencoba serangan, anda bisa mendownload project web yang sudah tersedia untuk penetrasi, download di sini -> https://github.com/raesene/bWAPP
  2. Kemudian download aplikasi sender penetrasi tambahan Burp Suite di sini -> https://portswigger.net/burp/communitydownload
  3. Setelah anda download, install pada localhost anda. Jika bingung, bisa lihat tutorial berikut -> https://www.youtube.com/watch?v=F3QcgmCuEC0
  4. Jika sudah terinstall, masuk ke halaman Login
    http://localhost/bwapp/login.php

4. Kemudian login dengan Login : bee, Password : bug

5. Untuk serangan HTML terbagi menjadi beberapa serangan, kita coba satu – persatu. Sekarang kita coba HTML Injection – Reflected (GET) kemudian pilih Hack

6. Lalu isi form seperti gambar di bawah, klik Go

7. Sekarang kita coba HTML Injection – Reflected (POST), kemudian pilih Hack

8. Kemudian isi form seperti gambar di bawah, klik Go

9. Sekarang kita coba HTML Injection – Stored (Blog), kemudian pilih Hack

10. Kemudian isi form seperti gambar di bawah, klik Submit

11. Lakukan cara no 9, akan muncul pop up baru

B. Solution

  1. Untuk mengatasi serangan HTML Injection – Reflected , buatlah fungsi seperti gambar dibawah
0

Sistem Informasi Penjualan menggunakan PHP Native dan Admin LTE ( Part 2 )

Posted by:

47. Kemudian kita tambahkan tombol plus untuk mengarahkan ke form add

48. pada bagian view/category/index.php tambahkan code ini

49. sekarang buat file show.php dalam folder view/category, lalu masukkan code berikut

<div class="row"&gt;
    <div class="col-12"&gt;
        <div class="card"&gt;
            <div class="card-header"&gt;
                <h3 class="card-title"&gt;Detail Category</h3&gt;
            </div&gt;
            <div class="card-body"&gt;
                <?php $data=$_SESSION['data']; ?&gt;
                <?php $category=$data-&gt;fetch(PDO::FETCH_OBJ); ?&gt;
                <div class="form-group"&gt;
                    <label for="name"&gt;Category</label&gt;
                    <input id="name" type="text" value="<?php echo $category-&gt;name ?&gt;" class="form-control" disabled /&gt;
                </div&gt;
                <div class="form-group"&gt;
                    <label for="status"&gt;Status</label&gt;
                    <input id="status" type="text" value="<?php echo $category-&gt;status ?&gt;" class="form-control" disabled /&gt;
                </div&gt;
            </div&gt;
        </div&gt;
    </div&gt;
</div&gt;

50. Tambahkan method baru show di dalam Category.php

51. Tambahkan method baru show di dalam CategoryController.php

52. Pada fungsi main_view , tambahkan code dibawah

53. pada index.php tambahkan code dibawah

54. pada view/category/index.php ubah code seperti gambar di bawah

55. Sekarang coba klik gambar mata untuk melihat detail data

56. kemudian kita buat file edit.php dalam folder view/category/ . masukkan code berikut.

    <div class="row"&gt;
        <div class="col-12"&gt;
            <form method="POST" action="?category/update"&gt;
                <div class="card"&gt;
                    <div class="card-header"&gt;
                        <h3 class="card-title"&gt;Update Category</h3&gt;
                    </div&gt;
                    <div class="card-body"&gt;
                        <?php $data=$_SESSION['data']; ?&gt;
                        <?php $category=$data-&gt;fetch(PDO::FETCH_OBJ); ?&gt;
                        <input type="hidden" name="id" value="<?php echo $category-&gt;id ?&gt;"&gt;
                        <div class="form-group"&gt;
                            <label for="name"&gt;Category</label&gt;
                            <input type="text" name="name" value="<?php echo $category-&gt;name ?&gt;" class="form-control" placeholder="Enter category" /&gt;
                        </div&gt;
                        <div class="form-group"&gt;
                            <label for="status"&gt;Status</label&gt;
                            <select name="status" class="form-control"&gt;
                               <option value="active "<?php 
                               if($category-&gt;status=="active")
                                  echo"selected";
                               else
                                  echo""; 
                                ?&gt; 
                                &gt;Active</option&gt;
                              <option value="inactive "<?php 
                               if($category-&gt;status=="inactive")
                                  echo"selected";
                               else
                                  echo""; 
                                ?&gt; 
                                &gt;Inactive</option&gt;

                        </select&gt;
                    </div&gt;
                </div&gt;
                <div class="card-footer"&gt;
                    <a href="?category" class="btn btn-outline-info"&gt;Back</a&gt;
                    <button type="submit" class="btn btn-primary pull-right"&gt;Update Category</button&gt;
                </div&gt;
            </div&gt;
        </form&gt;
    </div&gt;
</div&gt;

57. Tambahkan method baru edit di dalam CategoryController.php

58. Pada fungsi main_view , tambahkan code dibawah

59. Pada index.php

60. pada view/category/index.php ubah code seperti gambar di bawah

61. Sekarang klik simbol pensil, untuk menampilkan form ubah data

62. Tambahkan method baru update di dalam Category.php

63. Tambahkan method baru update di dalam CategoryController.php

64. pada index.php

65. Sekarang coba ubah data anda

66. Terakhir kita buat method untuk hapus, pada view/category/index.php ubah code seperti gambar di bawah

67. Tambahkan method baru delete di dalam Category.php

68. Tambahkan method baru delete di dalam CategoryController.php

69. pada index.php

70. arahkan url pada menu category di dalam sidebar.php

0

Workshop Android Special Ramadhan 2019 (1440 H)

Posted by:

Bulan Ramadhan sebentara lagi datang, apa yang sudah anda persiapkan? Bulan Ramadhan kali ini, Rumah Coding insya Allah akan mengadakan “Workshop Android Spesial Ramadhan”. Terdapat 3 workshop di bulan ramadhan mendatang. Melalui workshop ini, anda akan langsung praktek membuat aplikasi berikut

1. Kamus Arab Indonesia
Hari: Minggu,
Tanggal: 12 Mei 2019 
Waktu: 09:00 – 17:00
Biaya: Rp. 400.000

Materi:
– Activity
– Frame Layout
– Google Translator API
– List View
– Card View
– Custom Adapter
– Share Intent
– Realm

2. Jadwal dan Pengingat Shalat
Hari: Minggu,
Tanggal: 19 Mei 2019
Waktu: 09:00 – 17:00
Biaya: Rp. 400.000

Materi:
– OkHttp
– Custom Drawable
– Shared Preferences
– Notification
– Task Schedule
– Sound

3. App Al-Qur’an
Hari: Minggu,
Tanggal: 26 Mei 2018
Waktu: 09:00 – 17:00
Biaya: Rp. 400.000

Materi:
– OkHttp
– Image View
– View Pager
– Realm
– List View
– Custom Adapter

Tempat: Rumah Coding
Jl. Margonda Raya Gg. Kramat Batas No. 4 Depok, Jawa Barat
https://goo.gl/maps/g58xEuMewG62

Persyaratan:
1. Memiliki laptop sendiri (Windows/Linux/Mac 4GB RAM)

Persyaratan Software:
1. JDK8 (https://goo.gl/8XHlU2)
2. Android Studio (https://goo.gl/fcKQbF)
3. Emulator: Nox App Player

Tahap pendaftaran:
1. Mengisi formulir di bawah.
2. Peserta akan dihubungi melalui email/whatsapp
3. Pembayaran via transfer
4. Workshop.

Fasilitas:
1. Sertifikat
2. Ruangan Full AC

Catatan:
– Tersedia koneksi internet, tetapi untuk berjaga-jaga, silahkan mempersiapkan koneksi internet masing-masing.

Informasi:
+62 857-1005-9175
[email protected]

Silahkan lengkapi formulir pendaftaran di bawah ini:

0

Membuat Aplikasi CRUD Android dan IOS dengan SQLite pada IONIC 3

Posted by:

  1. pertama – tama, ketik pada cmd anda ionic start BookStoreApp blank

2. Input y

3. Input n

4. Apabila proses instalasi sudah selesai, masuk ke folder anda dengan mengetik cd BookStoreApp

5. Kemudian install plugin SQLite, ketik ionic cordova plugin add cordova-sqlite-storage

6. Apabila muncul error, kita perlu install cordova secara global seperti gambar di bawah

7. Ketik npm i -g cordova

8. Kemudian ketik npm install –save @ionic-native/[email protected]

9. Kemudian buka folder project BookStoreApp menggunakan IDE anda, masuk ke dalam src/app/app.module.ts untuk import plugin SQLite. Tambahkan import { SQLite } from ‘@ionic-native/sqlite’; serta SQLite seperti gambar di bawah.

10. Lalu kita akan membuat provider untuk database, ketik ionic generate provider database

11. Ubah code yang ada dalam src/provider/database/database.ts. Masukkan code di bawah

import { Injectable } from '@angular/core';
import { SQLite, SQLiteObject } from '@ionic-native/sqlite';

@Injectable()
export class DatabaseProvider {
    db:SQLiteObject = null;

    constructor(private sqlite: SQLite) { }

    getOrGenerateDB() {
        // Generate DB adalah proses asynchronus, jadi bagusnya kita pakai promise
        // Walaupun prosesnya hanya sepersekian detik, tetap saja harus di tunggu.
        return new Promise((resolve, reject) =&gt; {
            if (this.db != null) {
                resolve(this.db)
            } else {
                this.sqlite.create({
                    name        : 'myDatabase.db',
                    location    : 'default'
                }).then((db: SQLiteObject) =&gt; {
                    this.db = db;
                    resolve(this.db)
                }).catch((e) =&gt; {
                    console.log(e);
                    reject(e);
                });
            }
        });
    }
   
    createTable() {
        this.getOrGenerateDB().then((db: SQLiteObject) =&gt; { 
            var sql = 'create table IF NOT EXISTS buku (' +
            'id INTEGER PRIMARY KEY AUTOINCREMENT, '+ 
            'judul VARCHAR(255), '+
            'penerbit VARCHAR(50), '+  
            'pengarang VARCHAR(50))';

            db.executeSql(sql, {})
                .then(() =&gt; console.log('tabel buku berhasil di create'))
                .catch(e =&gt; console.log(e));

            // db.executeSql('DELETE FROM buku', {})
            //     .then(() =&gt; console.log('tabel buku berhasil di delete'))
            //     .catch(e =&gt; console.log(e));

            // db.executeSql('INSERT INTO buku values (?, ?,?,?)', 
            //               [null, "judullll", "penerbittt", "ppengarang OKEOKE"])
            //     .then(() =&gt; console.log('tabel buku berhasil di tambah'))
            //     .catch(e =&gt; console.log(e));


            // Untuk create table lainnya bisa ditambahkan di sini
            // contoh
            // var sql = 'create Tabel 2 IF NOT EXISTS delivery_form (' +
            //     'number VARCHAR(255) PRIMARY KEY, '+ 
            //     'round_id VARCHAR(255), '+
            //     'state VARCHAR(50), '+  
            //     'has_returns INTEGER(2), '+  
            //     'has_annotations INTEGER(2))';
            // db.executeSql(sql, {})
            //     .then(() =&gt; console.log('delivery_form table has created'))
            //     .catch(e =&gt; console.log(e));
        })
    }

}

12. Ubah code yang ada dalam src/app/pages/home/home.ts. Masukkan code di bawah . Disini kita akan membuat fungsi untuk menampilkan semua data pada database.

import { Component, NgZone } from '@angular/core';
import { NavController } from 'ionic-angular';
import { SQLiteObject } from '@ionic-native/sqlite';

import { DatabaseProvider } from '../../providers/database/database';

@Component({
    selector: 'page-home',
    templateUrl: 'home.html'
})

export class HomePage {
    data:any=[];
    
    constructor(public navCtrl: NavController, public zone: NgZone,
                public db: DatabaseProvider) { }

    ionViewDidEnter() { 
        this.db.getOrGenerateDB().then((db: SQLiteObject) =&gt; { 
            db.executeSql('SELECT * FROM buku', {}).then(res =&gt; {
                this.data = [];
                this.zone.run(() =&gt; {
                    for (var i = 0; i < res.rows.length; i++) {
                        this.data.push({
                            id: res.rows.item(i).id,
                            judul: res.rows.item(i).judul
                        })
                    }
                })
            }).catch(e =&gt; console.log(e));
        });
    }

    edit(id) {
         this.navCtrl.push("BookformPage", {bookID: id})
    }

    add() {
        this.navCtrl.push("BookformPage")
    }

}

13. Ubah code yang ada dalam src/app/pages/home/home.html. Masukkan code di bawah . Disini kita akan membuat halaman untuk menampilkan semua data pada database.

<ion-header&gt;
  <ion-navbar&gt;
    <ion-title&gt;
      Ionic CRUD SQLite
    </ion-title&gt;
  </ion-navbar&gt;
</ion-header&gt;

<ion-content padding&gt;
   <ion-scroll scrollY="true" direction="xy" style="height: 100vh;"&gt;
        <ion-list &gt;
            <ion-item tappable *ngFor="let a of data; let index = index" (click)="edit(a.id)" &gt;
                {{a.judul}} 
            </ion-item&gt;
        </ion-list&gt;
    </ion-scroll&gt;
    <ion-fab bottom right&gt;
      <button ion-fab (click) = "add()" &gt;Add</button&gt;
    </ion-fab&gt;
</ion-content&gt;

14. Sekarang kita akan membuat sebuah halaman input data buku, ketik ionic generate page bookform

15. Ubah code yang ada dalam src/app/pages/bookform/bookform.ts. Masukkan code di bawah . Disini kita akan membuat fungsi untuk tambah data, ubah, serta hapus.

import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams, ToastController } from 'ionic-angular';
import { SQLiteObject } from '@ionic-native/sqlite';
import { DatabaseProvider } from '../../providers/database/database';


@IonicPage()
@Component({
    selector: 'page-bookform',
    templateUrl: 'bookform.html',
})
export class BookformPage {
    book: any = {
        judul: '',
        penerbit: '',
        pengarang: ''
    }
    title = '';
    bookID = '';
    toaster: any;

    constructor(public navCtrl: NavController, public navParams: NavParams, 
                public toastCtrl: ToastController, public db: DatabaseProvider) {
        this.title = 'Tambah Buku';
        this.bookID = navParams.get("bookID");
        if (this.bookID != null || this.bookID != undefined) {
            this.title = 'Edit Buku';
        }
        this.toaster = this.toastCtrl.create({
            duration: 3000,
            position: 'bottom'
        });
    }

    ionViewDidLoad() {
        if (this.bookID != '') {
            this.db.getOrGenerateDB().then((db: SQLiteObject) =&gt; { 
                db.executeSql('SELECT * FROM buku where id = ?', [this.bookID]).then(res =&gt; {
                    this.book = {
                        id: res.rows.item(0).id,
                        judul: res.rows.item(0).judul,
                        penerbit: res.rows.item(0).penerbit,
                        pengarang: res.rows.item(0).pengarang
                    }
                }).catch(e =&gt; console.log(e));
            });
        }
    }

    save() {
        if (this.book.judul == '' || this.book.penerbit == '' || this.book.pengarang == '') {
            this.toaster.setMessage('All fields are required');
            this.toaster.present();
        } else {
            // Jika edit
            if (this.bookID) {
                var sql = 'UPDATE buku SET judul=?, penerbit=?, pengarang=? where id = ?';
                var param = [this.book.judul, this.book.penerbit, this.book.pengarang, this.book.id];
            } else {
                console.log(this.book);
                param = [null, this.book.judul, this.book.penerbit, this.book.pengarang]
                sql = 'INSERT INTO buku values (?,?,?,?)';
            }

            this.db.getOrGenerateDB().then((db: SQLiteObject) =&gt; { 
                db.executeSql(sql, param).then(res =&gt; {
                    setTimeout(()=&gt;{
                        this.navCtrl.pop();
                    }, 300) 
                }).catch(e =&gt; console.log(e));
            });
        }
    }

    deleteBook() {
        this.db.getOrGenerateDB().then((db: SQLiteObject) =&gt; { 
            db.executeSql('DELETE FROM buku where id = ?', [this.bookID]).then(res =&gt; {
                setTimeout(()=&gt;{
                    this.navCtrl.pop();
                }, 300) 
            }).catch(e =&gt; console.log(e));
        });
    }
}

16 . Ubah code yang ada dalam src/app/pages/bookform/bookform.html Masukkan code di bawah . Disini kita akan membuat tampilan input data buku.

<ion-header&gt;
    <ion-navbar&gt;
     <ion-title&gt; {{ title }} </ion-title&gt;
    </ion-navbar&gt;
</ion-header&gt;

<ion-content padding&gt;
    <ion-list&gt;
        <ion-item&gt;
            <ion-label floating&gt;Judul</ion-label&gt;
            <ion-input type="judul" [(ngModel)] = "book.judul" &gt;</ion-input&gt;
        </ion-item&gt;
        <ion-item&gt;
            <ion-label floating&gt;Penerbit</ion-label&gt;
            <ion-input type="penerbit" [(ngModel)] = "book.penerbit" &gt;</ion-input&gt;
        </ion-item&gt;
        <ion-item&gt;
            <ion-label floating&gt;Pengarang</ion-label&gt;
            <ion-input type="pengarang" [(ngModel)] = "book.pengarang" &gt;</ion-input&gt;
        </ion-item&gt;
        <ion-item text-center&gt;
            <button ion-button round style="min-width: 200px; padding: 10px 16px" (click) = "save()"&gt;Save</button&gt;
            <br/&gt;
            <button ion-button round style="min-width: 200px; padding: 10px 16px" (click) = "deleteBook()"&gt;Delete</button&gt;
        </ion-item&gt;
    </ion-list&gt;
</ion-content&gt;

17. Kemudian panggil fungsi createTable ( ) pada DatabaseProvider

18. Langkah terakhir dengan menambahkan satu parameter pada MyApp Constructor untuk mengaktifkan fungsi createTable ( ) pada DatabaseProvider

19. Sekarang bisa anda coba dengan emulator atau smartphone ,

0
Page 1 of 4 1234