PHP merupakan Hypertext Prepocesor yang banyak digunakan untuk membuat website lengkap dengan databasenya. Dalam membuat website banyak masalah yang sering muncul. Salah satu masalah website yang sudah online adalah serangan dari luar sistem. Penyerang dapat menyerang melalui berbagai cara, salah satu cara yang sering digunakan adalah SQL Injection.
Banyaknya website yang menuliskan sql injection tutorial juga menjadi pemicu orang untuk mencoba melakukan serangan. Walaupun seringkali bukan untuk merusak, tetapi hanya untuk menguji cara yang telah dituliskan di sql injection tutorial tersebut. Seiring dengan naiknya traffick pengunjung website, seringkali intensitas serangan juga semakin meningkat.
Agar dapat mengatasi sql injection maka programmer php harus mengetahui cara yang tepat agar mampu melindungi website yang sudah dibangun dengan susah payah agar tidak mudah diretas. Bila kita teliti lebih dalam, sql injection dapat dilakukan melalui parameter yang dikirim kemudian ditangkap dan kemudian query sql yang akan menjalankannya. Bila parameter tidak cocok dengan query yang menangkapnya, maka sql injection akan susah dilakukan.
Cara agar website tidak mudah diserang menggunakan SQL Injection antara lain menggunakan parameter query dan prepare steatments. Alasannya karena dua cara tersebut di parsing oleh database dengan cara yang terpisah, sehingga tidak memungkin bagi penyerang menjalankan SQL Injection. Keuntungan menggunakan prepare steatments ada dua yaitu:
- Query yang disiapkan (diparsing) sekali tetapi dapat digunakan berkali-kali
- Lebih aman terhadap SQL Injection
Menggunakan PDO (PHP Data Objects)
PDO merupakan cara yang ramping (simple) untuk mengakses database. PDO memberikan kemudahan pada programmer untuk menuliskan kode lebih hemat dan praktis. PDO juga dapat digunakan pada banyak jenis database selain MySQL. Sebelum digunakan PDO perlu diaktifkan. Dengan menggunakan PDO programmer php dapat menggunakan prepare steatmen untuk mengirim parameter kedalam SQL. Contoh penggunaanya sebagai berikut:
<?php $stmt=$dbh->prepare("INSERT INTO REGISTRY(name, value) VALUES(:name,:value)"); $stmt->bindParam(':name', $name);$stmt->bindParam(':value', $value);
?>
Menggunakan MySQLi
Berbeda dengan PDO yang dapat digunakan pada berbagai macam database, MySQLi khusus untuk database MySQL. Contoh penggunaan sebagai berikut:
<?php
if (!($stmt = $mysqli->prepare("INSERT INTO test(id) VALUES (?)"))) {
echo "Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error;
}?>
Berbeda dengan PDO yang dapat digunakan pada berbagai macam database, MySQLi khusus untuk database MySQL. Contoh penggunaan sebagai berikut:
<?php
if (!($stmt = $mysqli->prepare("INSERT INTO test(id) VALUES (?)"))) {
echo "Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error;
}?>
Kemungkinan suatu saat nanti ada cara lain untuk menyerang dan cara melindungi juga ditemukan. Maka mari sama-sama belajar terus untuk menjadi lebih baik. Demikian tulisan kali ini semoga bermanfaat.
Tidak ada komentar:
Posting Komentar