Kamis, 04 November 2010

12.Menangani MySQL Injection pada PHP

Kalau kamu sudah menggunakan database MySQL misalnya untuk login member, maka kemungkinan besar web kamu bisa dimasukkin oleh orang yang tidak berhak menggunakan sebuah teknik hack yang dikenal dengan MySQL Injection. PHP menyediakan sebuah fungsi yang menarik untuk mengatasinya. Mari kita lihat...
Sebelum kita belajar menggunakan fungsi PHP tersebut, ada baiknya saya coba sedikit ceritakan tentang MySQL Injection terlebih dahulu.

Pada dasarnya, MySQL Injection adalah sebuah cara memanipulasi query yang kita kirimkan ke tabel database MySQL kita sehingga query yang kita kirimkan diartikan lain oleh script PHP dan database MySQL kita.

Manipulasi ini bisa dilakukan untuk sekedar login secara ilegal, atau lebih parah lagi bisa digunakan untuk mendelete isi tabel yang kita miliki. Bahaya kan? Secara sederhana, caranya bisa saya gambarkan seperti ini.

Misalnya aja kamu memiliki query form login user sederhana menggunakan PHP dengan kode seperti ini:

$nama = "bambang";
$query = "SELECT * FROM pelanggan WHERE user = '$nama'";
echo "Normal: " . $query . "
";

// user input yang menggunakan MySQL Injection
$nama_manipulasi = "' OR 1'";

// Query untuk perbandingan
$query_manipulasi = "SELECT * FROM pelanggan WHERE user = '$nama_manipulasi'";

// tampilan query dengan injection
echo "Injection: " . $query_manipulasi;
Tampilan hasil eksekusi adalah seperti ini:

Normal: SELECT * FROM pelanggan WHERE user = 'bambang'
Injection: SELECT * FROM pelanggan WHERE user = '' OR 1''

Tampilan query pertama normal-normal aja, database akan memilih pelanggan yang bernama bambang.

Namun demikian, MySQL Injection telah membuat query kita melakukan hal yang berbeda. Hanya dengan menambahkan tanda kutip tunggal, si pemanipulasi telah mengakhiri string query kita dengan sukses sehingga menjadi seperti ini:

$user = ''

dan kemudian menambahkan OR 1 ke dalam statemen WHERE kita yang membuat artinya menjadi SELALU BENAR. Perhatikan hasil akhir query kita setelah di inject:

$user = '' OR 1

SELALU BENAR!

Jika script PHP kita sebelumnya hanya mengijinkan pelanggan yang ada dalam tabel MySQL saja yang masuk (dalam kasus ini yang bernama bambang), maka dengan trik ini, kita tidak memerlukan nama pelanggan untuk bisa masuk ke dalam login member. Karena dengan klausul OR 1, hasil query kita selalu benar.

Ok deh, dalam tulisan selanjutnya kita akan bahas cara menanganinya.

Mudah-mudahan bermanfaat.

web asal
Prothelord.com

13.Cara setting error message PHP pada php.ini

Minggu lalu kebetulan saya membantu salah seorang teman programmer untuk menyelesaikan aplikasi PHPnya dengan cepat. Saya agak heran mengapa pengerjaannya agak tersendat selama ini. Setelah saya perhatikan, saat dia selesai membuat script, kemudian hanya mendapati layar kosong alias blank saat script PHPnya dijalankan. What's wrong? Sebagaimana layaknya pengerjaan script pada proses development, teman saya itu mengerjakan di PCnya yang sudah diinstall XAMPP.
Nah herannya,screen browsernya blank ketika mengekesekusi file php yang dibuatnya. Saya langsung curiga kalau setting display erroornya dibuat off. kebayang kan, memperbaiki script tanpa mengetahui petunjuk sedikitpun di mana letak kesalahannya.... fiuhhh mengerikan. Kalau saya sendiri pasti udah putus asa jauh jauh hari sebelumnya ya :).
Nah, kemudian saya minta dia mengecek file php.ini yang ada di direktori xampp-nya. Setelah di buka, saya minta cek di baris yang ada tulisan display_errors, dan ..... benar saja, isinya masih off.
Langsung saja saya minta diubah menjadi on, dan restart server XAMPP-nya...
Dan hasilnya, errornya langsung bermunculan, ternyata penyebab scripnya ndak jalan adalah query MySQLnya masih kurang tepat....
Ok, pelajarannya adalah, jangan pernah lakukan development dan debugging script tanpa error message ya :).
Perlu diingat, bahwa untuk server komersial, memang sebaiknya setting error messagenya dibuat off. Tujuannya adalah:
1. Kenyamanan pengunjung, agar mereka tidak perlu melihat pesan error yang mengerikan itu.
2. Mempersulit proses hack di website kita.
Mudah-mudahan bermanfaat.

