-->

Cara Menutup Celah Sql Injection


Halo sobat it, kembali lagi bersama admin ctteam yang paling tampan menawan. sebagai seorang programer pasti sobat sudah tidak asing lagi dengan yang namanya bahasa program sql kan. Ya kali ini mimin akan membagikan trik cara menutup bug sql injection.

Bug ini merupakan bug yang terlihat terlalu sepele namun sangat besar bahayanya. karena dengan bug ini, hacker dapat mengeksrtak serta mencuri dan semua data pada database situs, termasuk user admin serta password atau juga data valid kartu kredit jika website yang diserang berupa shopping Web.


Kali ini saya akan memberi tahu bagaimana cara untuk mengatasi Bug SQL Injection pada web-web yang rentan akan serangan tersebut. SQL Injection adalah jenisaksi hacking pada keamanan komputer dimana seorang penyerang bisa bisa mendapatkanakses ke basis data di dalam sistem. SQL Injection yaitu serangan yang mirip dengan serangan XSS dalam bahwa penyerang memanfaatkan aplikasi vektor dan juga dengan Common dalam serangan XSS.Dan sekarang saya akan memberi tahu bagaimana cara mengatasi serangan SQL Injection tersebut.


Contoh code yang vulnerable/rentan terhadap SQL Injection :


<?php
$id = $_GET['id'];
$db = mysql_connect('localhost', 'admin', '123456');
mysql_select_db("bug", $db);
$query = "SELECT * FROM pengguna WHERE id = '".$id."'";
$hasil = mysql_query($query);
echo $hasil;
?>


Dalam tutorial ini saya memberikan sebuah contoh kode PHP diatas yang ada bug SQL Injection nya & memperbaiki bug tersebut dengan beberapa cara di bawah ini.


1. Gunakan Prepared Statement pada SQL Query anda.Prepared statements adalah sebuah fitur yang disediakan oleh sebuah Database Management System (DBMS) seperti MySQL, PostgreSQL, Oracle, SQLite, IBM, Firebird, DBLib, dan lain-lain, dimana kita bisa mengirim query secara terpisah dari query utama dan variabel pendukungnya. Prepared Statement adalah salah satu cara untuk melakukan komunikasi ke database yang dikatakan cukup efektif untuk mencegah SQL Injection. Tujuannya, agar query menjadi lebih aman dan cepat (jika perintah yang sama akan digunakan beberapa kali).  Menggunakan prepared statement ini juga sangat disarankan ketika perlu melakukan banyak query supaya tidak terlalu memberatkan sistem.


Berikut contoh code untuk memperbaiki bug SQL Injection pada code diatas.


<?php
$db_host = "localhost";
$db_name = "admin"; // database name
$db_user = "baru"; // datebase user
$db_pass = "123456"; // database password
$koneksi = "mysql:host=$db_host;dbname=$db_name";
try 
{
    $db = new PDO($koneksi, $db_user, $db_pass);   
}
catch (exception $e) 
{
    echo "error";
    exit();
}
$id = $_GET['id'];
$sql = "SELECT * FROM pengguna WHERE id = $id";
$stmt = $db->prepare($sql);
$stmt->execute();
$objek = $stmt->fetchObject();
echo $objek->nama;
?>


2. Gunakan filter pada code PHP anda.

Apa itu PHP Filter ?

Sebuah filter PHP digunakan untuk memvalidasi dan menyaring data yang berasal dari sumber yang tidak aman.

Filter ini tentunya berguna untuk menyaring tipe input yang sedang dimasukkan oleh pengguna dan pastinya fitur Filter pada php ini juga bisa berguna untuk meminilisir serangan SQL Injection pada parameter/website anda. berikut contoh codenya:


<?php
$id = filter_var($_POST['id'], FILTER_VALIDATE_INT); // Filter ini berguna untuk mefilter tipe
//data integer
$nama = filter_var($_POST['nama'], FILTER_SANITIZE_STRING);//untuk tipe string
?>



3. Gunakan .htaccess untuk memfilter Query HTTP pada web server anda.

Metode ini biasanya digunakan oleh plugin keamanan Wordpress

berikut contoh codenya :


