Ikhwan Saputera

Setiap Waktu adalah Belajar, Setiap Tempat adalah Sekolah, Setiap Orang adalah Guru

Showing posts with label Database. Show all posts
Showing posts with label Database. Show all posts

Friday, April 09, 2021

Hal-Hal Yang Harus di Perhatikan Keamanan PHP Untuk Admin Sys

PHP adalah bahasa skrip sisi server sumber terbuka, dan digunakan secara luas. Server web Apache / Nginx / Lighttpd menyediakan akses ke file dan konten melalui protokol HTTP ATAU HTTPS. Bahasa skrip sisi server yang salah dikonfigurasi dapat menimbulkan berbagai macam masalah. Jadi, PHP harus digunakan dengan hati-hati. Berikut adalah dua puluh lima praktik terbaik keamanan php untuk sysadmin Linux dan Unix untuk mengkonfigurasi PHP dengan aman.

 

Praktik terbaik keamanan PHP

Contoh kiat keamanan untuk kesiapan PHP

  • DocumentRoot: / var / www / html
  • Server Web default: Apache (Anda dapat menggunakan Lighttpd atau Nginx sebagai ganti Apache)
  • File konfigurasi PHP default: /etc/php.ini atau /etc/php/7.0/fpm/php.ini
  • Direktori konfigurasi ekstensi PHP default: /etc/php.d/ ATAU /etc/php/7.0/fpm/conf.d/
  • Contoh file konfigurasi keamanan php kami: /etc/php.d/security.ini ATAU /etc/php/7.0/fpm/conf.d/99-security.conf (Anda perlu membuat file ini menggunakan editor teks)
  • Sistem operasi: RHEL / CentOS / Fedora Linux (instruksi harus bekerja dengan distribusi Linux lain seperti Debian / Ubuntu atau sistem operasi serupa Unix seperti OpenBSD / FreeBSD / HP-UX ).
  • Port TCP / UDP server PHP default: none 

Mari kita lihat beberapa teknis dilapangan untuk keamanan php.

1. Kenali Musuh Anda