web asal
Prothelord.com

14.Forwarding Halaman Pakai PHP

Another letter yang menanyakan tentang forwarding halaman menggunakan PHP.
Ini emailnya:

Eh, mau nanya nih, kalo buka

http://www.juventus.com

itu kan ada yang bahasa Indonesia, terus kalo di klik, pas loading jadi juventus.co.id. Kok bisa gitu ya?

Mestinya MU Arsenal Liverpool juga pake bahasa Indonesia. Korea Jepang saja ada.



Jawaban saya seperti ini:

Nampaknya mereka menggunakan fasilitas redirect berdasarkan IP pengunjungnya.
Kita bisa mengetahui alamat IP pengunjung menggunakan PHP dan kemudian mencari negara asal alamat IP tersebut.
Jika misalnya ditemukan negaranya adalah Indonesia, maka pengunjung tersebut akan langsung di redirect ke co.id.
Secara singkat kira2 begitu .

Nah, sebagai tambahan, PHP memang memiliki fasilitas untuk mengetahui alamat IP pengunjung website kita. Kita bisa menggunakan variabel $SERVER['REMOTE_ADDR'] untuk mengetahui alamat IP tersebut.
Langkah berikutnya adalah mencari negara asal IP tersebut.

web asal
Prothelord.com

1.OOP PHP

OOP PHP adalah kependekan dari Object Oriented Programming PHP. Tutorial ini, seperti juga tutorial di Prothelon.com lainnya ditujukan buat kamu yang masih newbie dengan Pemrograman berbasis Obyek (OOP).

Saya menulis tentang OOP PHP ini karena beberapa waktu yang lalu ada yang minta melalui shout box kalo ndak salah namany Farah.

Ok Farah, kita mulai yah.

PHP selain mendukung pemrograman terstruktur yang sudah kamu pelajari di tutorial dasar PHP, juga mendukung Object Oriented Programming atau yang juga dikenal sebagai OOP. Meskipun dukungan terhadap OOP pada PHP tidak sekuat Java, tetapi PHP sudah cukup mature dalam mendukung OOP. Kamu bisa memperoleh banyak class yang kamu perlukan di internet untuk membuat program kamu.

Sebelumnya perlu saya sampaikan, bahwa pembuatan program berbasis OOP ini akan sangat terasa manfaatnya kalau kamu membuat program berskala besar atau program-program yang nantinya akan sering kamu ulangi pembuatannya dengan beberapa penyesuaian kecil, namun untuk program berskala kecil, mungkin lebih baik pake yang pemrograman terstruktur.

Object Oriented Programming adalah sebuah cara membuat program berbasis obyek, artinya kamu harus mengubah cara berpikir kamu menjadi berbasis obyek. Namun sebelum kita melangkah labih jauh, kamu akan saya kenalin dulu dengan beberapa istilah baru yang akan sering kamu gunakan dalam OOP yaitu class, object, encapsulation, inheritance dan polymorphism.

Nah, sebenarnya kemampuan sebuah bahasa pemrograman dalam mendukung OOP ditentukan oleh kemampuan mereka dalam mendukung kelima istilah yang sudah saya sebutkan dalam paragraf sebelumnya itu. Mungkin juga kamu pernah atau akan bertanya-tanya apa bedanya OOP dengan fungsi. Nah nanti akan kita lihat perbedaannya yah.

Ok, sampai di sini dulu bagian pertama OOP PHP ini.

Sampai ketemu di tutorial tentang perbedaan Class OOP dan Fungsi PHP. Penasaran kan?

web asal
Prothelord.com

2.Perbedaan Class OOP dengan Fungsi

