1 WEB BASED PROGRAMMING LANJUTAN SISTEM INFORMASI SISTEM KEAMANAN WEBSITE MENGGUNAKAN PHP SECURITY (PAPER PROJECT) Oleh Hendra Sasmerta Kelas 06PDM Un...
SISTEM KEAMANAN WEBSITE MENGGUNAKAN PHP SECURITY (PAPER PROJECT)
Oleh Hendra Sasmerta
1200988913
Kelas 06PDM
Universitas Bina Nusantara Jakarta 2011 Hendra S - WBPL
UNIVERSITAS BINA NUSANTARA
Jurusan Sistem Informasi Semester Genap tahun 2010 / 2011 SISTEM KEAMANAN WEBSITE MENGGUNAKAN PHP SECURITY Oleh:
Hendra Sasmerta
1200988913
Kelas 06PDM Abstrak Perkembangan ilmu pengetahuan dan teknologi yang kian pesat saat ini mendorong kita untuk lebih pintar dalam memanfaatkan teknologi yang ada, terutama perkembangan teknologi website. Perkembangan ini di dukung oleh engine yang kuat, seperti tersedianya bahasa pemrograman PHP yang dapat menghasilkan sebuah website dinamis, dan serta dengan PHP security yang dapat menjamin keamanan suatu data dalam website. Kata Kunci : PHP, Security, Website
Hendra S - WBPL
BAB 1 PENDAHULUAN
1.1.
Latar Belakang Perkembangan ilmu pengetahuan dan teknologi yang kian pesat saat ini
mendorong kita untuk lebih pintar dalam memanfaatkan teknologi yang ada, terutama perkembangan teknologi website. Antusias nya masyarakat saat ini dalam menggunakan teknologi website yang ada sudah kita rasakan, mulai dari ketersediaan situs – situs seperti social network, situs berita, situs jual – beli, situs hiburan dan masih banyak lagi yang lain nya. Hal ini tidak terlepas dari kebutuhan teknologi website yang mampu memberikan keamanan dan kenyamanan sebuah website. Perkembangan website sangat pesat dari website statis beralih ke website dinamis. Para web developer saat ini berusaha mempercantik setiap website – website yang mereka bangun agar tampil menarik dan dengan harapan dapat meningkatkan traffic kunjungan pada website mereka. Sebagai contoh adanya website seperti www.kompas.com adalah buah pencapaian seorang web developer dalam membangun website yang menarik. Situs berita ini menyuguhkan berita secara update yang di kelompokkan ke berbagai macam kategori. Kategori tersebut seperti, bola, entertainment, games, tekno, otomotif, health, properti dan lain nya. Pembagian kategori ini dimaksudkan untuk mempermudah user dalam memilih topik yang akan user baca. Selain memiliki
Hendra S - WBPL
tampilan yang menarik, sebuah website yang baik juga perlu memperhatikan security nya. Penggunaan security di dalam membangun sebuah website sangat dibutuhkan untuk menjaga keamanan sebuah website dari hal-hal yang tidak di inginkan. Keamanan ini bisa meliputi keamanan data. Data merupakan salah satu bagian terpenting yang harus dijaga dalam sebuah website. Saat ini telah banyak bahasa pemrograman web yang dapat membantu para web developer membangun website menarik sekaligus memperhatikan keamanan website nya. Salah satu nya adalah PHP, PHP merupakan server-side scripting yang dirancang untuk membangun website dengan tampilan dinamis. Penggunaan PHP dapat membantu web developer membangun website yang dinamis serta aman. PHP juga tidak mudah di bobol karena PHP berjalan dan di eksekusi di dalam server. Karena seiring perkembangan teknologi maka banyak pula pihak-pihak yang bermaksud meretas keamanan sebuah website, demi keuntungan pribadi. Ini jelasjelas meresahkan pemilik website, oleh karena itu tingkat keamanan menjadi sangat penting dalam membangun website. Seperti pada contoh www.ibank.klikbca.com yang merupakan website untuk nasabah bank, maka bank menerapkan sistem keamanan berlapis pada website nya, dan para wew developer nya membangun website tersebut dengan orientasi keamanan. Tentunya peran PHP sangat membantu dalam mengembangkan system keamanan ini. Oleh karena itu penulis mengangkat PHP security sebagai topik paper yang dirasa sangat perlu kita ketahui bersama. Penulis menyadari betul betapa penting nya keamanan sebuah website terutama dalam menjaga data-data penting agar tidak diretas pihak-pihak tidak bertanggung jawab. PHP menjadi sebuah pilihan ketika seseorang akan membangun website dengan orientasi keamanan website nya, karena Hendra S - WBPL
PHP merupakan open source yang berjalan di server. Dengan menggunakan bahasa pemrograman PHP ini, website yang dihasilkan akan lebih menarik dari segi tampilan, dan lebih secure dari segi keamanan. 1.2.
Ruang Lingkup
Dalam penulisan paper yang berjudul “Sitem Keamanan Website Menggunakan PHP Security ” ini, penulis membatasi ruang lingkup pada : 1. Pengenalan PHP Adalah bagian yang akan berisi pengenalan bahasa pemrograman PHP, sejarah serta berbagai macam fungsi-fungsi dan tipe data. 2. PHP Security Adalah system keamanan website dengan menggunakan bahasa pemrograman PHP sebagai server-side scripting. 3. Implementasi PHP Security Adalah bagian yang berisi implementasi PHP Security pada website yang membutuhkan keamanan data user, khusus nya pada form Login.
1.3.
Tujuan dan Manfaat 1.3.1. Tujuan Adapun tujuan dari penulisan paper ini adalah sebagai berikut : •
Agar kita mengenal bahasa pemrograman PHP dan cara penggunaan nya. Sehingga kita dapat belajar menggunakan PHP sebagai salah satu bahasa pemrograman yang wajib kita ketahui dalam membangun website yang dinamis dalam tampilan dan secure dalam keamanan.
Hendra S - WBPL
•
Dapat merancang website dinamis yang berorientasi keamanan, yang mampu menjaga keamanan data user maupun database nya. PHP security menjadi sangat penting diketahui kita selain hanya sekedar membangun website statis maupun dinamis yang tidak memperhatikan segi keamanan data.
•
Mampu mengembangkan PHP security ke tingkat yang lebih secure dalam membangun sebuah website. PHP merupakan open source yang sangat memungkinkan di modifikasi dalam mengembangkan PHP security.
1.3.2. Manfaat Adapun manfaat dari penulisan paper ini adalah sebagai berikut : •
Mengerti cara menggunakan PHP serta teknik-teknik membangun sebuah website.
•
Dapat membangun website sendiri dengan menggunakan bahasa pemrograman PHP.
•
Mengerti konsep keamanan suatu website dengan bahasa pemrograman PHP Security.
1.4.
Metodologi Penelitian Metodologi yang digunakan dalam penulisan paper ini dibagi menjadi dua,
diantaranya :
Hendra S - WBPL
1. Penelitian Pustaka melakukan pengumpulan, membaca dan mempelajari buku-buku yang berkaitan dengan topik paper yang telah ditentukan. 2. Penelitian Online Melakukan pengumpulan informasi melalui jurnal – jurnal elektronik maupun sumber bacaan elektronik lain nya. 1.5. Sistematika Penulisan Untuk memberikan gambaran mengenai penulisan paper ini, maka penulisan akan dibagi secara sistematis, yaitu : BAB 1 PENDAHULUAN Pada bab ini berisi tentang latar belakang penulisan paper, ruang lingkup PHP, tujuan dan manfaat PHP, metodologi yang digunakan serta sistematika penulisan paper ini.
BAB 2 LANDASAN TEORI Pada bab ini berisi tentang uraian teori – teori pendukung tentang bahasa pemrograman PHP, dan membantu sebagai landasan penulisan paper ini. Teori – teori ini di dapat dari studi pustaka maupun secara online.
BAB 3 PEMBAHASAN Pada bab ini akan dijelaskan secara menyeluruh mengenai pembahasan PHP Security sebagai system keamanan sebuah website yang dinamis.
Hendra S - WBPL
BAB 4 KESIMPULAN Pada bab ini akan dituliskan beberapa kesimpulan yang didapat dari hasil pembahasan, pengembangan sebuah website. Selain itu akan diberikan beberapa saran terkait dengan penerapan penggunaan bahasa pemrograman PHP dalam membangun sebuah website, agar dikemudian hari penggunaan PHP Scripting akan lebih maksimal.
Hendra S - WBPL
BAB 2 LANDASAN TEORI 2.1 Definisi PHP Berdasarkan pendapat Janet Valade (2004,p9) PHP adalah open source yang banyak digunakan dalam membangun web dinamis. PHP kepanjangan dari Hypertext Preprocessor ini bersifat server-side yang berarti pengerjaan script dilakukan di server, kemudian hasilnya dikirim ke browser. PHP dapat digunakan untuk menciptakan dynamic website baik itu yang memerlukan penggunaan database ataupun tidak. Seperti halnya dengan program open source lainnya, PHP di buat di bawah GNU (General Public License). Salah satu kelebihan PHP dari bahasa pemrograman lain nya adalah PHP dapat berjalan pada semua aplikasi CGI, seperti mengambil nilai form, menghasilkan halaman web yang dinamis, serta mengirim dan menerima cookie. PHP juga dapat berkomunikasi dengan layanan – layanan yang menggunakan protocol IMAP, SNMP, NNTP, POP3, HTTP, dan lain-lain. Dan kelebihan PHP yang paling penting adalah kemampuan PHP untuk melakukan koneksi dengan berbagai macam database, salah satunya adalah database MYSQL. Adapun database lainnya yang dapat digunakan oleh PHP adalah : •
Oracle
•
Sybase
•
MSql
•
MySQL
•
Solid
•
Generic ODBC
•
Postgres Sql
Secara umum, penggunaan PHP dalam bahasa pemrograman selalu di awali dengan tag “”. Misalnya : Hello World, This my paper";?> Dalam pernyataan tersebut, adalah tag penutup, dan echo adalah instruksi PHP yang memberitahu PHP untuk melakukan output teks yang mengikutinya. Output yang di tampilkan oleh browser akan seperti ini : Hello World, This my paper
Hendra S - WBPL
Script PHP ini biasanya di apit diantara script HTML lainnya, seperti peletakan nya diantara script . Seperti bahasa pemograman lainnya, PHP sangat mudah di modifikasi agar dapat menghasilkan output yang menarik. Penggunaan PHP saat ini telah berkembang dalam fungsi keamanan, PHP security menjadi sangat penting diketahui oleh setiap web developer. 2.2. Sejarah PHP PHP diciptakan oleh Rasmus Leordorf, seorang programmer Unix dan Perl. Semula PHP hanya digunakan untuk mencatat jumlah pengunjung yang melihat resume Rasmus Lerdorf. Skrip ini selanjutnya dikemas menjadi tool yang disebut “Personal Home Page”. Paket inilah yang menjadi cikal bakal PHP saat ini. Pada bulan September-Oktober 1995, Rasmus menciptakan PHP/FI versi 2.0. Pada versi ini programmer dapat menempelkan kode terstruktur di dalam tag HTML dan kode ini juga bisa berkomunikasi dengan database dan melakukan perhitungan-perhitungan yang kompleks sambil jalan. Pada tanggal 6 Juni 1998, PHP Versi 3.0 berhasil dirilis. PHP 3 ini mempunyai kinerja yang lebih tinggi, berkemampuan object-oriented, syntax highlighting, array multidimensi dan dapat diperluas melalui mekanisme extension. Dukungan dan fitur nya pun jauh bertambah banyak. PHP merupakan salah satu bahasa popular.
2.3. Aplikasi PHP Banyak nya fungsi penggunaan PHP sebagai bahasa pemrograman popular menuntut para web developer kreatif dalam mengembangkan aplikasi berbasis PHP. Beberapa diantara aplikasi PHP tersebut yaitu : •
PHP digunakan sebagai landasan operasi pada pemrograman jaringan berbasis web.
•
PHP digunakan juga untuk pemrograman database.
•
PHP digunakan juga untuk membuat aplikasi web.
Hendra S - WBPL
2.4. Kelebihan dan Kekurangan PHP Sebagai bahasa pemrograman, PHP memiliki kelebihan serta kekurangan dalam penggunaan nya seperti pada bahasa pemrograman lain nya. Kelebihan dan kelemahan nya diantara nya yaitu : Kelebihan : •
PHP menjadi popular karena kesederhanaannya dan kemampuannya dalam menghasilkan berbagai aplikasi web seperti counter, system artikel/ CMS, ecommerce, bulletin board, dan lain-lain.
•
PHP adalah salah satu bahasa server-side scripting yang didesain khusus untuk aplikasi web.
•
PHP termasuk kedalam open source product dan telah mencapai versi 5.
•
Aplikasi PHP cukup cepat dibandingkan dengan aplikasi CGI dengan Perl atau Phyton bahkan lebih cepat di banding dengan ASP maupun Java dalam berbagai aplikasi web.
•
Tersedia baik di Windows maupun Linux, walau saat ini paling efektif di web server Apache dan OS Linux.
•
Sintaks mirip C dan mudah dipelajari.
•
Komunitas yang ramai dan saling membantu, seperti di diskusiweb.com, phpbuilder.com, phpindo.com, dan lain-lain.
•
Berbagai script atau aplikasi yang gratis tersedia.
Kekurangan : •
Tidak detail untuk pengenbangan skala besar.
Hendra S - WBPL
•
Tidak memiliki system pemrograman berorientasi objek yang sesungguhnya.
•
Tidak bisa memisahkan antara tampilan dengan logic dengan baik.
•
Kode PHP dapat dibaca semua orang, dan kompilasi hanya dapat dilakukan dengan tool yang mahal dari Zend.
Hendra S - WBPL
BAB 3 PEMBAHASAN
3.1. Sejarah PHP PHP adalah teknologi yang diperkenalkan tahun 1994 oleh Rasmus Lerdorf. Beberapa versi awal yang tidak dipublikasikan digunakan pada situs pribadinya untuk mencatat siapa saja yang mengakses daftar riwayat hidup onlinennya. Versi pertama digunakan oleh pihak lain pada awal tahun 1995 dan dikenal sebagai Personal Home Page Tools. Terkandung didalamnya sebuah parser engine (mesin pengurai) yang sangat disederhanakan, yang hanya mampu mengolah macro khusus dan beberapa utilitas yang sering digunakan pada pembuatan home page,seperti buku tamu, pencacah, dan hal semacamnya. Parser tersebut ditulis ulang pada pertengahan 1995 dan dinamakan PHP/FI Versiaon 2. FI(Form Interprenter) sendiri berasal dari kode lain yang ditulis juga oleh Rasmus, yang menterjemahkan HTML dari data. Ia menggabungkan script Personal Home Page Tools dengan Form Interprenter dan menambahkan dukungan terhadap server database yang menggunakan format mSQL sehingga lahirlah PHP/FI. PHP/FI tumbuh dengan pesat, dan orang-orang mulai menyiapkan kode-kode programnya supaya bisa didukung oleh PHP. Sulit memberikan data statistic yang akurat, namun diperkirakan pada akhir 1996 PHP/FI sudah digunakan sedikitnya pada 15.000 situs web di seluruh dunia. Pada pertengahan 1997, angka tersebut berubah menjadi 50.000. Pada saat itu juga terdapat perubahan di dalam pengembangan PHP. PHP berubah dari proyek pribadi Rasmus menjadi sebuah tim yang lebih terorganisasi. Parsernya ditulis ulang dari bentuk rancangan awal oleh Zeev Suraski dan Andi Gutmans, dan parser baru ini adalah sebagai dasar PHP Version 3. Banyak kode utilitas yang berasal dari PHP/FI diport ke PHP3, dan banyak diantaranya sudah selesai ditulis ulang secara lengkap. Pada pertengahan 1998, baik PHP/FI maupun PHP3 dikemas bersama dengan produkproduk komersial seperti server web StrongHold buatan C2 dan Linux RedHat, dan menurut survei yang dilakukan oleh NetCraft, kemungkinan PHP digunakan pada lebih dari 150.000 situs web di seluruh dunia. Sebagai pembanding, angka tersebut lebih banyak daripada pengguna server web Enterprise server buatan netscape di Internet . PHP sendiri akan selalu berkembang dari tahun ke tahun. Pada November 1997, dirilis PHP/FI 2.0. Pada rilis ini interpreter sudah diimplementasikan dalam C. Dalam rilis ini disertakan juga modul-modul ekstensi yang meningkatkan kemampuan PHP/FI secara signifikan. Pada tahun 1997, sebuah perusahaan bernama Zend, menulis ulang interpreter PHP menjadi lebih bersih, lebih baik dan lebih cepat. Kemudian pada Juni 1998 perusahaan
Hendra S - WBPL
tersebut merilis interpreter baru untuk PHP dan meresmikan nama rilis tersebut menjadi PHP 3.0. Pada pertengahan tahun 1999, Zend merilis interpreter PHP baru dan rilis tersebut dikenal dengan PHP 4.0. PHP 4.0 adalah versi PHP yang paling banyak dipakai. Versi ini banyak dipakai sebab versi ini mampu dipakai untuk membangun aplikasi web kompleks tetapi tetap memiliki kecepatan proses dan stabilitas yang tinggi. Pada Juni 2004, Zend merilis PHP 5.0. Versi ini adalah versi mutakhir dari PHP. Dalam versi ini, inti dari interpreter PHP mengalami perubahan besar. Dalam versi ini juga dikenalkan model pemrograman berorientasi objek baru untuk menjawab perkembangan bahas pemrograman kearah pemrograman berorientasi objek. Dan sampai pada saat ini PHP telah sampai pada versi 5.6.2. Di versi ini peningkatkan kestabilan seri 5.6.2 dengan lebih dari 60 perbaikan bug fix, beberapa diantaranya berhubungan dengan masalah security.
3.2. Definisi PHP Berdasarkan pendapat Janet Valade (2004,p9) PHP adalah open source yang banyak digunakan dalam membangun web dinamis. PHP kepanjangan dari Hypertext Preprocessor ini bersifat server-side yang berarti pengerjaan script dilakukan di server, kemudian hasilnya dikirim ke browser. PHP dapat digunakan untuk menciptakan dynamic website baik itu yang memerlukan penggunaan database ataupun tidak. Seperti halnya dengan program open source lainnya, PHP di buat di bawah GNU (General Public License). Salah satu kelebihan PHP dari bahasa pemrograman lain nya adalah PHP dapat berjalan pada semua aplikasi CGI, seperti mengambil nilai form, menghasilkan halaman web yang dinamis, serta mengirim dan menerima cookie. PHP juga dapat berkomunikasi dengan layanan – layanan yang menggunakan protocol IMAP, SNMP, NNTP, POP3, HTTP, dan lain-lain. Dan kelebihan PHP yang paling penting adalah kemampuan PHP untuk melakukan koneksi dengan berbagai macam database, salah satunya adalah database MYSQL. Adapun database lainnya yang dapat digunakan oleh PHP adalah : •
Oracle
•
Sybase
•
MSql
•
MySQL
•
Solid
•
Generic ODBC
•
Postgres Sql Hendra S - WBPL
Secara umum, penggunaan PHP dalam bahasa pemrograman selalu di awali dengan tag “”. Misalnya :
Hello World, This my paper";?> Dalam pernyataan tersebut, adalah tag penutup, dan echo adalah instruksi PHP yang memberitahu PHP untuk melakukan output teks yang mengikutinya. Output yang di tampilkan oleh browser akan seperti ini : Hello World, This my paper Script PHP ini biasanya di apit diantara script HTML lainnya, seperti peletakan nya diantara script . Seperti bahasa pemograman lainnya, PHP sangat mudah di modifikasi agar dapat menghasilkan output yang menarik. Penggunaan PHP saat ini telah berkembang dalam fungsi keamanan, PHP security menjadi sangat penting diketahui oleh setiap web developer.
3.3. Instalasi PHP Pada Komputer Sebelum kita dapat masuk dan mempelajari PHP, sebaik nya kita telah melakukan instalasi PHP di dalam personal komputer kita. Kita dapat menggunakan XAMPP. XAMPP adalah perangkat lunak bebas, yang mendukung banyak sistem operasi, merupakan kompilasi dari beberapa program. Selain XAMPP, kita membutuhkan PHP installer, yang dapat di download melalui situs resmi PHP. Berikut adalah cara menginstall PHP versi 5 ke dalam personal computer : •
Jalankan PHP installer
Hendra S - WBPL
Hendra S - WBPL
•
Pilih Apache 2.2 Module
Hendra S - WBPL
•
Pilih lokasi Apache diinstall
Hendra S - WBPL
•
Pilih extension yang diinginkan dalam hal ini GD2 dan MySQL.
Hendra S - WBPL
•
Pilih Finish ketika instalasi telah selesai
Hendra S - WBPL
Setelah proses instalasi selesai, kita perlu juga melakukan instalasi XAMPP yang akan digunakan sebagai server local. Kemudian, apabila XAMPP telah selesai, maka kita telah dapat melakukan pemrograman PHP. Adapun aplikasi yang dapat digunkanan untuk membangun PHP adalah menggunakan : •
Adobe Dreamweaver
•
Microsoft Expression Web 4
3.4. Security Untuk membuat sebuah system yang aman sempurna secara teori adalah tidak mungkin. Seandainnya kita mampu mem-validasi semua input dengan retina scan atau sidik jari, maka kita akan mendapatkan system yang sangat aman, tetapi hal ini akan menyusahkan dari sisi user, dan tidak disukai. Pada saat ini didalam pemrograman, untuk mem-validasi dari data input hanya menggunakan encrypted cookies. Beberapa hal yang perlu diperhatikan dalam langkah percobaan para cracker untuk memboikot akses website kita antara lain : 1. Melalui URL (method GET) 2. Melalui media input yang terdapat dalam form (method POST)
Hendra S - WBPL
Sebagaimana kita ketahui bahwa terdapat 2 cara umum pengiriman variable dalam PHP yaitu GET dan POST sehingga perlu penanganan khusus dalam penerimaan serta pengiriman variable tersebut. Untuk method POST : Method POST merupakan penangkapan variable dari media input yang terdapat dalam FORM. 1. Batasi jumlah karakter (maxlength) Pembatasan jumlah karakter dalam media input sangat penting sehingga tidak dimungkinkan penulisan script seperti javascript pada inputbox tersebut. Contoh implementasi : Titik rawan : Input Login (username dan password), Input search 2. Lapisi dengan penahan kutip atau addslashes() Fungsi PHP ini akan membantu kita menambahkan tanda kutip (‘) pada setiap karakter garing (/) sehingga dapat mencegah timbulnya efek SQL injection. Saya rasa teknik hacking ini cukup populer diantara anda. Penambahan kutip akan membuat garing menjadi bertipe string sehingga tidak dianggap sebagai salah satu perintah query pada MySQL / SQL. Contoh implementasi : addslashes($_POST['_username']) Titik rawan : Form Login 3. Lapisi dengan penahan tag atau htmlspecialchars() Untuk mencegah terjadinya teknik hacking xss atau javascript injection maka ada baiknya kita menambahkan fungsi tersebut. Hal ini akan membuat tag html maupun javascript memiliki tipe data string sehingga tidak akan dieksekusi oleh browser. Apabila script dimungkinkan dalam media input sehingga masuk ke dalam database dan saat browser membuka halaman yang terkontaminasi tersebut maka browser akan melakukan eksekusi terhadap perintah tersebut yang biasanya dalam bentuk javascript. Contoh implementasi : htmlspecialchars($_POST['pesan']) Titik rawan : Form Login, Form Kontak Admin 4. Perhatikan nama media input Sudah saatnya kita berusaha sedikit lebih unik dalam menentukan nama pada media input kita sehingga mempersulit beberapa tools penjahat yang menggunakan library (kamus kata) dalam penentuan nama variable incarannya. Misalnya pada media input login tambahkan garis bawah. Tentu anda memiliki ide sendiri dalam mengimplementasikan hal ini. Contoh implementasi : Titik rawan : Input Login (username dan password) Untuk method GET : Method get merupakan penangkapan variable yang berasal dari URL. 1. Gunakan .htaccess Sebenarnya ini adalah sebuah metode yang menjadikan website kita seakan memiliki struktur direktori yang luas, padahal itu adalah variable. Sehingga memecah
Hendra S - WBPL
konsentrasi dari pengunjung yang berniat isenk. Bila halaman tidak ditemukan maka kita dapat meredirectnya ke halaman 404 kesayangan kita. Implementasi : RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?page=$1 [L] RewriteEngine on RewriteCond %{HTTP_HOST} ^mydomain.com$ [NC] RewriteRule ^(.*) http://www.mydomain.com/$1 [L,R=301] 2. Hindari $_REQUEST() Metode ini digunakan untuk menangkap variable dalam bentuk POST dan GET. Ada kalanya kita membutuhkan metode penerimaan variable dengan menggunakan fungsi ini, tetapi batasilah penggunaannya karena tanpa disadari suatu saat anda akan mendapatkan masalah karena hal ini. Dan bila kita telah terlanjur menggunakannya pada seluruh aplikasi kita maka kita akan sulit untuk merubah (Bisa, dengan memilah mana yang tidak perlu dan benar-benar menggunakan.).
Seorang web developer juga perlu memperhatikan karakteristik dari keamanan sebelum membangun proyek website, yaitu : • Keamanan adalah pengukuran Sangat disayangkan bahwa banyak proyek perangkat lunak daftar keamanan sebagai syarat sederhana yang harus dipenuhi. Apakah aman? Pertanyaan ini adalah sebagai subjektif seperti menanyakan apakah ada sesuatu yang kurang aman. • Keamanan harus diimbangi dengan biaya Sangat mudah dan relatif murah untuk memberikan tingkat keamanan yang cukup untuk sebagian besar aplikasi. Namun, jika kebutuhan keamanan sangat menuntut, karena dengan alasan melindungi informasi yang sangat berharga, maka kita harus mencapai tingkat keamanan yang lebih tinggi dengan biaya meningkat. Biaya ini harus disertakan dalam anggaran proyek. • Keamanan harus diimbangi dengan kegunaan Hal ini sering terjadi bahwa langkah-langkah yang diambil untuk meningkatkan keamanan aplikasi web juga mengurangi kegunaan. Password, timeout sesion, dan kontrol akses semua menciptakan kendala bagi user. Kadang diperlukan untuk memberikan keamanan yang memadai, namun tidak ada satu solusi yang tepat untuk setiap aplikasi tersebut. Hendra S - WBPL
• Keamanan harus menjadi bagian dari desain Jika keamanan bukan bagian dari desain web aplikasi, maka dengan keamanan website tersebut kita ditakdirkan untuk terus-menerus mengatasi kerentanan keamanan baru.
Karakteristik tersebut haruslah di perhatikan oleh web developer, agar penggunaan PHP security dapat berjalan secara optimal di sebuah aplikasi website. Adapun hal-hal mendasar lainnya yang perlu web developer pelajari adalah : 1. Register_Globals ON/OFF PHP Assc. Menyarankan untuk menge-set
Register_Globals pada kondisi OFF, yang artinnya Auto global untuk variable akan OFF. Untuk itu programmer harus mendefinisikan asal dari semua data variable yang masuk, misalnnya dari POST, GET, COOKIES, SESSION, dsb. Pada saat ini para penyedia public hosting menge-set Globals_Register pada kondisi berbeda-beda. Bagi yang tidak mau repot dan pusing karena mendapat pertanyaan dari para konsumen, mereka biasannya akan menge-set pada kondisi ON. Bagi para pengguna public hosting, bisa menge-set Register_global pada file htacces yang biasannya diberikan dalam keadaan kosong dan kita bisa tambahkan setting sesuai keinginan kita. Atau kita juga bisa meng-set menggunakan sebuah PHP script (sebagai emulator) yang ditempatkan pada setiap halaman. 2. Cara install PHP Pada server (di lakukan oleh hosting provider) Ada dua cara untuk
menginstall PHP yang biasa dilakukan, yaitu sbb: a.) PHP sebagai Apache Module b.) PHP sebagai CGI binary. Hal ini akan menghasilkan kemungkinan cara penyerangan oleh hacker yang berbeda pula. 3. File Systems Security. Dalam pemrograman PHP, file yang kita tempatkan di internet
server memungkinkan untuk dijangkau oleh para hacker, misalnnya menghapus, memerintahkan mencetak file yang sangat besar dsb. Untuk itu kita harus memperhatikan pemrograman yang berhubungan dengan acces ke file systems, misalnnya kita harus mempergunakan limited permission kepada user dan megecek varibel input. 4. Database Security PHP Assc. menyarakan untuk memisahkan previlage untuk acces
database bagi owner(superuser- admin) dan user biasa. Hal ini akan memperkecil kemungkinan kerusakan database karena hacker apabila hacker mampu membobol masuk sebagai user biasa. 5. Menyembunyikan PHP pada URL. Hal ini tidak significant, tetapi bisa memperlambat
laju penyerangan para hacker. Hal ini bisa dilakukan dengan menambahkan setting di htacces atau fasilitas lain yang disediakan oleh hosting provider. 6. Setting Error reporting. Para hacker biasanya melakukan penyerangan dengan cara
memunculkan error pada sytems dan mengumpulkan data yang berguna bagi mereka untuk melakukan penyerangan berikutnnya. Sementara dari sisi owner, membutuhkan data error untuk mengetahui kesalahan yang terjadi. Untuk itu kita harus tahu cara
Hendra S - WBPL
mensetting error reporting sesuai kebutuhan kita. 7. Magic quotes Magic quotes adalah prosses yang secara otomatis menolak data yang masuk pada script php. Untuk itu sebaiknnya magic quotes diset pada kondisi OFF dan kita tempatkan script pengganti. Selain itu, web developer juga perlu mengetahui hal-hal yang harus diwaspadai dalam aplikasi web, sehingga web developer dapat mengantisipasi nya. Berikut beberapa hal tersebut : da 5 kelemahan aplikasi web yang harus diwaspadai. Adapun hal tersebut adalah : 1. Remote code execution Penyebabnya adalah kesalahan dalam coding. Akibat yang ditimbulkannya memungkinkan si cracker untuk menjalankan aplikasi secara sewenang-wenang dan mengambil informasi berharga di dalamnya. Agak sulit untuk menemukan code ini saat penetration testing, namun akan ketahuan jika kita membaca ulang source code nya (glegggg… baca ulaaaaaang!!!???). Karena itu perlu dilakukan pengujian aplikasi secara berulang dan teliti untuk mencegah munculnya celah ini. 2. SQL Injection SQL Injection termasuk cara penyerangan yang sudah lamaaaa sekali adanya. Namun para cracker masih banyak yang sering menggunakan cara ini. Cara ini memungkinkan cracker untuk mengambil data dari database. Dampak dari serangan ini bisa berbagai macam, dari cuma sekedar hanya bisa mengambil data, sampai dengan memodifikasi isi database. 3. Format String Vulnerabilities Hal ini disebabkan masalah validasi karakter yang kurang sehingga menjadi celah tersendiri untuk para cracker. Oleh karena itu sebaiknya turut sediakan juga validator untuk karakterkarakter inputan dari user. 4. Cross Site Scripting (XSS) Cara ini adalah dengan menyisipkan sebuah URL jahat pada korban agar dibuka oleh korban. Sehingga saat korban meng-klik URL tersebut, maka cracker akan mengeksekusi kode jahat pada browser korban. Semisal code javascript jahat. 5. Username Enumeration Ini adalah celah yang digunakan cracker untuk melakukan serangan dengan memanfaatkan pesan error yang muncul saat cracker melakukan login test.
Hendra S - WBPL
3.5. Jenis Kemanan dengan PHP Security Permasalahan – permasalahan keamanan haruslah dapat di antisipasi oleh seorang web developer dalam membangun website. Jika seorang web developer ingin membangun website yang mengharuskan pengguna untuk mendaftar itu tanggung jawab web developer untuk menjaga password user aman. Dan jika Anda menyimpan password dalam teks biasa maka tidak melakukan pekerjaan dengan benar. Script PHP menyediakan berbagai cara keamanan yang dapat digunakan seperti MD5, SHA-1, SHA2, SHA-3 atau RIPEMD-160. •
MD5
Adalah fungsi hash kriptografik yang digunakan secara luas dengan hash value 128bit. Pada standart Internet (RFC 1321), MD5 telah dimanfaatkan secara bermacammacam pada aplikasi keamanan, dan MD5 juga umum digunakan untuk melakukan pengujian integritas sebuah file. Langkah-langkah proses pembuatan message digest pada MD5 adalah sebagai berikut : 1. Penambahan bit pengganjal (padding bits) 2. Penambahan nilai panjang pesan semula 3. Inisialisasi penyangga (buffer) MD 4. Pengolahan pesan dalam blok berukuran 512 bit. Berikut pseudocode nya : //Mendefinisikan r sebagai berikut var int[64] r, k r[ 0..15] := {7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22} r[16..31] := {5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20} r[32..47] := {4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23} r[48..63] := {6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21} //Menggunakan bagian fraksional biner dari integral sinus sebagai konstanta: for i from 0 to 63 k[i] := floor(abs(sin(i + 1)) × 2^32) //Inisialisasi variabel: var int h0 := 0x67452301 Hendra S - WBPL
var int h1 := 0xEFCDAB89 var int h2 := 0x98BADCFE var int h3 := 0x10325476 //Pemrosesan awal: append "1" bit to message append "0" bits until message length in bits _ 448 (mod 512) append bit length of message as 64-bit little-endian integer to message //Pengolahan pesan paada kondisi gumpalan 512-bit: for each 512-bit chunk of message break chunk into sixteen 32bit little-endian words w(i), 0 _i _ 15 //Inisialisasi nilai hash pada gumpalan ini: var int a := h0 var int b := h1 var int c := h2 var int d := h3 //Kalang utama: for i from 0 to 63 if 0 _ i _ 15 then f := (b and c) or ((not b) and d) g := i else if 16 _ i _ 31 f := (d and b) or ((not d) and c) g := (5×i + 1) mod 16 else if 32 _ i _ 47 f := b xor c xor d g := (3×i + 5) mod 16 else if 48 _ i _ 63 f := c xor (b or (not d)) g := (7×i) mod 16 temp := d d := c c := b b := ((a + f + k(i) + w(g)) leftrotate r(i)) + b a := temp //Tambahkan hash dari gumpalan sebagai hasil: h0 := h0 + a h1 := h1 + b Hendra S - WBPL
h2 := h2 + c h3 := h3 + d var int digest := h0 append h1 append h2 append h3 //(diwujudkan dalam little-endian)
• SHA Adalah Secure Hash Algorithm adalah suatu algoritma fungsi hash yang dirancang oleh National Security Agency (NSA) dan diperkenalkan oleh NIST sebagai U.S. Federal Information Processing Standard. SHA dapat dianggap sebagai kelanjutan pendahulunya yaitu MD5 yang telah digunakan secara luas. SHA merupakan keluarga fungsi hash satuarah. SHA-1 sudah diimplementasikan dalam berbagai aplikasi dan protokol keamanan seperti TLS, SSL, PGP, SSH, S/MIME, dam Ipsec. Terdapat beberapa macam varian SHA yaitu dimulai dari SHA-0, SHA-1, SHA-224, SHA-256. SHA-1 menerima masukkan berupa pesan dengan ukuran maksimum adalah 264 bit dan menghasilkan message digest yang panjangnya 160 bit, lebih panjang dari yang dihasilkan oleh MD5 yaitu 128 bit. Langkah langkah proses SHA-1 secara garis besar adalah sebagai berikut : 1. Penambahan bit-bit pengganjal (padding bits)
2. Penambahan nilai panjang pesan semula 3. Inisialisasi penyangga (buffer) MD 4. Pengelolaan pesan dalam blok berukuran 512 bit. Pada tahun 2005 Rijmen dan Oswald mempublikasikan serangan pada versi SHA-1 yang direduksi (hanya 53 looping dari 80) dan menemukan kolisi dengan kompleksitas sekitar 280 operasi. Dan pada Februari 2005, Xiayoun Wang, Yiqun Lisa Yin, dan Hongbo Yo empublikasikan serangan yang dapat menemukan kolisi pada veri penuh SHA-1, yang membutuhkan sekitar 269 operasi. Pseudocode untuk SHA-1 adalah sebagai berikut : Initialize variables: h0 = 0x67452301 h1 = 0xEFCDAB89 h2 = 0x98BADCFE h3 = 0x10325476 h4 = 0xC3D2E1F0 Pre-processing: append the bit '1' to the message append k bits '0', where k is the minimum number _ 0 such that the resulting message length (in bits) is congruent to 448 (mod 512) append length of message (before pre-processing), in bits, as 64bit big-endian integer Hendra S - WBPL
Process the message in successive 512-bit chunks: break message into 512-bit chunks for each chunk break chunk into sixteen 32bit big-endian words w[i], 0 _ i _ 15 Extend the sixteen 32-bit words into eighty 32-bit words: for i from 16 to 79 w[i] = (w[i-3] xor w[i-8] xor w[i-14] xor w[i-16]) leftrotate 1 Initialize hash value for this chunk: a = h0 b = h1 c = h2 d = h3 e = h4 Main loop: for i from 0 to 79 if 0 _ i _ 19 then f = (b and c) or ((not b) and d) k = 0x5A827999 else if 20 _ i _ 39 f = b xor c xor d k = 0x6ED9EBA1 else if 40 _ i _ 59 f = (b and c) or (b and d) or (c and d) k = 0x8F1BBCDC else if 60 _ i _ 79 f = b xor c xor d k = 0xCA62C1D6 temp = (a leftrotate 5) + f + e + k + w[i] e=d d=c c = b leftrotate 30 b=a a = temp Add this chunk's hash to result so far: h0 = h0 + a h1 = h1 + b h2 = h2 + c Hendra S - WBPL
h3 = h3 + d h4 = h4 + e Produce the final hash value (bigendian): digest = hash = h0 append h1 append h2 append h3 append h4
Adalah cryptographic hash berdasarkan MD4. RIPEMD yang sudah terbukti memiliki kelemahan dan telah digantikan oleh RIPEMD-128 dan RIPMD-160. Ini adalah fungsi hash kriptografi dirancang oleh Hans Dobbertin, Antoon Bosselaers, dan Bart Preneel. Penggunaan RIPEMD di dalam sebuah PHP dapat memberikan ketahanan keamanan sebuah website di dalam server serta jaringan. Contoh dari RIPEMD adalah : if (argv.length < 2) { println("You didn't specify a file to hash."); println("Use 'java RIPEMD160 -file '"); throw new Exception("You didn't specify a file to hash"); } String filename = argv[1]; JSAFE_MessageDigest digestor = null; String inputFileName = null; int blockSize = 4096; byte [] inputBlock = new byte[ blockSize ]; File inputFile = null; FileInputStream fis = null; println("Beginning RipeMD Example."); // When using a FIPS 140 compliant version of the toolkit, // check that the required power-up self-tests passed // before proceeding. if (CryptoJ.isFIPS140Compliant() && !CryptoJ.selfTestPassed()) { println("Crypto-J is disabled, power-up self-testing failed"); return; } Semua tesebut adalah merupakan teknik security pada PHP. Yang secara umum digunakan pada form login sebuah website. Teknik tersebut merupakan kriptografi dan encrypt suatu inputan yang di terima dari user. Dengan menggunakan teknik ini, sangat sulit bagi seorang cracker meretas halaman login website.
Hendra S - WBPL
3.6. PHP Security pada Form Login Sebuah website yang baik adalah memperhatikan interface serta keamanan nya. Begitu pula dengan keamanan suatu form login, yang digunakan seorang user untuk masuk ke dalam website tertentu. Sangat banyak website saat ini yang mengharuskan setiap user menjadi member untuk dapat mengakses website tersebut. Hal ini jelas di awali dengan Login ke sebuah form yang telah disediakan. Akan menjadi sangat tidak aman apabila form login tersebut dapat diretas oleh cracker yang bermaksud jahat, oleh karena itu seorang web developer perlu memperhatikan hal ini. Saat ini, PHP telah memberikan berbagai solusi pengembangan keamanan dengan menggunakan script nya. Contoh form login sebuah website :
Login dan juga Logout hampir selalu ada dalam semua sistem / aplikasi yang didevelop dengan bahasa pemrograman tertentu, dalam kasus kali ini penulis akan memberi contoh membangun form login dengan framework PHP CodeIgniter. Konsep dasar dari Login adalah mencocokkan username dan password yang dimasukkan oleh user dengan daftar username+password yang tersimpan dalam database. Dengan alasan keamanan, biasanya password disimpan dalam database dengan menggunakan fungsi MD5. MD5 adalah salah satu fungsi hash (satu arah) yang cukup terkenal dalam kriptografi, biasa digunakan untuk autentifikasi user. Sedangkan Logout memiliki konsep dasar yang cukup sederhana, yaitu dengan men-destroy session dari user yang login tersebut. Untuk membangun sebuah form login, kita perlu membuat database terlebih dahulu. Dan kemudian dilanjutkan membuat form dengan script berikut ini : <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"> Login Paper
Setelah membuat script seperti di atas, maka kita harus menyimpan nya. Dan dapat diberi nama login_view.php. Kemudian masukkan file ini ke dalam folder di dalam folder htdocs yang ada pada XAMPP. Selanjutnya kita akan membuat controller Login dan Logout nya. load->helper('url'); $this->load->helper('form'); $this->load->library('form_validation'); $this->load->library('session'); } //index for showing the login form function index() { $this->load->view('login_view'); } //this function will do the login process function proseslogin() { $username = $this->input->post('username'); //read the username that filled by the user $password = $this->input->post('password'); //read the password that filled by the user $passwordx = md5($password); //this is for change $password into MD5 form //the query is to matching the username+password user with username+password from database $q = $this->db->query("SELECT * FROM tb_user WHERE username='$username' AND userpass='$passwordx'"); if ($q->num_rows() == 1) { // if the query is TRUE, then save the username into session and load the welcome view $nama = $q->row()->username; $this->session->set_userdata('username',$nama); Hendra S - WBPL
$data['welcome'] = "Welcome $nama"; $this->load->view('welcome_view', $data); } else { // query error $data['error']='!! Wrong Username or Password !!'; $this->load->view('login_view', $data); } } //to do logout process function logout() { $this->session->sess_destroy(); $data['logout'] = 'You have been logged out.'; $this->load->view('login_view', $data); } } ?> Simpan dengan nama login.php dalam folder yang sama pada login_view.php. Selanjutnya kita akan membuat pesan sukses apabila form login berhasil masuk, berikut ini : <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"> Login with CI
Kemudian simpan dengan nama welcome_view.php dalam folder yang sama di htdocs yang ada pada XAMPP. Setelah selesai pada tahap scripting, sekarang kita dapat coba menjalankan nya dengan mengaktifkan XAMPP yang telah kita install sebelum nya. Masukkan http://localhost/namafolder/login.php, maka apabila berhasil kita akan mendapati tampilan seperti ini :
Hendra S - WBPL
Apabila tampilan yang muncul seperti di atas, kita tinggal memasukkan username dan password yang telah kita setting sebelum nya di dalam database. Dan, apabila password serta username salah, maka aka nada pesan salah pada interface form login. Seperti pada berikut :
Tampilan di atas adalah tampilan yang akan muncul apabila username atau password yang di input salah. Demikian dengan website lain pada umumnya yang menggunakan MD5 sebagai salah satu security dalam PHP. Semua teknik yang dilakukan pada website lainnya, khusus nya form login adalah sama, yaitu dengan mengenkripsi password dan username user. MD5 maupun SHA dapat menjadi solusi di dalam PHP Security. Semua dapat digunakan untuk hal keamanan. Karena keamanan yang baik akan menciptakan kenyamanan bagi user.
Hendra S - WBPL
BAB 4 KESIMPULAN KESIMPULAN Berdasarkan paper yang telah penulis buat mengenai “Sistem Keamanan Website Menggunakan PHP Security” serta membahas bagian penting keamanan dan system keamanan PHP dengan menggunakan PHP Security, maka penulis menyadari betul bahwa sangat penting nya suatu keamanan website. Hal ini sangat perlu guna menjaga ketahanan website juga menjaga kepercayaan user terhadap kita. Seorang web developer kedepannya haruslah memperhatikan keamanan website sebagai hal yang serius, sehingga diharapkan terhindar dari hal-hal yang tidak di inginkan. Penulis yang dalam hal ini masih dalam tahap pembelajaran, termasuk mempelajari tingkat keamanan pada PHP, merasa masih perlu belajar lebih dalam agar dapat membangun website yang menarik, dinamis, dan juga memiliki tingkat keamanan yang tinggi.
Riwayat pendidikan dan kursus : SDN 04 Gisting, Lampung (1995 - 2001) SMP Muhammadiyah 1, Lampung (2001 - 2004) SMA Muhammadiyah 1, Lampung (2004 - 2007) Universitas Bina Nusantara (2008 - sekarang) Jurusan Sistem Informasi Pengalaman kerja