ServerSignature Off
Options -Indexes
RewriteEngine On
RewriteCond %{REQUEST_METHOD} ^(HEAD|TRACE|DELETE|TRACK|DEBUG) [NC]
RewriteRule ^(.*)$ - [F,L]
RewriteCond %{REQUEST_URI} (timthumb\.php|phpthumb\.php|thumb\.php|thumbs\.php) [NC]
RewriteRule . - [S=1]
RewriteCond %{HTTP_USER_AGENT} (libwww-perl|wget|python|nikto|curl|scan|java|winhttp|clshttp|loader) [NC,OR]
RewriteCond %{HTTP_USER_AGENT} (<|>|'|%0A|%0D|%27|%3C|%3E|) [NC,OR]
RewriteCond %{HTTP_USER_AGENT} (;|<|>|'|"|\)|\(|%0A|%0D|%22|%27|%28|%3C|%3E|).*(libwww-perl|wget|python|nikto|curl|scan|java|winhttp|HTTrack|clshttp|archiver|loader|email|harvest|extract|grab|miner) [NC,OR]
RewriteCond %{THE_REQUEST} \?\ HTTP/ [NC,OR]
RewriteCond %{THE_REQUEST} \/\*\ HTTP/ [NC,OR]
RewriteCond %{THE_REQUEST} etc/passwd [NC,OR]
RewriteCond %{THE_REQUEST} cgi-bin [NC,OR]
RewriteCond %{THE_REQUEST} (%0A|%0D) [NC,OR]
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=http:// [OR]
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=(\.\.//?)+ [OR]
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=/([a-z0-9_.]//?)+ [NC,OR]
RewriteCond %{QUERY_STRING} \=PHP[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} [NC,OR]
RewriteCond %{QUERY_STRING} (\.\./|\.\.) [OR]
RewriteCond %{QUERY_STRING} ftp\: [NC,OR]
RewriteCond %{QUERY_STRING} http\: [NC,OR]
RewriteCond %{QUERY_STRING} https\: [NC,OR]
RewriteCond %{QUERY_STRING} \=\|w\| [NC,OR]
RewriteCond %{QUERY_STRING} ^(.*)/self/(.*)$ [NC,OR]
RewriteCond %{QUERY_STRING} ^(.*)cPath=http://(.*)$ [NC,OR]
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} (\<|%3C).*iframe.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} (<|%3C)([^i]*i)+frame.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [NC,OR]
RewriteCond %{QUERY_STRING} base64_(en|de)code[^(]*\([^)]*\) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} ^.*(\[|\]|\(|\)|<|>).* [NC,OR]
RewriteCond %{QUERY_STRING} (NULL|OUTFILE|LOAD_FILE) [OR]
RewriteCond %{QUERY_STRING} (\./|\../|\.../)+(motd|etc|bin) [NC,OR]
RewriteCond %{QUERY_STRING} (localhost|loopback|127\.0\.0\.1) [NC,OR]
RewriteCond %{QUERY_STRING} (<|>|'|%0A|%0D|%27|%3C|%3E|) [NC,OR]
RewriteCond %{QUERY_STRING} concat[^\(]*\( [NC,OR]
RewriteCond %{QUERY_STRING} union([^s]*s)+elect [NC,OR]
RewriteCond %{QUERY_STRING} union([^a]*a)+ll([^s]*s)+elect [NC,OR]
RewriteCond %{QUERY_STRING} (;|<|>|'|"|\)|%0A|%0D|%22|%27|%3C|%3E|).*(/\*|union|select|insert|drop|delete|update|cast|create|char|convert|alter|declare|order|script|set|md5|benchmark|encode) [NC,OR]
RewriteCond %{QUERY_STRING} (sp_executesql) [NC]
RewriteRule ^(.*)$ - [F,L]






4.  Pasang WAF ( Web Application Firewall ) Pada Web Server Anda.

Fire wall ini adalah sebuah aplikasi keamanan untuk web server berada pada Layer 7 OSI. WAF ini di standari oleh OWASP (Open Web Application Security Project), merupakan kebijakan keamanan yang di posisiskan antara aplikasi web dan end user.

Berikut beberapa WAF yang dapat diandalkan untuk menjaga Web anda dari serangan Hacker Jahat :3 :v :


Barracuda Networks Web Application Firewall 

CloudFlare ( CDN sekaligus WAF ) 

Incapsula ( CDN sekaligus WAF ) 

Dan Masih banyak lagi


Oke, mungkin ini bisa saya opinikan 

Semoga Bermanfaat :)

.

Berlangganan update artikel terbaru via email:

0 Response to "Cara Menutup Celah Sql Injection "

Post a Comment

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel