Kamis, 31 Juli 2014

Melempar Parameter dari URL ke Controller

Sebagai contoh,Kita punya sebuah controller dengan nama Controller_User. Pada controller tersebut terdapat sebuah method dengan nama action_hello. Method tersebut berfungsi untuk menampilkan sebuah nama user. Sederhananya seperti contoh di bawah.

<?php
/**
 * User controller
 *
 */
class Controller_User extends Controller {
    
    public function action_hello()  {
        echo 'Hello Stranger!';
    }
    
}
/* APPPATH/classes/controller/user.php */

Silakan akses dari browser dengan URL  localhost/public/user/hello (berikutnya cukup disebut user/hello). Apabila tidak ada masalah, browser akan menampilkan teks "Hello Stranger!".











Nah, kita inginnya kata "Stranger" pada skrip di atas dibuat dinamis sesuai dengan inputan. Inputan disini tidak harus selalu melalui form, contoh lain misalnya dengan mengambil parameter dari URL.

http://www.domain.com/controller/action/param_1/param_2/param_3/param_n


FuelPHP mendukung input dari URL (bukan request GET), dengan aturan baku dimana segmen pertama merupakan nama class, sedangkan segmen kedua adalah nama method, maka segmen ketiga dan seterusnya adalah parameter input. Contoh URL dengan melempar parameter melalui URL: http://localhost/fuel1/public/user/hello/lely atau http://localhost/fuel1/public/user/hello/lala.

Hal selanjutnya adalah menangkap paramater tersebut dari controller, atau lebih spesifiknya menangkap parameter tersebut melalui method action_hello seperti contoh skrip di atas.

<?php
/**
 * User controller
 *
 */
class Controller_User extends Controller {
    
    public function action_hello($name) {
        echo 'Hello '.$name.'!';
    }

}
/* APPPATH/classes/controller/user.php */

 Cobalah mengkases URL user/hello/lely, dan lihat hasilnya. Beutiful! Browser akan menampilkan teks "Hello lely!".

 









Nah, sekarang cobalah akses URL tanpa menyertakan paramater, contoh: user/hello, dan lihat apa yang terjadi? Bloody Hell! FuelPHP mengembalikan respon 404 hanya karena kita tidak menyertakan parameter.











Pesan kesalahan tersebut menjelaskan bahwa sebenarnya tidak ada nilai default untuk argumen pada sebuah method yang kita buat. Namun, sudah dimodifikasi oleh core FuelPHP sehingga respon yang ditampilkan langsung merujuk ke 404. Solusinya? Cukup tambahkan nilai default seperti contoh skrip di bawah.

public function action_hello($name = null) {
    $name = empty($name) ? 'Stranger' : $name;
    echo 'Hello '.$name;
}

Jumlah parameter yang dilempar melalui URL tidak terbatas, kita bisa menambahkan sebanyak yang kita mau, misal URL user/hello/lely/Solo. Langkah selanjutnya tinggal memprosesnya pada method, tidak diprosespun tidak apa-apa.

public function action_hello($name = null, $from = null) {
    $name = empty($name) ? 'Stranger' : $name;
    $from = empty($from) ? 'World' : $from;
    echo 'Hello '.$name.', From '.$from;
}

Ada sedikit masalah yang mengganjal, bagaimana jika paramater yang diinputkan tidak tentu jumlahnya? Bagaimana menentukan nilai defaultnya? Untuk kasus ini, kita bisa memanfaatkan librari Uri bawaan FuelPHP. Ada dua method yang dapat kita manfaatkan yaitu segment dan segments.

/**
 * Sample URL : domain.com/user/hello/stranger/who/are/you
 */
public function action_hello() {
    echo Uri::segment(1); // user
    echo Uri::segment(3); // stranger
    // dengan melempar default value
    echo Uri::segment(100, 'I\'m not exist!') // I'm not exist
    // mendapatkan semua indeks dan nilai paramater dalam bentuk array
    var_dump(Input::segments()); // // returns array(0 => 'user', 1 => 'hello', ...)
}