Aplikasi berbasis PHP dapat menghadapi berbagai jenis serangan. Saya telah memperhatikan berbagai jenis serangan:

  1. XSS - Skrip lintas situs adalah kerentanan dalam aplikasi web php, yang dapat dimanfaatkan oleh penyerang untuk mencuri informasi pengguna. Anda dapat mengkonfigurasi Apache dan menulis skrip PHP yang lebih aman (memvalidasi semua input pengguna) untuk menghindari serangan xss.
  2. Injeksi SQL - Ini adalah kerentanan dalam lapisan database aplikasi php. Ketika input pengguna disaring dengan tidak benar, pernyataan SQL apa pun dapat dijalankan oleh aplikasi. Anda dapat mengkonfigurasi Apache dan menulis kode aman (memvalidasi dan meng-escape semua input pengguna) untuk menghindari serangan injeksi SQL. Praktik umum di PHP adalah melarikan diri parameter menggunakan fungsi yang disebut mysql_real_escape_string () sebelum mengirim kueri SQL.
    Spoofing
  3. Unggah file - Ini memungkinkan pengunjung Anda untuk menempatkan file (mengunggah file) di server Anda. Hal ini dapat mengakibatkan berbagai masalah keamanan seperti menghapus file Anda, menghapus database, mendapatkan detail pengguna, dan banyak lagi. Anda dapat menonaktifkan pengunggahan file menggunakan php atau menulis kode aman (seperti memvalidasi input pengguna dan hanya mengizinkan jenis file gambar seperti png atau gif).
  4. Termasuk file lokal dan jarak jauh - Penyerang dapat membuka file dari server jarak jauh dan menjalankan kode PHP apa pun. Ini memungkinkan mereka untuk mengupload file, menghapus file dan menginstal backdoors. Anda dapat mengkonfigurasi php untuk menonaktifkan eksekusi file jarak jauh.
  5. eval () - Evaluasi string sebagai kode PHP. Ini sering digunakan oleh penyerang untuk menyembunyikan kode dan alat mereka di server itu sendiri. Anda dapat mengkonfigurasi php untuk menonaktifkan eval ().
  6. Sea-surf Attack (Cross-site request forgery - CSRF) - Serangan ini memaksa pengguna akhir untuk melakukan tindakan yang tidak diinginkan pada aplikasi web di mana dia saat ini diautentikasi. Eksploitasi CSRF yang berhasil dapat membahayakan data dan operasi pengguna akhir jika digunakan oleh pengguna biasa. Jika pengguna akhir yang ditargetkan adalah akun administrator, ini dapat membahayakan seluruh aplikasi web.

    2. Temukan Modul PHP Built-in

    Untuk melihat kumpulan modul PHP yang dikompilasi, ketik perintah berikut:
    # php -m
    Contoh keluaran:
    [Modul PHP]
    apc
    bcmath
    bz2
    kalender
    Inti
    ctype
    keriting
    tanggal
    dom
    ereg
    exif
    fileinfo
    Saring
    ftp
    gd
    gettext
    gmp
    hash
    iconv
    imap
    json
    libxml
    mbstring.dll
    memcache
    mysql.dll
    mysqli.dll
    openssl
    pcntl
    pcre
    PDO
    pdo_mysql
    pdo_sqlite
    Phar
    readline
    Refleksi
    sidang
    shmop
    SimpleXML
    soket
    SPL
    sqlite3
    standar
    suhosin
    tokenizer
    wddx
    xml
    xmlreader
    xmlrpc
    xmlwriter
    xsl
    zip
    zlib
    
    [Modul Zend]
    Suhosin
    
    Saya merekomendasikan agar Anda menggunakan PHP dengan modul yang dikurangi untuk kinerja dan keamanan. Misalnya, Anda dapat menonaktifkan modul sqlite3 dengan menghapus (menghapus) file konfigurasi , ATAU mengganti nama (memindahkan) file bernama /etc/php.d/sqlite3.ini sebagai berikut: ATAU Modul terkompilasi lainnya hanya dapat dihapus dengan menginstal ulang PHP dengan konfigurasi yang dikurangi. Anda dapat mengunduh kode sumber php dari php.net dan mengkompilasinya sebagai berikut dengan dukungan GD, fastcgi, dan MySQL:
    # rm /etc/php.d/sqlite3.ini

    # mv /etc/php.d/sqlite3.ini /etc/php.d/sqlite3.disable

     

    3. Batasi Kebocoran Informasi PHP

    Untuk membatasi kebocoran informasi PHP nonaktifkan expose_php. Edit /etc/php.d/secutity.ini dan atur direktif berikut:

    expose_php=Off

    Saat diaktifkan, expose_php melaporkan kepada dunia bahwa PHP diinstal pada server, yang menyertakan versi PHP dalam header HTTP (misalnya,
    X-Powered-By: PHP / 5.3.3). Panduan logo PHP (lihat contoh ) juga ditampilkan, sehingga menambahkannya ke URL situs berkemampuan PHP akan menampilkan logo yang sesuai. Ketika expose_php diaktifkan, Anda dapat melihat versi php menggunakan perintah berikut:
     

     

    4. Minimalkan Modul PHP yang Dapat Dimuat (Ekstensi Dinamis)

    PHP mendukung "Ekstensi Dinamis". Secara default, RHEL memuat semua modul ekstensi yang ditemukan di direktori /etc/php.d/. Untuk mengaktifkan atau menonaktifkan modul tertentu, cukup temukan file konfigurasi di direktori /etc/php.d/ dan beri komentar nama modul. Anda juga dapat mengganti nama atau menghapus file konfigurasi modul. Untuk kinerja dan keamanan PHP terbaik, Anda sebaiknya hanya mengaktifkan ekstensi yang dibutuhkan aplikasi web Anda. Misalnya, untuk menonaktifkan ekstensi gd, ketik perintah berikut: Untuk mengaktifkan modul php bernama gd, masukkan:
     

    5. Catat Semua Kesalahan PHP

    Jangan tampilkan pesan kesalahan PHP ke semua pengunjung situs. Edit /etc/php.d/security.ini dan atur direktif berikut:

     

    6. Larang Mengupload File

    Edit /etc/php.d/security.ini dan setel perintah berikut untuk menonaktifkan pengunggahan file demi alasan keamanan:

     

    7. Matikan Eksekusi Kode Jarak Jauh

    Jika diaktifkan, allow_url_fopen memungkinkan fungsi file PHP - seperti file_get_contents () dan pernyataan include dan require - dapat mengambil data dari lokasi jarak jauh, seperti FTP atau situs web.

    The allow_url_fopen pilihan memungkinkan file PHP ini fungsi - seperti file_get_contents () dan termasuk dan memerlukan pernyataan - dapat mengambil data dari lokasi terpencil menggunakan ftp atau http protokol. Pemrogram sering kali melupakan ini dan tidak melakukan pemfilteran input yang tepat saat meneruskan data yang disediakan pengguna ke fungsi ini, sehingga menyebabkan kerentanan injeksi kode . Sejumlah besar kerentanan injeksi kode yang dilaporkan dalam aplikasi web berbasis PHP disebabkan oleh kombinasi pengaktifan allow_url_fopen dan pemfilteran input yang buruk. Edit /etc/php.d/security.ini dan atur direktif berikut:

     

    8. Aktifkan Mode Aman SQL

    Edit /etc/php.d/security.ini dan atur direktif berikut:

     

     

    Jika ternyata On, mysql_connect () dan mysql_pconnect () mengabaikan argumen dilewatkan ke mereka. Harap dicatat bahwa Anda mungkin harus membuat beberapa perubahan pada kode Anda. Aplikasi pihak ketiga dan open source seperti WordPress, dan lainnya mungkin tidak berfungsi sama sekali ketika sql.safe_mode diaktifkan. Saya juga menyarankan Anda untuk mematikan magic_quotes_gpc untuk semua instalasi php 5.3.x karena pemfilterannya tidak efektif dan tidak terlalu kuat. mysql_escape_string () dan fungsi pemfilteran kustom melayani tujuan yang lebih baik:

     

    9. Kontrol Ukuran POST

    Metode permintaan HTTP POST digunakan ketika klien (browser atau pengguna) perlu mengirim data ke server web Apache sebagai bagian dari permintaan, seperti saat mengunggah file atau mengirimkan formulir yang telah diisi. Penyerang mungkin mencoba mengirim permintaan POST yang sangat besar untuk memakan sumber daya sistem Anda. Anda dapat membatasi permintaan POST ukuran maksimum yang akan diproses PHP. Edit /etc/php.d/security.ini dan atur direktif berikut:

     

     

    1K menetapkan ukuran maksimal data posting yang diizinkan oleh aplikasi php. Pengaturan ini juga mempengaruhi upload file. Untuk mengupload file besar, nilai ini harus lebih besar dari upload_max_filesize. Saya juga menyarankan agar Anda membatasi metode yang tersedia menggunakan server web Apache. Edit, httpd.conf dan atur petunjuk berikut untuk DocumentRoot / var / www / html:

     

    10. Kontrol Sumber Daya (Kontrol DoS)

    Anda dapat mengatur waktu eksekusi maksimum setiap skrip php , dalam hitungan detik. Opsi rekomendasi lainnya adalah menyetel jumlah waktu maksimum yang mungkin dihabiskan setiap skrip untuk mengurai data permintaan, dan jumlah memori maksimum yang dapat digunakan skrip. Edit /etc/php.d/security.ini dan atur arahan berikut:

     

     

    11. Install Suhosin Advanced Protection System for PHP

    Suhosin adalah sistem perlindungan lanjutan untuk instalasi PHP. Ini dirancang untuk melindungi server dan pengguna dari kekurangan yang diketahui dan tidak diketahui dalam aplikasi PHP dan inti PHP. Suhosin hadir dalam dua bagian independen, yang dapat digunakan secara terpisah atau dikombinasikan. Bagian pertama adalah patch kecil terhadap inti PHP, yang mengimplementasikan beberapa perlindungan tingkat rendah terhadap bufferoverflows atau kerentanan format string dan bagian kedua adalah ekstensi PHP yang kuat yang mengimplementasikan semua perlindungan lainnya.


    12. Menonaktifkan Fungsi PHP Berbahaya

    PHP memiliki banyak fungsi yang dapat digunakan untuk memecahkan server Anda jika tidak digunakan dengan benar. Anda dapat mengatur daftar fungsi di /etc/php.d/security.ini menggunakan direktif disable_functions :

     

    13. PHP Fastcgi / CGI – cgi.force_redirect Directive

    PHP bekerja dengan FastCGI. Fascgi mengurangi jejak memori server web Anda, tetapi tetap memberi Anda kecepatan dan kekuatan dari seluruh bahasa PHP. Anda dapat mengkonfigurasi Apache2 + PHP + FastCGI atau cgi seperti yang dijelaskan di sini . Petunjuk konfigurasi cgi.force_redirect mencegah siapa pun memanggil PHP secara langsung dengan URL seperti http://www.cyberciti.biz/cgi-bin/php/hackerdir/backdoor.php. Aktifkan cgi.force_redirect untuk alasan keamanan. Edit /etc/php.d/security.ini dan atur direktif berikut:

     

    14. Pengguna PHP dan ID Grup

    mod_fastcgi adalah modul cgi untuk server web Apache. Itu dapat terhubung ke server FASTCGI eksternal. Anda perlu memastikan php dijalankan sebagai pengguna non-root. Jika PHP dijalankan sebagai root atau UID di bawah 100, PHP dapat mengakses dan / atau memanipulasi file sistem. Anda harus menjalankan PHP CGI sebagai pengguna non-hak istimewa menggunakan suEXEC atau mod_suPHP Apache . Fitur suEXEC memberikan pengguna Apache kemampuan untuk menjalankan program CGI di bawah ID pengguna yang berbeda dari ID pengguna server web pemanggil. Dalam contoh ini, php-cgi saya berjalan sebagai pengguna phpcgi dan apache berjalan sebagai pengguna apache:

     

    15. Batasi Akses PHP ke Sistem File

    Direktif open_basedir mengatur direktori tempat PHP diizinkan untuk mengakses file menggunakan fungsi seperti fopen (), dan lainnya. Jika file berada di luar jalur yang ditentukan oleh open_basdir, PHP akan menolak untuk membukanya. Anda tidak dapat menggunakan tautan simbolis sebagai solusinya. Misalnya, hanya izinkan akses ke direktori / var / www / html dan bukan ke / var / www, atau / tmp atau / etc:

     

    16. Jalur Sesi

    Dukungan sesi di PHP terdiri dari cara untuk mempertahankan data tertentu di seluruh akses berikutnya. Ini memungkinkan Anda untuk membangun aplikasi yang lebih disesuaikan dan meningkatkan daya tarik situs web Anda. Path ini didefinisikan di file /etc/php.ini dan semua data yang terkait dengan sesi tertentu akan disimpan dalam file di direktori yang ditentukan oleh opsi session.save_path. Standarnya adalah sebagai berikut di bawah RHEL / CentOS / Fedora Linux:

     

     

     

     

    https://www.cyberciti.biz/tips/php-security-best-practices-tutorial.html

     

     

     

     

     

     

     

     

     

