.

Thursday 8 May 2014

Prepared Statement di dalam PHP dan mySQLi

Prepared Statement di dalam PHP dan mySQLi

Prepared statement adalah antara cara yang selamat dan cekap dalam melaksanakan (execution) penyataan (statement) SQL ke pelayan pangkalan data (database). Ianya menjadikan penyataan SQL sebagai satu template, dimana nilainya boleh ditukar-tukar semasa perlaksanaan penyataan. 

Secara asasnya, prepared statement berfungsi melalui 2 langkah iaitu:
  1. Penyediaan (prepare) : Template penyataan SQL akan dihantar ke pelayan data pangkalan.
  2. Perlaksanaan (execute) : pelayan akan melakukan pemeriksaan pada syntax dan  initializes sumber dalaman pangkalan data untuk digunakan nanti (boleh digunakan berulang kali).

Apa kelebihan menggunakan prepared statement?

Terdapat beberapa kelebihan yang akan menjadi sebab utama mengapa anda perlu menggunakan prepared statement di dalam kod anda. Antara kelebihannya adalah:
  1. Keselamatan yang lebih terjamin (kurang risiko kepada suntikan SQL)
  2. Prestasi yang lebih baik
  3. Cara yang lebih sesuai untuk menulis kod 
Sebagai contoh, kebiasaannya pengaturcara akan menulis kod asas MySQL seperti di bawah untuk melaksanakan MySQL query di dalam PHP.


Dengan menggunakan kod ini, tidak menjadi masalah bagi anda untuk mendapatkan akses dan data dari pangkalan data, cuma ianya sangat merbahaya, kerana ianya terdedah kepada serangan suntikan SQL. Seterusnya, mari kita lihat pula kod prepared statement di bawah:


Apa yang dilaksanakan dalam kod ini adalah, pertamanya mencipta (create) objek mySQLi dan menghubungkannya dengan pangkalan data. Kemudian, ianya mencipta satu prepared statement dan mengikat (bind) paramater yang dihantar bersama-sama prepared statement tadi. Langkah seterusnya adalah melaksanakan kenyataan dan setelah selesai, tutup hubungan mySQLi. Mudah bukan? Tetapi. . .

Dimana ciri-ciri keselamatannya?

Langkah keselamatan diambil adalah semasa penyediaan prepared statement dan mengikatnya bersama parameter. 


Jika anda perhatikan,kod ini menggunakan simbol ‘?’ sebagai nilai untuk username dan password semasa menyediakan prepared statement. Ianya memisahkan logik SQL daripada data dan bertindak sebagai pemegang tempat (placeholder) sementara untuk username dan password sehinggalah parameter dihantar untuk diikat bersama prepared statement. Ianya berbeza jika dibandingkan dengan cara kebiasaanya, query dan data dihantar serentak. Secara ringkasnya, didalam prepared statement, query dan data akan dihantar ke pelayan SQL secara berasingan, dan ianya dapat mengelakkan SQL Injection yang memerlukan query dan data dihantar serentak untuk melakukan serangan.

Kesimpulannya, penggunaan prepared statement dilihat mampu memberikan kebaikkan dari segi peningkatan keselamatan, prestasi dan juga gaya penulisan kod pengaturcara. Antara kebaikkan utamanya adalah dapat mengelakkan serangan SQL Injection.

Pihak Two Sigma Technologies amat mengambil berat mengenai isu keselamatan dalam pengaturcaran PHP, dengan itu kami memperkenalkan sebuah kursus yang sentiasa mendapat sambutan hangat daripada para peserta, iaitu kursus PHP Secure Programming. Kursus ini akan mendedahkan kepada peserta mengenai teknik-teknik godaman termasuklah teknik SQL-Injection, XSS beserta cara-cara mengatasinya dengan menulis kod PHP yang selamat.

Sekiranya anda berminat untuk kami mengendalikan Kursus PHP Secure Programming di tempat anda, sila hubungi kami di talian 03-61880601 ataupun menerusi emel sales@2-sigma.com  untuk mendapatkan kandungan kursus atau keterangan yang lebih lanjut. Selain itu anda juga boleh melawati http://www.training.2-sigma.com/ untuk mendapatkan  tarikh-tarikh kursus yang terdekat.

2 comments:

  1. kalau untuk kod $stmt->fecth(); itu berguna untuk apa?

    ReplyDelete
  2. untuk mengambil value apabila sql statement dilarikan

    ReplyDelete