Mungkin sebagian dari kita bertanya-tanya, apa manfaatnya? Bagaimana implementasinya? Contoh kasus nyata penggunaan parameter tersebut ada pada website ini. Silakan lihat URL di atas, terdapat parameter melempar-parameter-dari-url-ke-controller bukan? parameter ini digunakan controller untuk melakukan pencarian artikel ke dalam basisdata, kemudian artikel tersebut ditampilkan ke browser. Memang tidak sesederhana itu prosesnya, tapi paling tidak kita dapat gambaran langsung guna dari parameter tersebut. ;)

SRC : http://www.fuelphp.yugo.my.id/post/tutorial/melempar-parameter-dari-url-ke-controller

Membuat Controller Fuel PHP


Controller adalah sebuah class yang dapat diakses melalui URL dan berfungsi menangani berbagai request. Proses pada FuelPHP juga dikendalikan oleh controller. Sebagai contoh, apabila terdapat URL localhost/fuelphp/public/blog/read, maka blog merupakan nama class dari controller, sedangkan read merupakan sebuah method dalam controller. Mari kita asumsikan bahwa URL tersebut belum dimodifikasi melalui route.

Membuat Controller Pertama


Kita akan membuat sebuah controller pertama yaitu menampilkan Hello World. Langkah pertama, buatlah sebuah berkas dengan nama blog.php dan simpan pada direktori fuel/app/classes/controller. Isi dari berkas tersebut bisa dilihat pada contoh skrip di bawah.

<?php
/**
 * Blog controller
 *
 */
class Controller_Blog extends Controller {
    
    public function action_hello() {
        echo 'Hello World!';
    }

    public function action_index() {
        echo 'Halaman Utama';
    }

}
/* APPPATH/classes/controller/blog.php */

Untuk mengetahui controller tersebut berfungsi, cobalah akses URL localhost/fuelphp/public,akan muncul tampilan seperti berikut











lalu akses localhost/fuelphp/public/blog/hello (berikutnya disebut blog/hello). Apabila tidak terjadi kesalahan syntax, browser akan menampilkan teks "Hello World!". Selamat, kita sudah berhasil membuat controller pertama.













Method dengan nama action_index merupakan method spesial. Dimana method ini akan dijalankan apabila segmen kedua tidak didefinisikan melalui URL. Sebagai contoh localhost/fuelphp/public/blog akan menghasilkan output yang sama dengan localhost/fuelphp/public/blog/index.

Aturan pembuatan controller:
  •     Nama berkas dibuat dengan huruf kecil semua, misal : blog.php atau user.php.
  •     Setiap nama class yang dipisahkan dengan tanda _ (underscrore), harus diawali dengan huruf  kapital, misal: Controller_Blog atau Controller_Admin_User.
  •     Sistem penamaan class lainnya (selain poin 2) mengacu pada standar class PHP.
  •     Tidak diperkenankan menggunakan bahasa alay, misal : ConTroll3R_bLo9_akOO

Router


Sistem routing pada FuelPHP masih seperti kebanyakan framework PHP, dimana mapping dibuat otomatis antara URL dengan controller. Kita tidak perlu mendefinisikan satu persatu request dan response. Seselesainya kita membuat controller, seketika itu controller tersebut dapat diakses langsung melalui browser.

Oh ya, sebagai tambahan ada dua predefined route, yaitu _root_ dan _404_. Mari kita sedikit bermain-main dengan route ini. Buka berkas fuel/app/config/routes.php. Secara bawaan, isi dari berkas tersebut adalah seperti ini:

<?php
return array(
    '_root_'  => 'welcome/index',  // The default route
    '_404_'   => 'welcome/404',    // The main 404 route
  
    'hello(/:name)?' => array('welcome/hello', 'name' => 'hello'),
);

Disana didefinisikan _root_ berisi nilai welcom/index. Route ini merupakan default route yang akan dijalankan apabila kita tidak menyertakan nama controller pada URL. Dalam hal ini, route akan merespon controller welcome (Controller_Welcome) dan method index (action_index). Sedangkan _404_ merupakan error handling route untuk halaman dengan respon yang tidak ditemukan. Biasanya digunakan untuk sebuah halaman 404.

Coba kita modifikasi sedikit berkas tersebut sehingga menjadi seperti ini:

<?php
return array(
    '_root_'  => 'page/index',  // The default route
    '_404_'   => 'page/404',    // The main 404 route
   
    'hello(/:name)?' => array('welcome/hello', 'name' => 'hello'),
);

 Dan buat controller seperti di bawah:

<?php
/**
 * Page controller
 */
class Controller_Page extends Controller {
    public function action_index() {
        echo 'Halaman Index';
    }
    public function action_404() {
        exit('Bloody Hell! 404 : Page not found!');
    }
     
}
/* APPPATH/classes/controller/page.php */

Untuk mengetahui route tersebut mengembalikan respon yang sempurna, cobalah akses URL  localhost/fuelphp/public/ (tanpa menyebutkan controller). Sekarang cobalah akses URL  localhost/fuelphp/public/i-am-alien, dan lihat hasilnya. :)

Prefix Controller dan Method


Mari abaikan namespace terlebih dahulu dan kita ikuti standar FuelPHP. Setiap nama class controller harus dibubuhi awalan (prefix) Controller_, misal kita akan membuat controller blog, maka nama class-nya menjadi Controller_Blog. Prefix ini bisa diubah sesuai keinginan melalui config utama. Bahasan mengenai prefix controller ini akan dijabarkan pada tulisan lain.

Apabila controller disimpan dalam sub-direktori, misalnya direktori fuel/app/classes/controller/admin, maka nama sub-direktori tersebut juga dicantumkan dalam nama class-nya. Sebagai contoh, kita membuat controller blog dalam direktori admin, sehingga nama class-nya menjadi Controller_Admin_Blog. Semakin dalam penyimpan controller pada sub-direktori, semakin panjang pula prefixnya. Jadi, bijaklah dalam mengorganisir berkas controller. Berikut contoh sederhana nama class controller dalam sub-direktori.

<?php
/**
 * Blog admin controller
 *
 */
class Controller_Admin_Blog extends Controller {
     
    public function action_hello() {
        echo 'Hello';
    }
}
/* APPPATH/classes/controller/admin/page.php */

Jika kita perhatikan, selain controller, ternyata setiap method juga mempunyai prefix, yaitu action_. Apa pentingnya prefix ini? Mari kita bayangkan seandainya FuelPHP tidak memberlakukan prefix untuk setiap method, kemudian kita ingin membuat URL blog/list tanpa mengaturnya melalui route. Maka isi skripnya kurang lebih menjadi begini.

<?php
/**
 * Blog admin controller
 *
 */
class Controller_Blog extends Controller {
     
    public function list() {
        echo 'Hello';
    }
}
/* APPPATH/classes/controller/blog.php */

Apabila kita menjalankan controller tersebut melalui browser, maka akan menampilkan pesan error yang kira-kira isinya begini:

syntax error, unexpected 'list' (T_LIST), expecting identifier (T_STRING)

Kenapa bisa begitu? Karena list, merupakan fungsi native PHP dan merupakan reserved words yang tidak diizinkan untuk digunakan dalam penamaan class, function atau method yang kita buat sendiri. Jadi, prefix action_ berfungsi untuk menghindari adanya konflik penamaan method dalam controller dengan reserved words PHP.

HTTP Method


Selain menambahkan prefix action, method dalam controller juga dapat menggunakan prefix lain, yaitu get_ dan post_. Sebagai contoh penamaan misalnya get_index() atau post_contact(). Apabila menggunakan get, maka method tersebut hanya akan dijalankan apabila terdapat request GET. Begitu juga untuk post, hanya dijalankan apabila terdapat request POST.

<?php
/**
 * Page controller
 *
 */
class Controller_Page extends Controller {
     
    public function get_contact() {
        echo 'Hanya akan ditampilkan apabila request GET';
        // digunakan untuk menampilkan form contact
    }
    public function post_contact() {
        echo 'Hanya akan dijalankan apabila terdapat request POST';
        // untuk proses kirim email melalui form contact
    }
}
/* APPPATH/classes/controller/page.php */

Magic Method


Terdapat dua magic method yang dapat kita gunakan pada controller yaitu before dan after. Method before mempunyai fungsi yang sama persis dengan magic method bawaan PHP, yaitu __construct. Jangan menggunaan method __construct jika kalian tidak paham apa yang harus dilakukan dan yakin apa yang kalian lakukan tidak menggangu core FuelPHP. Jika before dijalankan pre-controller, maka after merupakan method post-controller.

<?php
/**
 * Blog controller
 */