HeidiSQL On Ubuntu


HeidiSQL adalah software gratis, dan dibuata dengan tujuan agar mudah dipelajari. "Heidi" memungkinkan Anda melihat dan mengedit data dan struktur dari salah satu sistem database MariaDB, MySQL, Microsoft SQL, PostgreSQL, dan SQLite. Dibuat semanjak tahun 2002 oleh Ansgar, HeidiSQL termasuk alat paling populer untuk MariaDB dan MySQL di seluruh dunia. Untu untuk memasang HeidiSQL membutuhkan "WINE"

Bagaimana cara menginstall HeidiSQL di ubuntu, mari bersama-sama kita belajar dengan mengikuti tahapannya.

1. Pertama

Aktifkan snaps di Ubuntu dan instal HeidiSQL (WINE) Snaps adalah aplikasi yang dikemas dengan semua dependensinya untuk dijalankan pada semua distribusi Linux populer dari satu build 

sudo apt update
sudo apt install snapd

Pastikan  dengan melakukan restrat komputer agar snap diperbarui dengan benar. 

2. Kedua

Untuk menginstall HeidiSQL cukup dengan perintah :

sudo snap install heidisql-wine --beta
 
 
 

 

Saturday, January 16, 2021

Hacker #Filosofy: Hirarki Hacker #4

 

