Cara simple menangkal Sql injection

Cara simple menangkal Sql injection

Security adalah hal pertama yang harus diperhatikan dalam membuat aplikasi apapun karena salah sedikit dalam hal security bisa berakibat fatal bagi aplikasi kita, dalam pembuatan web ada salah satu bug legend yang disebut SQL Injection, bug ini membolehkan user biasa atau pengunjung web menjalankan SQL command, akibatnya apa kalau orang menjalankan SQL command ? akibatnya dia bisa mendapatkan informasi penting yang ada di dalam database kita, bisa password dan username atau kalau kita punya web ecommerce bisa lebih fatal lagi, si penyerang bisa mendapatkan informasi seperti credit card. Oke kali kita akan membahas bagaimana cara mencegah bug ini.

1. MySQLi_escape_string

Jika anda masih memakai mysqli, mungkin function ini akan sangat menbantu anda dalam mencegah SQL injection. Fungsi ini menangani string kutip satu, string kutip satu adalah salah satu penyebab besar terjadinya bug ini, contoh web misalnya url-nya seperti ini : www.korban.com/index.php?id=2 , jika web tersebut memiliki bug dan diletakan string kutip satu di akhir url seperti ini : www.korban.com/index.php?id=2'  maka akan terjadi error atau web tersebut menampilkan blank page. jika anda menggunakan mysqli gunakan kode dibawah ini untuk menangkal string kutip satu (') 

<?php

$kon = mysqli_connect("localhost","root","password","database_name")

$id = mysqli_escape_string($kon,$_GET['id']);
$kuery = mysqli_query($kon,"SELECT * FROM tabel_name WHERE id='.$id.'");

?>

kuery ini mencegah string kutip satu(') tapi function ini tidak bisa menghandle teknik Sql injection yang lebih advance.

2. PDO prepared statement

Nah yang ini pernah dibahas diarticle saya sebelumnya kenapa harus menggunakan pdo , berikut code prepared statement, source code :

<?php

$kon = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);

$id=$_GET['id'];

$sql = $kon->PREPARE("SELECT * FROM table_name WHERE id=:id");
$sql->bindparam(':id',$id);
$sql->execute();
$objek = $sql->fetchAll(PDO::FETCH_ASSOC);

foreach($object as $hasil)
{
echo $hasil['nama column yang mau ditampilan'];
}
?>

untuk prepared statement ini recomended untuk menangkal SQL Injection menurut saya, karena sudah saya test dengan burpsuite, acuentix dan sqlmap dan dengan menggunakan kode prepared statement ini Web menjadi tidak memiliki bug SQLinjection.


Posted on