class Controller_Blog extends Controller {
    public function before() {
        parent::before();
        // do something here
    }
    public function action_index() {
        return View::forge('blog/index');
    }
    public function after() {
        parent::after();
        // do something here
    }
     
}
/* APPPATH/classes/controller/blog.php */

OK jika kalian familiar atau pernah menggunakan framework PHP lain, misal CodeIgniter atau Laravel, membuat controller di FuelPHP bukan suatu masalah besar. Karena pada dasarnya konsep pembuatannya serupa.

Pembahasan mengenai Controller tidak berhenti sampai disini, kita akan melanjutkan nya di tutorial selanjutnya :D :D: D :D

SRC : http://www.fuelphp.yugo.my.id/post/tutorial/membuat-controller

Rabu, 23 Juli 2014

Belajar FuelPHP Part 3 (INSTALLASI DI LINUX)

Hai Teman teman Kembali Lagi Ni ye.....
kali ini kita mau install fuelphp di linux
cekidoot ......

Install fuelphp di windows dan di linux itu sama,cuman bedanya pada folder penyimpanan fuelphp nya 
mari kita mulai..

Kali ini kita akan membahas instalasi fuel php di linux. Untuk memulai instalasi FuelPHP ,kita akan download fuel php nya dulu, dalam tutorial ini menggunakan fuel php 1.7.1

Ada satu komponen sebagai tambahan yang bersifat opsional, yaitu Composer. Walau Composer tidak wajib untuk versi saat ini, tapi saya rekomendasikan untuk diinstal juga. Mengingat beberapa librari seperti Monolog misalnya bersumber dari packagist yang sudah barang tentu menggunakan composer untuk update.

Silahkan download terlebih dahulu file fuelphp nya disini : FuelPHP1.7.1

Setelah download selesai, Extract file seperti gambar di bawah ini















Copy hasil extract tersebut ke computer:\var\www\html 
.kemudian rename folder hasil exctract tersebut agar lebih mudah. Contohnya kita  rename dari fuelphp-1.7.1 menjadi fuelphp. 
Lihat gambar dibawah ini !!!!















Mengapa harus di rename ????????
Jawabannya adalah agar mempermudah pengaksesan web kita. misal masih fuelphp-1.7.1 maka akan diakses melalui http://localhost/fuelphp-1.7.1, namun apabila sudah di-rename menjadi fuelphp maka akan diakses melalui http://localhost/fuelphp

Setelah di rename, copy hasil download composer di dalam folder fuelphp,lalu  bukalah web browser dan ketikkan alamat berikut: http://localhost/fuelphp,pastikan file lengkap seperti gambar dibawah ini :














 Cobalah buka URL http://localhost/fuelphp/public. Apakah browser kalian menampilkan output seperti gambar di bawah :

  














jangan panik, tenang tenang ini hanya masalah permissionya kok 
sekarang kita atur permissionya buka  terminal ketikkan seperti berikut







Coba buka lagi URL http://localhost/fuelphp/public. Apakah browser kalian menampilkan output seperti gambar di bawah :















Jika tampil seperti diatas , maka FuelPHP telah diinstal di server lokal. Selain itu,kita juga bisa mengakses URL http://localhost/fuelphp/docs untuk membaca dokumentasi FuelPHP secara off-line. 

Untuk mengupdate composer kita bisa menggunakan perintah :

php composer.phar update


 Selamat Belajar Teman teman....

Jumat, 18 Juli 2014

Liburan Ke Bali (Tampak Siring)

Balik Lagi Balik Lagi Balik lagi,,,,,,,,,,,,
kali ini gue mau cerita tentang perjalanan pas liburan ke bali loooo, khususnya untuk kelas gue TOMAT
let's go tampak siring

Gerbang Masuk Istana Tampak Siring, Keren Banget yaaa


















Ini Adalah Bapak Pemandu Kelas TOMAT di Tampak siring



















Berikut Ini adalah view nya tampak siring yang keren abis




Bersih Banget yaa....


Jembatan Persahabatan


















Sejuk Banget








itu tadi view nya tampak siring, sekarang view nya anak R4 nih ahahahahah :D
let's go cekidoooooooooooot 

Cie temen temen gue ada disty,yuyun,kiki,selvi,cece,syahda,vunun and yeane



Serius banget ya dengerinya

Hijabers (Keceng/riza,indri and yeane)

Yusi And Keceng

Sherin,litha,vivin,kiki

Indri,Pak abror(wali kelas) and willy (ketua kelas)

Duo Alay Tegar And Andre

Yuyun,Cece,Syahda ANd Yeane Senyum :D



Senyumnya Pak Abror :)





Selfi2 ALay Ketuanya Wahyu Widi Nih


Kealay-anya Andre :D

Kamis, 17 Juli 2014

SQL INJECTION



PENGERTIAN  SQL INJECTION

Menurut para ahli pengertian dari SQL injection adalah sebagai berikut :

 Menurut Rosihan Ari Yuana  
SQL injection merupakan perbuatan orang yang memberikan perintah SQL untuk dijalankan di mesin server SQL tanpa sepengetahuan Anda sebagai administrator. Proses injection biasanya dilakukan orang ketika memasukkan input melalui form dengan perintah atau kode tertentu. 

Menurut Muhammad Ilhamdi Rusydi 
SQL injection adalah teknik memanipulasi perintah SQL dengan memasukkan ke database server sehingga dapat dimanfaatkan untuk mendapatkan informasi dan merubah database yang telah ada.

 Menurut Slamet Risnanto
SQL injection merupakan suatu teknik dengan menggunakan perintah SQL yang memungkinkan cracker dapat masuk ke dalam suatu system yang terproteksi tanpa mengetahui username dan password administrator terlebih dahulu.     

Menurut Deris Stiawan
SQL injection adalah suatu metode yang digunakan untuk memanfaatkan kelemahan pada mesin server SQL, misalnya server menjalankan layanan SQL (MySQL, PostgraseSQL, SQL server dan lain-lain). Kemudian Craker mencoba memasukkan sesuatu script untuk mencoba menampilkan halaman error di browser dan biasanya halaman error akan menampilkan paling tidak struktur dari hierarki server SQL.

SEBAB TERJADINYA
SQL injection yang dapat diartikan sebagai suatu aksi hacking yang dilakukan di aplikasi client dengan cara memodifikasi perintah SQL yang ada di memori aplikasi client dapat terjadinya karena disebabkan oleh beberapa penyebab yatu : 
  1. Tidak adanya penanganan terhadap karakter – karakter tanda petik satu dan juga karakter double minus yang menyebabkan suatu aplikasi dapat disisipi dengan perintah SQL.
  2. Sehingga seorang Hacker menyisipkan perintah SQL kedalam suatu parameter maupun suatu form.
 
KARAKTERISTIK
SQL injection yang merupakan jenis serangan dari para hacker mempunyai beberapa karakteristik yaitu :
1.    Teknik serangan ini memungkinkan seseorang dapat login kedalam sistem tanpa harus memiliki account.
2.    Selain itu SQL injection juga memungkinkan seseorang merubah, menghapus, maupun menambahkan data–data yang berada didalam database. Bahkan yang lebih berbahaya lagi yaitu mematikan database itu sendiri, sehingga tidak bisa memberi layanan kepada web server 

TOOLS PENDUKUNG
Untuk dapat melakukan aksi SQL injection, para hacker membutuhkan beberapa tools yang akan mereka gunakan sebagai pendukung untuk melakukan teknik penyerangan diantaranya adalah sebagai berikut :
1.    Internet Exploler / Browser
2.    PC yang terhubung internet
3.    Program atau software seperti softice

CONTOH SINTAKS DALAM PHP
Adapun beberapa contoh sintaks agar para hacker dapat melakukan penyerangan dengan menggunakan metode SQL injection adalah sebagai berikut : 
 
  1. $SQL = “select * from login where username = ’$username’ and password = ‘$password’”; , {dari GET atau POST variable}
  2. Isikan password dengan string ’ or ’’ = ’
  3. Hasilnya maka SQL akan seperti ini = “select   * from login where username = ’$username’ and password = ’pass’ or ‘ = ′ ”; , {dengan SQL ini hasil selection akan selalu TRUE }
  4. Dan hasilnya, para hacker bisa inject sintax SQL kedalam SQL

Contoh Gambar SQL Injection :

 