Banyak artikel / tulisan di media tentang ‘hacker’, tapi tidak banyak yang  membahas tentang budaya, etika, aturan yang mengatur komunitas misterius ini. Sebuah masyarakat yang hanya ada & dikenal diantara underground (demikian istilah mereka). Tulisan ini di sadur dari beberapa bahan di Internet underground seperti tulisan Gilbert Alaverdian akan mencoba membahas hal-hal ini, agar masyarakat umum dapat mengerti sedikit tentang sub-culture di dunia underground.

Di media & stereotype masyarakat tentang hacker adalah orang yang jahat dan suka merusak. Padahal arti sebetulnya hacker adalah tidak seperti yang dibayangkan banyak orang. Stereotype ABG 15 tahun, yang duduk di belakang komputer berjam-jam, masuk ke sistem dan men-delete atau menghancurkan apa saja yang bisa mereka hancurkan – “anak” ini dikenal sebagai cracker bukan sebagai hacker. Cracker ini yang sering anda dengar di berita / media, mematikan situs web, menghapus data dan membuat kekacauan kemanapun mereka pergi.

Di dunia elektronik bawah tanah (underground) nama jarang digunakan. Orang biasanya menggunakan nama alias, callsign atau nama samaran. Hal ini memungkinkan kita bisa menyamarkan identitas, dan di kenali sesama underground. Beberapa nama populer diantara hacker Indonesia bisa dikenali seperti hC, cbug, litherr, fwerd, d_ajax, r3dshadow, cwarrior, ladybug, chiko, gelo, BigDaddy, the_rumput_kering dsb..

