Breaking

Cara Mengatasi Bug SQL Pada Website | GILA CODERS


CrAzY dOg

Hello World Jadi Kali ini Kita Bakalam Membahas soal bug nih. Nah pada tutorial kali ini saya bakalan memberi tau cara mengatasi bug sql injection ,nah Sebuah serangan SQL Injection adalah sebuah metode serangan yang dilakukan oleh hacker jahat dengan cara memasukkan/menginjeksi SQL Query/Perintah SQL melalui input data pada sebuah aplikasi. biasanya serangan ini terjadi pada bagian Kolom Pencarian/Search Box, Form ( Login, Daftar, dll ), Parameter, Header HTTP, dll. Kurang lebih gtu hehehe :v ,
Jika anda seorang admin/webmaster, maka hal ini adalah sesuatu yang serius bagi anda.apalagi sekarang lagi ngetop banget Serangan SQL Injection ini.


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;
?>
Nah caranya :


1.) Gunakan Prepared Statement pada SQL Query anda.

Prepared Statement ini terdapat pada module PDO di MySQL ( Sudah ada diversi terbaru MySQL ), Prepared Statement Menurut w3school :
Prepared Statements and Bound Parameters. A prepared statement is a feature used to execute the same (or similar) SQL statements repeatedly with high efficiency. Prepared statements basically work like this: Prepare: An SQL statement template is created and sent to the database.
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.

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, saya juga dulu make method ini dan lumayan ampuh untuk menangkal serangan SQL Injection dan sebagainya.


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.

WAF ( Web Application Firewall ) ini berperan sangat penting dalam melindungi Web Server anda, Karena WAF bertugas sebagai penjaga web anda dari berbagai serangan berbahaya ( SQL Injection, XSS, Spam, CSRF, dll ).
Berikut beberapa WAF yang dapat diandalkan untuk menjaga Web anda dari serangan Hacker Jahat :3 :
Barracuda Networks Web Application Firewall
CloudFlare ( CDN sekaligus WAF )
Incapsula ( CDN sekaligus WAF )
Dan masih banyak lagi.



2 comments:

Profil

My photo
Suka anime, manga, novel, tapi bukan wibu.

Translate

Powered by Blogger.