Dalam tutorial OOP PHP sebelumnya, kita sudah belajar tentang 5 istilah kunci dalam OOP. Namun sebelum kita membahas lebih lanjut kelima istilah tersebut, kita akan mempelajari dulu konsep OOP alias Object Oriented Programming. Konsep ini tentu saja berlaku umum baik untuk PHP maupun pemrograman lain yang mendukung OOP seperti Java.

Ingat ini. Sebenarnya OOP adalah cara berpikir dalam membuat program.

Sebenarnya dalam banyak hal, program kita tidak akan berbeda jauh dengan metode terstruktur yang mungkin selama ini kita kenal. Namun yang penting adalah cara berpikirnya. Ingat kata kunci ini: Berpikir secara obyek. Gampangnya kalau kita membuat sebuah program, maka kita akan membuat berbagai class yang akan sering kita gunakan dan class itu akan kita buat menjadi obyek itu bisa kita kembangkan lagi nantinya.

Untuk menjelaskannya, biasanya berbagai buku atau tutorial akan menggunakan contoh obyek seperti kucing, rumah atau mobil. Karena penjelasan itu memang menggambarkan proses pembuatan program berbasis OOP yang mirip cara berpikir kita sehari-hari. Kalo ndak percaya, coba aja beli buku OOP atau baca tutorial OOP.

Namun saya pernah merasakan sendiri bahwa penjelasan langsung dengan contoh riil di dunia nyata tersebut menjadi contoh abstrak di dunia pemrograman. Lha iya kan, masak kita akan membikin kucing atau rumah atau mobil dengan PHP? Makanya saya coba njelasinnya sedikit berbeda. Saya akan mulai bukan dari contoh riil yang malah jadi abstrak tadi, tetapi dari membandingkan beberapa cara berpikir dalam membuat program. Selanjutnya baru kita lihat proses berpikir OOP dengan membandingkannya ke kehidupan sehari-hari tadi.

Mudah-mudahan bisa lebih clear.

Ok, untuk mempermudah membayangkan perbedaan cara membuat program biasa dan OOP, saya akan sampaikan beberapa perbandingan antara cara berpikir dalam pemrograman. Siap?

Di awal karir kita (kita? Lu aja kali, gua kagak. Awas jangan ngomong gitu yah :)), umumnya kita akan membuat program tanpa fungsi. Misalnya kita akan membuat sebuah program kalkulator. Dalam contoh ini kita akan fokus dalam pembuatan tampilannya.

Bayangkan sebuah kalkulator. Udah? Nah, kita pasti perlu membuat tampilan depannya yang mirip kalkulator kan? Di mana ada beberapa tombol angka dan operasi matematikanya serta layar yang akan menampilkan apapun yang kita pencet di tombol itu dll. Nah, dalam pembuatan program kalkulator tersebut, kita akan membuat sebuah program panjang yang menuliskan semua kode untuk membuat tampilan. Mulai dari kotak luarnya, diteruskan layarnya, tombol 1, tombol 2, tombol 3, dst, serta tombol operator -, +, x dan : serta sebuah tombol = yang Anda buat lebih besar dari yang lain karena sering dipakai.

Nah, setelah Anda agak canggih dalam membuat program, Anda pasti tahu bahwa pembuatan tombol itu adalah proses berulang yang sebenarnya bisa kita buatkan fungsi dengan variabel input tulisan yang akan ditampilkan. (Ingat contoh ini sangat disederhanakan lho, jadi jangan protes). Maka kita akan membuat fungsi tombol tersebut. Di sini kita akan membuat 2 jenis fungsi yaitu tombol kecil dan tombol besar (tombol besar tentu saja buat si “sama dengan” tadi itu).

Kemudian, setelah belajar OOP, maka kamu akan membuat sebuah sebuah class yang bernama tombol. Class ini sudah kita desain agar dapat kita bikin obyek tombol berbagai ukuran, warna, tulisan yang menyertainya dan event yang terjadi kalau kita pencet tuh tombol. Dengan OOP, maka class kita tadi akan memiliki sifat-sifat pemrograman OOP yang tentu saja akan membantu kita untuk membuat program berbasis PHP.

Penjelasan mengenai perbedaan antara class dengan fungsi secara sederhana adalah pada sifat-sifat OOP yang sudah pernah kita sebutkan dalam tutorial OOP sebelumnya.

Dengan adanya sifat-sifat itu, maka pembuatan program akan jauh lebih mudah. Contohnya, kalau kamu membuat program dan memerlukan fungsi tertentu, maka kamu bisa membuat sendiri fungsi kamu atau akan lebih mudah dengan mencari di Internet. Setelah kamu download, maka kamu akan perlu mempelajari fungsi itu dan cara penggunaannya serta bila perlu memodidikasi core programnya. Ini berbeda dengan class pada OOP. Dengan class, kita cuman butuh tahu sifatnya aja.


Penjelasan mengenai class ini akan membawa kita pada penjelasan yang menggunakan obyek sehari-hari.

Ok, mudah-mudahan penjelasan dengan membandingkan ini bisa membantu kamu buat sedikit memahami OOP. Berikutnya kita akan belajar konsep berpikir dalam OOP dengan contoh obyek sehari-hari. Ini kamu perlukan untuk menyambung penjelasan tentang sifat class tadi. Penting lho. So don’t miss it.

web asal
Prothelord.com

3.Konsep OOP

Dalam tutorial OOP PHP sebelumnya, kamu udah belajar tentang perbedaan Class dan Fungsi dalam konsep OOP dibandingkan pemrograman terstruktur yang pernah kamu pelajari selama ini. Sekarang, saya akan melanjutkan dengan penjelasan standar tentang konsep OOP yang umumnya memberi contoh dengan membuat asosiasi dengan benda-benda sehari-hari.



Saya pernah mendengar dan membaca beberapa asosiasi obyek pada OOP dengan kucing, mobil dan rumah dalam usaha untuk menjelaskan konsep OOP. Dari semua itu, menurut saya yang paling mudah di pahami adalah asosiasi dengan pembuatan rumah. Jadi kita akan mulai penjelasan konsep OOP kita dari sana sajalah (ya sajalah, masa saja dong).


Ok, mari kita mulai.


Bayangkan kamu dah cukup punya uang dan pengen membangun sendiri rumah idaman kamu, bukannya membeli jadi dari developer. Di sini saya asumsikan kamu udah beli tanahnya dan siap membangun.


Kamu pergi ke toko bangunan dan membeli semua bahan yang kamu perlukan yaitu batu bata, semen, pasir, kayu, dan material lainnya. Setelah semua siap, kamu berencana akan menggunakan jasa tukang membuat bangunan untuk membangun rumah kamu. Tentu saja tukang tersebut dengan bayaran yang sudah kalian sepakati akan mulai membangun rumah kamu.


Mereka mencampur air dengan semen dan pasir agar menjadi adonan semen yang kemudian akan digunakan untuk merekatkan batu bata dan membentuk dinding rumah kamu. Setelah dinding siap, mereka mulai memasang jendela kayu, pintu kayu dan atap dari genteng. Setelah semua terpasang, mereka akan mulai dengan proses finishing. Dinding akan di perhalus dan di cat, serta lantai dipasangin keramik. Semua diperbagus agar rumah kamu berdiri dengan indahnya.


Nah, proses pembangunan rumah itu sangat baik untuk menggambarkan konsep OOP. Perhatikan, rumah kamu itu tadi disusun dari berbagai macam obyek seperti batu bata, semen, air, cat dan sebagainya.


Kalau kamu pernah tanya sama tukang yang membangun rumah kamu memgenai susunan kimiawi semen, kira-kira bagaimana reaksinya? Yak tepat sekali, pada umumnya mereka akan menatap kamu dengan pandangan heran dan mungkin sedikit kesal. Yang pasti, hampir semua tukang bangunan tidak akan mengenal susunan kimiawi semen. Si tukang bangunan itu juga kemungkinan besar belum permah membuat batu bata, susunan kimiawi air, cat dan bagaimana proses pembuatan keramik untuk lantai rumah kamu.


Fakta ini tolong diingat: Rumah kamu dibangun dari berbagai obyek yang tidak diketahui cara pembuatan dan susunan kimiawinya oleh si tukang bangunan. Tukang bangunan itu tidak mengetahui detil dari bahan bangunan yang dia pergunakan. Dia tidak mengerti detil obyek yang dia gunakan. Si tukang hanya tahu cara menggunakannya tapi sudah bisa membuatkan sebuah rumah yang indah buat kamu.


Dengan pemrograman OOP, kamu kemungkinan besar akan melakukan hal yang sama dengan tukang bangunan itu. Kamu akan berkeliaran di Internet mencari berbagai obyek (ini nanti akan kita sebut class) yang kamu perlukan untuk membuat program idaman kamu jadi.


Kamu tidak perlu tahu detil obyek/class itu. Kamu cuma perlu tahu cara menggunakannya dalam program. Gitu tuh konsep OOP.


Selesai.


Kedengaran menyenangkan? Kita akan lanjutkan dalam tutorial berikutnya yang masih akan menjelaskan tentang konsep OOP yaitu Class PHP dan Object PHP.

web asal
Prothelord.com

4.Class PHP

Penjelasan gamblang Class PHP dan bedanya dengan Object PHP yang akan kamu temuin dalam tutorial ini akan membuat kamu paham betul apa itu class dan object. Kedua istilah itulah yang menjadi pondasi dasar bagi Object Oriented Programming (OOP) dalam PHP.


Kita mulai dengan apa itu object PHP. Object dalam PHP atau OOP dapat digambarkan sebagai realisasi nyata dari class. Inget ya, object adalah realisasi dari class.


Kita coba balik lagi ke contoh pada tutorial sebelumnya. Kita akan membangun sebuah rumah yang tersusun dari berbagai object. Ada semen, batu bata, keramik, genteng, pintu, jendela dan sebagainya. Sekarang kita fokus ke jendela rumah kita ya.


Bayangkan jendela ruang tamu rumah kita itu ukurannya 1,5 m x 1,5 m terbuat dari kayu jati yang tahan lama dan penuh dengan ukiran yang indah. Tentu saja dilengkapi kaca kitam yang akan menahan sebagian panas matahari yang mencoba menerobos ke dalam rumah kita.


Jendela kamar memiliki ukuran yang lebih kecil yaitu 0,5 m x 1,5 m. Terbuat dari kayu jati juga tapi tanpa ukiran dengan kaca polos biasa.


Jendela dapur, karena keterbatasan biaya dibuat sangat kecil yaitu 0,5 m x 1 m dan hany aterbuat dari kayu mahoni. Tentu saja tanpa ukiran.


Nah, jendela ruang tamu, jendela kamar dan kendela dapur itu adalah object dalam konsep OOP.


Classnya, adalah jendela. Sebuah kelas hanya mendefinisikan apa itu jendela dan bagaimana sifat-sifatnya.


Class jendela dalam contoh ini tentu saja akan memiliki beberapa parameter yaitu berapa ukurannya, terbuat dari kayu apa, berukir atau tidak serta jenis kaca yang digunakan.


Ya..ya, saya ngerti, ini belum terlalu jelas. Mungkin timbul pertanyaan tentang bagaimana kalau kita udah bikin class PHP yang didefinisikan seperti tadi, terus muncul lagi kebutuhan baru dalam class PHP jendela kita itu. Misalnya?


Misalnya kita ternyat perlu membuat definisi baru mengenai arah membuka jendelanya. Apakah ke samping, ka atas atau ke bawah.


Nah, hal-hal seperti itu nanti akan bisa dilakukan dengan menggunakan sifat-sifat class yang udah pernah kita sebutkan sebelumnya (itu tuh yang polymorphism, inheritance, dll). Ini akan kita bahas lagi nanti. Don’t worry.


Ingat, class PHP selalu dapat dikembangkan.


Jadi, dari tutorial ini kamu udah mulai dapat gambaran yang mudah-mudahan cukup jelas tentang class dan object pada PHP.


Pada prakteknya nanti, kamu akan berburu class PHP di internet, mempelajari sifat-sifatnya dan menjadikannya object PHP sesuai kebutuhan dalam program PHP kamu.


Gitu.


Untuk memperjelas, kamu bisa baca juga tutorial tentang perbedaan Class/object PHP dengan fungsi PHP atau konsep abstrak OOP PHP dulu.


Dah dulu ya, sampai ketemu di tutorial OOP PHP berikutnya yang akan membahas tentang sifat-sifat class PHP.

web asal
Prothelord.com