Apakah perbedaan mendasar antara cracker & hacker? Di http://www.whatis.com, cracker di definisikan sebagai

“seseorang yang masuk ke sistem orang lain, biasanya di jaringan komputer, membypass password atau lisensi program komputer, atau secara sengaja melawan keamanan komputer. Cracker dapat mengerjakan hal ini untuk keuntungan, maksud jahat, atau karena sebab lainnya karena ada tantangan. Beberapa proses pembobolan dilakukan untuk menunjukan kelemahan keamanan sistem”

Hacker menurut Eric Raymond di definisikan sebagai programmer yang pandai. Sebuah hack yang baik adalah solusi yang cantik dalam masalah pemrograman dan “hacking” adalah proses pembuatan-nya. Menurut Raymond ada lima (5) karakteristik yang menandakan seseorang adalah hacker, yaitu:

  • Seseorang yang suka belajar detail dari bahasa pemrograman atau system.
  • Seseorang yang melakukan pemrograman tidak cuma berteori saja.
  • Seseorang yang bisa menghargai, menikmati hasil hacking orang lain.
  • Seseorang yang dapat secara cepat belajar pemrogramman.
  • Seseorang yang ahli dalam bahasa pemrograman tertentu atau sistem tertentu, seperti “UNIX hacker”.