PENANGANAN SQL INJECTION

      1.   MERUBAH SCRIPT PHP
            $query = "select id,name,email,password,type,block from user " .
            "where email = '$Email' and password = '$Password'";
            $hasil = mySQL_query($query, $id_mySQL);
            while($row = mySQL_fetch_row($hasil))
            {
               $Id = $row[0];
               $name = $row[1];
               $email = $row[2];
               $password = $row[3];
               $type = $row[4];
               $block = $row[5];
            }
if(strcmp($block, 'yes') == 0)
{
               echo "<script>alert('Your account has been blocked);
               document.location.href='index.php';</script>\n";
               exit ( );
            }
else if(!empty($Id) && !empty($name) && !empty($email) &&
!empty($password));
Script diatas memungkinkan seseorang dapat login dengan menyisipkan perintah SQL kedalam form login. Ketika hacker menyisipkan karakter ’ or ’’ = ’ kedala form email dan password maka akan terbentuk query sebagai berikut : 


Maka dilakukan perubahan script menjadi
$query = "select id,name,email,password,type,block from user".
"where email = '$Email'";
$hasil = mySQL_query($query, $id_mySQL);
            while($row = mySQL_fetch_row($hasil))
{
               $Id = $row[0];
               $name = $row[1];
               $email = $row[2];
               $password = $row[3];
               $type = $row[4];    
               $block = $row[5];
}
if(strcmp($block, 'yes') == 0)
{
               echo "<script>alert('Your account has been blocked');
               document.location.href='index.php';</script>\n";
               exit ( );
            }
            $pass = md5($Password);
else if((strcmp($Email,$email) == 0) && strcmp($pass,$password) == 0));

 
      2.   MENGGUNAKAN MYSQL_ESCAPE_STRING
Merubah string yang mengandung karakter ‘ menjadi \’ misal SQL injec’tion menjadi SQL injec\’tion
Contoh :     
$kar = “SQL injec’tion”;
                                 $filter = mySQL_escape_string($kar);
                                 echo ”Hasil filter : $filter”;






   3.   PEMFILTERAN KARAKTER DENGAN MEMODIFIKASI PHP.INI
         
Modifikasi dilakukan dengan mengenablekan variabel magic_quotes pada php.ini sehingga menyebabkan string maupun karakter ‘ diubah menjadi \’ secara otomatis oleh php.

Contoh : 


        
Contoh script yang membatasi karakter yang bisa masukkan : 

function validatepassword( input ) 
good_password_chars ="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" 
validatepassword = true for i = 1 to len( input ) 
c = mid( input, i, 1 ) 
if ( InStr( good_password_chars, c ) = 0 ) then 
validatepassword = false 
exit function 
end if 
next 
end function


MEMINIMALISASIKAN SQL INJECTION

Ada beberapa cara yang dapat digunakan untuk meminimalisasikan terjadinya serangan SQL injection diantaranya adalah sebagai berikut : 
1.    Warning atau Error pada query tidak perlu ditampilkan. Lebih baik dibuat script yang akan langsung memfeedback log error/warning ke developer/adminnya jika terjadi kesalahan query, sementara di end-user bisa ditampilkan, misal error 404. Kalau Anda pernah / sering hosting di beberapa web hosting, pastinya ada beberapa web hosting yang memberikan penamaan yang sama untuk direktori usernya (shared hosting), misal /sompret/x2324/nama-domain (dimana sompret selalu sama untuk setiap user dalam satu mesin, x2324 adalah username, dan nama-domain adalah nama domain yang digunakan si x2324. Pesan warning dan error query yang terjadi akibat script akan menampilkan path letak file tersebut. Akan lebih parah lagi jika user memberi permission 777 ke dir / file. 

2.    Developer hendaknya melakukan validasi terhadap URL dan memfilter bentuk request yang menjurus terhadap tindakan injeksi. 

3.    Jangan pernah dumping database ke direktori yang tidak restrict permissionnya / publik. Dan lagi penamaan terhadap file hasil dumping database diusahakan tidak umum seperti pemberian tanggal-bulan-tahun (misal : 13071984.sql). Beberapa third party atau extension / module suatu CMS yang menggunakan konfigurasi default bisa ditebak direktori dan nama filenya. 

4.    Lakukaan audit sendiri dengan berbagai macam tools yang ada. 

5.    Jika dana tidak mencukupi maka tidak ada salahnya konsultasi dengan pihak yang lebih pandai tentang SQL Injection.  


LOKASI SQL INJECTION

Untuk dapat melakukan SQL injection pada setiap target situs tidak harus melalui inboxnya saja akan tetapi hacker bisa memasukan string-string SQL di URL situs yang telah menjadi target sebelumnya.

Misalnya ada sebuah situs www.target.com/moreinfo.cfm dengan  ProductID = 245 lalu hacker mengetikkan string injeksi debuging SQL tadi ke address bar yang dituju dibelakang url target itu, contohnya: www.target.com/moreinfo.cfm dengan ProductID = 245' having 1 = 1 dan juga hacker dapat menghapus nilai produk dari URL tersebut dan menggantinya dengan debugging code, sebagai contoh: www.target.com/moreinfo ProductID = 'having 1=1—
Setelah itu akan keluar sebuah error page dari situs itu yang memberi informasi tentang struktur database situs itu. Dari hasil informasi yang telah didapat ini, hacker dapat melakukan serangan berikutnya. Apabila browser kita adalah Internet Explorer, ada sebagian situs yang tidak menampilkan error-nya, ini dikarenakan opsi Show Friendly HTTP Error Messages diaktifkan. 

Untuk itu hacker perlu menonaktifkannya dengan cara menghilangkan tanda centang di kotaknya. Opsi ini dapat anda temukan di Tools > Internet Option > Advanced cari opsinya di bagian Browsing lalu hilangkan tanda centangnya dan klik tombol Apply. Sesudah itu apabila anda menemui error page yang berisi HTTP 500 error - internal server error- sebelum men-set opsi tadi, anda cukup menekan tombol Refresh, lalu terlihatlah sudah error-nya. Setelah kita tahu struktur database-nya, dengan pengetahuan dasar dari belajar SQL kita dapat menghancurkan database itu dengan perintah ' drop database [nama_database] atau drop table [nama_table].

IMPLEMENTASI SQL INJECTION
1.                     Masuk ke google atau browse yg lain
2.                     Masukkan salah satu keyword berikut
"/admin.asp"
"/login.asp"
"/logon.asp"
"/adminlogin.asp"
"/adminlogon.asp"
"/admin_login.asp"
"/admin_logon.asp"
"/admin/admin.asp"
"/admin/login.asp"
"/admin/logon.asp"
{anda bisa menambahi sendiri sesuai keinginan anda}
3.                     Bukalah salah satu link yang ditemukan oleh google, kemungkinan Anda akan menjumpai sebuah halaman login (user name danpassword).
4.                     Masukkan kode berikut :
User name : ` or `a'='a
Password : ` or `a'='a (termasuk tanda petiknya)
5.                     Jika berhasil, kemungkinan Anda akan masuk ke admin panel, di mana Anda bisa menambahkan berita, mengedit user yang lain, merubah about,
dan lain-lain.
Jika beruntung Anda bisa mendapatkan daftar kredit card yang banyak.
6.                     Jika tidak berhasil, cobalah mencari link yang lain yang ditemukan oleh google.
7.                     Banyak variasi kode yang mungkin, antara lain :
User name : admin
Password : ` or `a'='a
atau bisa dimasukkan ke dua–duanya misal :
‘ or 0=0 --  ;  “ or 0=0 -- ;  or 0=0 -- ;  ‘ or 0=0 # ;
 “ or 0=0 # ;  ‘ or’x’=’x ;  “ or “x”=”x  ;  ‘) or (‘x’=’x
8.                     Cobalah sampai berhasil hingga anda bisa masuk ke admin panel.

PENCEGAHAN SQL INJECTION
1.    Membatasi panjang dari suatu input box (jika memungkinkan), dengan
cara membatasinya di kode program, jadi si hacker pemula akan bingung sejenak melihat input box nya gak bisa diinject dengan perintah yang panjang.
2.    Memfilterisasi input yang dimasukkan oleh user, terutama penggunaan tanda kutip tunggal (Input Validation).
3.    Mematikan atau sembunyikan pesan-pesan error yang keluar dari SQL Server yang berjalan.
4.    Mematikan fasilitas-fasilitas standar seperti Stored Procedures, Extended Stored Procedures jika memungkinkan.
5.    Mengubah "Startup and run SQL Server" menggunakan low privilege user di SQL Server Security tab.

sumber :  Freddy Syahrul AP_08053111074.doc