Yang menarik, dalam dunia hacker ternyata terjadi strata / tingkatan / level yang diberikan oleh komunitas hacker kepada seseorang karena kepiawaiannya, bukan karena umur atau senioritasnya. Proses yang paling berat adalah untuk memperoleh pengakuan / derajat / acknowledgement diantara masyarakat underground, seorang hacker harus mampu membuat program untuk meng-eksploit kelemahan sistem, menulis tutorial (artikel) biasanya dalam format ASCII text biasa, aktif diskusi di mailing list / IRC channel para hacker, membuat situs web (sekarang di media sosial seperti twitter, FB, grup Telegram, WA dll) dsb. Entah kenapa warna background situs web para hacker seringkali berwarna hitam gelap, mungkin untuk memberikan kesan misterius. Proses memperoleh acknowledgement / pengakuan, akan memakan waktu lama bulanan bahkan tahun, tergantung ke piawaian hacker tersebut. 

 

Hirarki Hacker

Mungkin agak terlalu kasar jika di sebut hirarki / tingkatan hacker; saya yakin istilah ini tidak sepenuhnya bisa di terima oleh masyarakat hacker. Oleh karenanya saya meminta maaf sebelumnya. Secara umum yang paling tinggi (suhu) hacker sering di sebut ‘Elite’; di Indonesia mungkin lebih sering di sebut ‘suhu’. Sedangkan, di ujung lain derajat hacker dikenal ‘wanna-be’ hacker atau dikenal sebagai ‘Lamers’.

Elite

Juga dikenal sebagai 3l33t, 3l337, 31337 atau kombinasi dari itu; merupakan ujung tombak industri keamanan jaringan. Mereka mengerti sistem operasi luar dalam, sanggup mengkonfigurasi & menyambungkan jaringan secara global. Sanggup melakukan pemrogramman setiap harinya. Sebuah anugrah yang sangat alami, mereka biasanya effisien & trampil, menggunakan pengetahuannya dengan tepat. Mereka seperti siluman dapat memasuki sistem tanpa di ketahui, walaupun mereka tidak akan menghancurkan data-data. Karena mereka selalu mengikuti peraturan yang ada. Salah satu suhu hacker di Indonesia yang saya hormati & kagumi kebetulan bekas murid saya sendiri di Teknik Elektro ITB, beliau relatif masih muda sekarang telah menjadi seorang penting di Telkomsel.

Semi Elite

Hacker ini biasanya lebih muda daripada Elite. Mereka juga mempunyai kemampuan & pengetahuan luas tentang komputer. Mereka mengerti tentang sistem operasi (termasuk lubangnya). Biasanya dilengkapi dengan sejumlah kecil program cukup untuk mengubah program eksploit. Banyak serangan yang dipublikasi dilakukan oleh hacker kaliber ini, sialnya oleh para Elite mereka sering kali di kategorikan Lamer.

Developed Kiddie

Sebutan ini terutama karena umur kelompok ini masih muda (ABG) & masih sekolah. Mereka membaca tentang metoda hacking & caranya di berbagai kesempatan. Mereka mencoba berbagai sistem sampai akhirnya berhasil & memproklamirkan kemenangan ke lainnya. Umumnya mereka masih menggunakan Grafik User Interface (GUI) & baru belajar basic dari UNIX, tanpa mampu menemukan lubang kelemahan baru di sistem operasi.


Script Kiddie

Seperti developed kiddie, Script Kiddie biasanya melakukan aktifitas di atas. Seperti juga Lamers, mereka hanya mempunyai pengetahuan teknis networking yang sangat minimal. Biasanya tidak lepas dari GUI. Hacking dilakukan menggunakan trojan untuk menakuti & menyusahkan hidup sebagian pengguna Internet.

Lamer

Mereka adalah orang tanpa pengalaman & pengetahuan yang ingin menjadi hacker (wanna-be hacker). Mereka biasanya membaca atau mendengar tentang hacker & ingin seperti itu. Penggunaan komputer mereka terutama untuk main game, IRC, tukar menukar software prirate, mencuri kartu kredit. Biasanya melakukan hacking menggunakan software trojan, nuke & DDoS. Biasanya menyombongkan diri melalui IRC channel dsb. Karena banyak kekurangannya untuk mencapai elite, dalam perkembangannya mereka hanya akan sampai level developed kiddie atau script kiddie saja.

 

Friday, January 15, 2021

Percona Server Alternatif selain MySQL


Banyak perusahaan mengandalkan kinerja, ketahanan, dan keamanan untuk database yang mereka gunakan yakni MySQL, Kini  telah hadir alternatif lain untuk mewujudkan hal yang sama dengan pengaturan yang relatif lebih mudah dan nyaman yakni database Percona Server, memberdayakan aplikasi dan situs web yang memungkinkan pencapaian tujuan bisnis.

Percona Server for MySQL® adalah pengganti drop-in free, kompatibel sepenuhnya, disempurnakan, dan open source untuk database MySQL apa pun. Ini memberikan kinerja, skalabilitas, dan instrumentasi yang unggul.

Server Percona untuk MySQL dipercaya oleh ribuan perusahaan untuk memberikan kinerja dan konkurensi yang lebih baik untuk penangan beban kerja  yang sangat menuntut, dan memberikan nilai yang lebih besar kepada pengguna server MySQL dengan kinerja yang dioptimalkan, skalabilitas dan ketersediaan kinerja yang lebih besar, pencadangan yang ditingkatkan, dan visibilitas yang ditingkatkan.

Percona adalah sebuah perusahaan perangkat lunak open source yang mengkhususkan diri dalam Dukungan pada MySQL , Consulting, Managed Services, dan Pelatihan. Perusahaan ini didirikan pada tahun 2006 oleh Peter Zaitsev dan Vadim Tkachenko dan berkantor pusat di Durham, North Carolina. Perusahaan ini meluncurkan Layanan Backup MySQL pada Juni 2014 sebagai bagian dari Layanan yang Dikelola. Perusahaan memberikan kontribusi kepada masyarakat MySQL melalui situs blog-nya, MySQL Performance blog. Perusahaan juga menjadi tuan rumah konferensi pengguna MySQL tahunan bernama "Percona Live" di Silicon Valley dan London. Pendiri perusahaan juga telah menerbitkan buku O'Reilly "High Performance MySQL".

Perusahaan membangun dan memelihara free, open source software MySQL untuk pengguna Percona Server, MySQL, dan MariaDB. Percona Server adalah varian dari sistem manajemen database relasional MySQL dan merupakan drop-in pengganti MySQL. Perusahaan juga memproduksi perangkat lunak open source termasuk Percona XtraDB Cluster, Percona XtraBackup dan Percona Toolkit.



Saturday, January 02, 2021

Password_hash dan Password_verify di PHP

Fungsi Password_hash

Istilah hash adalah sebuah mekanisme untuk memetakan suatu data yang diinputkan berupa text (Plain Text) menjadi output string (checksum) dengan kode acak yang memiliki panjang karakter yang tetap.

Dengan menggunakan fungsi password_hash nantinya hasil data yang dihasilkan akan dihashing satu arah, sehingga data yang sudah dihash tidak akan bisa dikembalikan menjadi text aslinya.

Kenapa warung belajar membahas mengenai fungsi password_hash untuk teknik hashing, bukan menggunakan metode MD5 atau SHA1, hal tersebut dikarenakan banyak sekali web diluar sana yang menyedikan tools untuk melakukan decrypt hasil encrypt dari MD5 ataupun SHA1 sehingga menurut kita ada baiknya anda menghindari penggunaan password dengan encrypt MD5 ataupun SHA1

Contoh kita akan membuat hash dari sebuah sebuah password menggunakan fungsi password_hash(), perhatikan skrip dibawah ini :

<?php
$options = [
    'cost' => 10,
];
$passwordku = "123456";
$password_hash = password_hash($passwordku,PASSWORD_DEFAULT,$options);
echo $password_hash;
?>
 
Jika di echo maka akan menampilkan text seperti berikut :
 
$2y$10$be/sWwWf9KuwAs5piMeeKugXQhvus.rfC00qqYoofH1EN9V7Wu0yC  


Keterangan :

  1. Hasil hash akan berganti ganti, jadi hasilnya pada punya teman – teman ada kemungkinan berbeda.

  2. Itu merupakan hasil password_hash dari string 123456

  3. Baris 5 kita membuat variabel $passwordku dengan nilai “123456” ini adalah bentuk plain text dari password yang akan kita hash nantinya

  4. Baris 6 kita menggunakan fungsi password_hash, pada fungsi ini memiliki 3 argumen antara lain :

    • Parameter pertama adalah text yang akan kita hash, dalam contoh ini adalah angka 123456

    • Parameter kedua adalah algoritma yang akan digunakan untuk melakukan hash, PASSWORD_DEFAULT adalah algoritma bawaan untuk melakukan hash, algoritma tersebut yaitu menggunakan BCRYPT dimana akan menghasilkan output sepanjang 60 karakter, untuk anda yang akan menyimpan hasil string hash kedalam database, disarankan untuk membuat field data pada database menggunakan karakter sepanjang 255 karakter.

    • Parameter ketiga dalam contoh ini adalah variabel $options merupakan variabel array untuk menampung nilai const, nama variabelnya bisa diganti sesuai keinginan anda, tidak harus $options, untuk argumen ketiga ini bersifat optional, anda bisa melewatkan argumen ketiga ini.

  5. Bagian cost sendiri adalah parameter yang digunakan untuk menentukan berapa banyak hash dilakukan, dalam contoh ini karena kita menggunakan BCRYPT (PASSWORD_DEFAULT), jika nilai cost adalah 10 maka proses hashing akan dilakukan sebanyak 2^10 atau 1024 kali.

  6. Baris 7 kita menampilkan hasil dari hash password, sehingga tertulis karakter, $2y$10$be/sWwWf9KuwAs5piMeeKugXQhvus.rfC00qqYoofH1EN9V7Wu0yC

     

    Fungsi password_verify

    Fungsi password_verify adalah fungsi bawaan PHP yang digunakan untuk melakukan verifikasi (mencocokan) data yang telah terhash menggunakan fungsi password_hash().

    Sebagai contoh perhatikan skrip dibawah ini :

     

     <?php

    $password_hash = '$2y$10$be/sWwWf9KuwAs5piMeeKugXQhvus.rfC00qqYoofH1EN9V7Wu0yC';
    $password = "123456";
    if(password_verify($password,$password_hash))
    {
        echo "Password Valid";
    }
    else
    {
        echo "Password Tidak Valid";
    }
    ?> 

     

    Keterangan :

  1. Jika skrip tersebut dijalankan maka akan menampilkan tulisan “Password Valid”
  2. Baris 2 merupakan variabel $password_hash yang berisi password yang sudah kita hash ditutorial sebelumnya.
  3. Baris 3 merupakan variabel $password yang berisi string “123456”, seperti yang kita ketahui ditutorial sebelumnya kita telah melakukan hash terhadap string “123456” menjadi karakter yang disimpan pada variabel $password_hash.
  4. Baris 4 merupakan kita menggunakan perintah password_verify untuk melakukan pengecekan antara password yang telah dihash dan password asal (plain text) apakah sesuai atau tidak.
  5. Fungsi password_verify ini memiliki 2 parameter antara lain :
    • parameter pertama adalah password yang masih berupa plain text, karena itu kita tuliskan variabel $password
    • parameter kedua adalah password hasil hash, karena itu kita tuliskan variabel $password_hash.
  6. Pada baris 4 kita menggunakan perintah if karena nantinya kita melakukan pengecekan apakah passwordnya sesuai antara password hash dan password yang masih berbentuk plain text, kita gunakan if karena jika password sesuai akan mengembalikan nilai TRUE yang akan menampilkan tulisan “Password Valid” (Baris 6) dan jika password tidak sesuai akan mengembalikan nilai FALSE yang akan menampilkan tulisan “Password Tidak Valid” (Baris 10).

Untuk implementasi dari penggunaan password_hash dan password_verifiy ini nantinya akan kita bahas lebih lanjut ditutorial selanjutnya mengenai membuat fitur login di PHP dan MySQL.