Thursday, May 17, 2007

dot project untuk manajemen proyek

satu lagi solusi open sources bagi UKM yang ingin memonitoring sebuah proyek, dan tidak sangup membeli microsof project.... maka silahakan download dotproject

Manajemen proyek dengan dot project

Untuk menangani proyek baik skala besar maupun skala kecil, diperlukan manajemen proyek yang baik sehingga bisa selesai tepat waktu dan tidak over cost. salah satu untuk menyiasati nya adalah menggunakan dotproject. Dengan dot project kita bisa membagi pekerjaan ke dalam beberapa thread dan di assign siapa yang bertanggung jawab untuk melaksanakannya. Selain itu kita juga bisa menentukan maindays dari thread yang telah kita tentukan .....

thread tadi kemudian bisa di update perkembangannya oleh orang yang telah di assign sebagai pengangung jawab thread tadi. Sehingga pengawas project dalam hal ini project manager dapat memonitoring seberapa jauh sudah proyeknya berjalan. Dan bisa mengambil banyak langkah jika ada keterlambatan dalam pengerjaan. di dotproject juga disediakan forum dikusi untuk saling berdikusi tentang project. dot project merupakan aplikasi web based ... sehingga bisa di install di internet jadi sekarang jarak bukan persoalan lagi bagi seorang project manager untuk selalu memonitoring project nya ....

Ilustrasi nyata dari dot project :

Misal kita menerima project membuat sistem informasi sekolah :
Maka menggunakan dot project project manager dapat menetukan tahap tahap pembangunan sistem informasi seperti data gathering, analisa, penyusunan ER, flow chart, kemudian implementasi. thread itu bisa di pecah pecha lagi misalnya analisa terdiri dari pembuatan kuesioner, pengolahan kuesioner dll. Setiap thread tadi dapat di assign ke analis, programmer atau user lainnya sebagai penanggung jawab. Nanti ketika analis , programmer atau pun user lainnya masuk / login ke dot project maka yang tampil adalah daftar perkerjaan yang harus dia lakukan beserta lama waktunya, kemudian mereka bisa update status dari perkerjaan mereka dalam persen. Dengan demikian project manager dapat terus mengamati perkembangan projectnya

dotproject saya lihat sudah diterapkan di beberapa software house di indonesia , untuk download dan keterangan lebih lanjut ttg dotproject ada di alamat url ini : http://www.dotproject.net/

berikut petikan salah satu testimonial dot project :

The Linux Knowledge Base and Tutorial uses dotProject not only as its primary project management tool, but also to store events and other information that we need to keep track of.

With all of the features and content we have, running the Linux Tutorial is not an easy task. We are constantly improving and adding to our already extensive offering. When we first started, all of our TODOs were managed with lists in various text files or piles of notes. As the site grew, the number of things we needed to keep track of grew considerably and our so-called management system was obviously not up to the task. After we tried a couple of different project management tools, we finally decided upon dotProject and never looked back.

We have defined projects for the major functional and content areas within the Tutorial. These serve to help organize the tasks and sub-tasks. Since we constantly upgrading and improving these site, the individual tasks come and go, but these projects never end. Currently we are managing over 50 project, with 300 tasks. With the limited number of people working on this project, it is still a daunting taks. However, without dotProject it would be near impossible.

In gratitude for the work done and how much it is helping us, we have added dotProject to the list of "powered by" icons, which you can find at the bottom of each page. Please visit us when you get a chance by pointing your browser to www.linux-tutorial.info.

Thanks for a great product!

best regards

Pitrasacha

Google Maps API ....

Google Maps API ...
Google menyediakan API untuk menampilkan peta pada halaman website. Kabarnya aplikasi ini menggunakan ajax yang merupakan gabungan dari javascript dan xml . Kita bebas menggunakan API dari google ini. Caranya mudah ... tinggal sign up untuk mendapatkan API key dari google di alamat http://www.google.com/apis/maps/signup.html . sesaat setelah kita sign up kemudian kita akan diberi API key yang akan kita embed ke aplikasi kita. saya mendapat key ABQIAAAAFvEXBy-kWNZUwAZB-k650hT0wvkpcIi06gwS5bthpHvLfHdxvxQsS2ta5jLYbn3iasZvOW9yTWV2fg Setelah dapat API key nya ... kita bisa menulis sintaks sederhana demikian :

buat script javascript

script src="" file="api&v="2&key="ABQIAAAAFvEXBy-kWNZUwAZB-k650hT0wvkpcIi06gwS5bthpHvLfHdxvxQsS2ta5jLYbn3iasZvOW9yTWV2fg
script

Buat function untuk load map

function load() {
if (GBrowserIsCompatible()) {
var map = new GMap2(document.getElementById("map"));
map.setCenter(new GLatLng(37.4419, -122.1419), 13);
}
}

Pada tag body html tambahkan fungsi onload="load()". and the last tambahkan tag div
div id="map" style="width: 800px; height: 600px"
simpan dalam extension .html dari script sederhana diatas maka hasilnya bisa di lihat di alamat berikut : http://www.sicerdas.com/gmap/ untuk keperluan yang lebih kompleks (bahkan bisa membuat tracking system)!!!!. Google menyediakan manual penggunaan API ini!! silahkan ngoprek di alamat ini : http://www.google.com/apis/maps/ kita juga bisa mengganti petanya dengan peta indonesia kok ..., , contoh lainnya adalah http://www.revolucija.hr/gmap/ Oh iya ... kita harus mempunyai IP Public buat menggunakan aplikasi ini ;) ..komentar ku .... aplikasi ini salah satu keunggulan web base aplikasi yang menggunakan ajax ... basisnya web tapi tidak ada refresh , kita juga bisa menggeser geser aplikasi map tsb dengan cepat dan baik .... akan kah aplikasi web akan dapat menggantikan typical aplikasi desktop?? dan apakah ajax itu sebenarnya ....? Kita akan coba bahas pada tulisan selanjutnya ....

best regards .....

Sunday, May 13, 2007

siteMANAGER : PHP framework for php 4 - Introduction of smart form

Dari semua framework yang bertebaran di internet, hatiku telah jatuh pada siteManager, makin lama ketergantungan dengan framework ini makin menggila ...... sayangnya framework ini untuk php4, untuk bisa jalan di atas php5 ... harus ngoprekkkk jauhh .... cape deyyyyy

Kenapa aku butuh framework , bukan kah framework bikin lebih lambat? benar aplikasi dari native coding jauh lebih cepat ketimbang menggunakan framework, tapi lihat dulu skala nya ... dan kepentingannya ...

Untuk skala proyek medium yang melibatkan lebih dari 2 programmer, saya jamin menggunakan framework itu recomended. Biasanya style coding masing masing programmer itu khan berbeda beda, nah framework ini setidaknya bisa membuat semacam standar coding, yang di sepakati. Sehingga jika kelak harus gonta ganti programmer ,it's easy .... maintenance pun jadi lebih mudah, walaupun tidak semudah java ya ... hehhe

siteManager itu terdiri dari :
  1. module system
  2. template system
  3. dan code plates
MODULE SYSTEM
Module adalah inti dari siteManager, module berisi fungsi fungsi , berisi proses, module di siteManager memiliki extension.mod, module merupakan class, dan nama class nya harus sama dengan nama file nya, kayak java gitu ... halah ....
Module bisa menggunakan module lain,bisa menggunakan library lain, module yang sudah disediakan siteManager adalah member system, login system, smart grid, smart form, nanti akan kita coba praktek kan. Keistemewaan dari siteManager adalah pada smartGrid dan smartForm nya ... cun abis ,keren

TEMPLATE SYSTEM
ini mah sama dengan sistem templating lainnya, hanya saja pada siteManager templatenya tidak menyediakan blog untuk perulangan.

CODEPLATE
hampir sama dengan template cuman lebih smart, kita bisa menggabungkan module, template, sub template, sub dari sub template

Tiga itu inti dari siteManager, sedangkan library lainnya seperti session management(menggunakan database atau file), Koneksi DATABASE(bisa memilih lebih dari satu database ) dan lain lain juga sudah ada ...... dan tinggal gunakan

siteManager bisa di dowmload pada situs : www.roadsend.com

Cara instalasi dan contoh penggunaan siteManager
1. Download dulu siteManager nya
2. Setelah itu untuk konfigurasi pada siteManager ada 2 file yang akan kita config :
  • localConfig.xsm
ada beberapa yang harus di setting pada localConfig.xsm:
setting direktori modules, lib dan templates
setting koneksi database,kita bisa memiliki lebih dari satu koneksi
setting session management,kita bisa menentukan meggunakan file atau database,keunggulan jika make database adalah ,kita bisa menyimpan apapun termasuk object ke dalam session

  • globalConfig.xsm
Yang paling penting kita setting di sini adalah variabel ini : smRoot, yang menyatakan absolute path dari direktori siteManager
  • common.inc
Pada common.inc ini yang paling penting itu kita letakkan di sini adalah :

require(dirname(__FILE__)."/../siteManager/siteManager.inc");
$adminDir = dirname(__FILE__).'/';
$SM_siteManager->loadSite($adminDir.'config/localConfig.xsm');
$SM_siteManager->dbConnect();
// use sessions
$SM_siteManager->startSessions();
//load member info
//$SM_siteManager->sessionH->flushMemberInfo();
$memberInfo = $SM_siteManager->sessionH->getMemberData();

Buat Module Member Login
testing membuat module login system dengan menggunakan library memberSystem yang ada pada siteManager, dan menggunakan smartForm :

$loginForm =& $this->newSmartForm();
$loginForm->addDirective('postScript',$_SERVER['REQUEST_URI']);
$loginForm->addDirective('requiredBadMsg','Masih kosong,isi dulu');
$loginForm->addDirective('showRequiredHelp',true);
$loginForm->loadTemplate("loginForm");

$un =& $loginForm->add('userName','','text',true);
$un->configure(array('size'=>'15','maxLength'=>'10'));

$pw =& $loginForm->add('passWord','','text',true);
$pw->configure(array('size'=>'15','maxLength'=>'10','passWord'=>true));

$loginForm->add("submitButton","","submit");
$loginForm->setArgs('submitButton',array('value'=>' Login '));

// run the form
$loginForm->runForm();

// was data verified?
if ($loginForm->dataVerified()) {
$passMd5 = md5($loginForm->getVar('passWord'));
$user = $loginForm->getVar('userName');
// attempt to login
if ($this->sessionH->attemptLogin($user,$passMd5)) {
// they logged in succesfully
} else {
// unsuccessful login
}
} else {
$this->say($loginForm->output());
}

Gimana dengan smartForm di atas ... gak kelihatan jagoannya ya .... nah sekarang bikin modul registrasi masih dengan smartForm .... biasanya kalo pada registrasi form itu yang perlu di lakukan adalah pengecekan keunikan dari username, terus penulisan alamat email yang benar, pembatasan username, mengambil record dari database ... hal itu cukup mudah menggunakan smartForm

Untuk pengecekan field yang tidak boleh kosong cukup begini
$newForm->add('userName','Username','text',true,'',array('size'=>'15','maxLength'=>'20'));

untuk membatasi karakter yang boleh masuk cukup kasih ereg seperti ini
$newForm->addFilter('userName','preg','Username antara 3 sampai 20 karakter',array('pattern'=>"/^\w{".$this->directive['minUserNameLen'].",".$this->directive['maxUserNameLen']."}\$/"));

untuk pengecekan keunikan di database kita bisa tambahkan filter seperti ini
$newForm->addFilter('userName','dbUnique','Maaf, Username sudah terdaftar',array('tableName'=>$this->directive['tableUser'],'checkField'=>$this->directive['userLoginField']));

Untuk pengecekan email misalnya ..... cukup begini :
$newForm->addFilter('email','email','Alamat email tidak benar');

Dan masih banyak lagi fungsi filter lainnya ... dan kita pun bisa bikin sendiri liberary untuk filter ...
Form tersebut jika isian tidak sesuai dengan filter nya maka akan memunculkan informasi yang sesuai dengan pesan error yang kita tuliskan juga pada filter itu seperti : maaf username sudah terdaftar ...., simple ,fast !!!

Oh ya kurang nih gimana cara menampilkan data dari database ke dalam select box , begini doang

$kota =& $newForm->add('{nama field}','{caption}','dbSelect',false);
$kota->configure(array( 'dataBaseID' => {koneksi id database},
'tableName' => {nama tabel},
'whereClause' => {nama tabel},
'dataField' => {field primary key},
'viewField' => {kolom yang ingin di tampilkan},
'orderBy' => {order by}));

Yeahhhhhhhhhhhhhhhhh .... smartForm ...........so how about smartGRID...... ntar lagi ahhhh

Saturday, May 12, 2007

ANDA INGIN KAYA ? BACA TIPS INI

Dulu aku pernah ketemu dengan seorang pengusaha. AKu kagum dengan ide ide nya, dia penuh dengan ide... aku tanya ke beliau ... PAK apa yang harus saya lakukan agar saya bisa menjadi orang kaya ... beliau bertutur ada 3 syarat yang harus di miliki untuk bisa menjadi kaya pada jaman seperti ini :
  1. Kita harus memiliki massa
  2. Kita harus memiliki produk
  3. Kita harus memiliki websites
Kemaren baru membaca postingan blog dari pak romy http://romisatriawahono.net/ yang judulnya 6 tahap membangun komunitas maya , saya jadi mikir ternyata yang di maksud pengusaha tadi mungkin senada dengan yang dikatakan pak romy yaitu membangun community building yang menurut pak romi terdiri dari tahapan : ISeSoSBI = Identification - Segmentation - Solution - Selling - Branding - Innovation.

Menurut yang saya tangkap dari pengusaha tersebut dengan apa yang dikatakan pak romy sebenarnya sejalan :
  • identification, segementation bisa diartikan : kita harus memiliki massa
  • solution : kita harus memiliki produk yang unik
  • selling, branding dan innovation : Akan lebih mudah dan cepat jika kita memiliki websites
Well menurut kacamata saya itu klop .... tapi melaksanakan hal diatas tentu lah tidak mudah, kadang orang harus bertahun tahun untuk membentuk massa, belom lagi kita menciptakan solution atau create sebuah produk yang sesuai dengan massa tadi, kemudian baru lah kita buat tools pembantunya yaitu websites

Websites menghubungkan orang di seluruh dunia, dengan websites kegiatan selling, branding dan innovation tentu akan jauh lebih mudah

What the next step? lommm tau .. punya massa aja tidak. But aku jadi tertarik dengan mengembangkan ekonomi kerakyatan, berapa banyak orang yang yang butuh tanaman obat , tanaman hias yang ada di indonesia dan berapa orang yang bisa memproduksi nya, atau berapa orang yang menyukai hasil kerajinan tangan atau hasil lainnya dari ukm ukm di indonesia, dan berapa banyak ukm yang sanggup menghasilkan produk berkualitas yang sesuai dengan keinginan pasar dunia. Knapa tidak kita ciptakan aja komunitas seperti itu, kita juga bisa bikin semacam etalase bagi yang tertarik dengan membangun sebuah websites, disamping kita memajukan ukm ukm ini ....

Gak tau ideku ini udah ada atau beloommm, tapi setelah mendengar dan melihat, banyak hal jadi terpikirkan. SO bagaimana kita bisa menjadi kaya? sebaiknya sih jangan kaya tapi cerdas finansial. Orang kaya bisa membikin yang kaya tambah kaya, yang miskin tambah miskin,sedangkan orang yang cerdas finansial bisa membuat semua orang kaya ....

GETO ...... kaliiiiiiiiiii

PROMELA WITH SPIN


PROMELA setauku merupakan bahasa permodelan untuk memodelkan kelakuan sebuah proses atau sistem. Biasanya interaksi antara manusia dan komputer, atau komputer dengan komputer itu enaknya di buat modelnya dulu kali yaaa ... lantas gimana dengan hubungan manusia dengan Tuhan, manusia dengan manusia, dan manusia dengan hewan .... perlu kali yaaaa

Tugas Kuliah : Bikin permodelan TFTP menggunakan SPIN ....


Instalasi SPIN, mau make xspin gak? kalo mau make xspin kita harus donwload dulu cygwin, install dan sertakan library c compiler dan tcl interpreter. cygwin bisa di download pada url http://www.cygwin.com/, kemudian lakukan instalasi

duh ... baiknya pelajari dulu dari contoh yang sudah ada. Vending Machine. Vending machine itu kayak mesin penyedia minuman gituh. Minuman yang di sediakan sesuai dengan coin yang di masukkan ke dalam mesin. Jadi misal kalo kita masukin coin 50 maka yang muncul itu teh, kalo kita masukin coin 100 yang muncul coffee. Di indonesia ada gak ya .... mesin beginian ... yang bisa ngeluarin es dawet basi, es cendol basi, Bakso gituhhh, tapi kalo di indonesia mungkin tanpa masukin coin pun udah ngocor sendiri ... hahaha

So let's we start dari deskripsi vending machine di atas maka promela nya bisa seperti ini:

mtype={coin50,coin100,tea,coffee}
chan coin_channel = [1] of {mtype}
chan drinks_channel = [1] of {mtype}

proctype customer {
if
:: coin_channel!coin50;drinks_channel?tea;
:: coin_channel!coin100;drinks_channel?coffee;
fi
}

proctype vender {
if
::coin_channel?coin50;drinks_channel!tea;
::coin_channel?coin100;drinks_channel!coffee;
fi
}

init{run customer;run vender;}

Kira kira promela di atas itu kalo di bahasa indonesiakan gini kali ya :
  1. customer masukin coin5o => coin_channel!coin50
  2. vending machine menerima coin50 => coin_channel?coin50
  3. vending machine mengirim tea => drinks_channel!tea
  4. customer menerima tea => drinks_channel?tea
sampe sini sih paham .... tapi tugas aku itu TFTP , trivial file transfer protocol, jadi harus baca dulu dokumen rfc 1350. Intinya sih simple ya ada dua proses yaitu WRQ dan RRQ

WRQ (Write Request)
Client mengirimkan wrq ke server , jika server mengizinkan maka server akan membalas nya dengan ack0, client kemudian akan membalasnya dengan mengirim data0, kemudian server mengirimkan ack1 yang artinya client bisa mengirimkan data1

RRQ(Read Request)
Bedanya dengan WRQ, jika client mengirimkan RRQ maka server akan langsung memberikan data0

Kira kira begitu .... nah gimana sekarang promela nya ... yang sederhana aja ah, kalo yang mendekati real komunikasi FTP nanti tanya ama mas yazid aja ... sekarang yang kira kira aja ....
loading dulu ...ahhhh

Wah waktunya gak cukup buat loading terlalu lama, FSM nya gak kebayang .... daripada gak ngumpul tugas nih hahahha mendingan aku bikin kayak gini aja :

RRQ nya jadi kayak gini

Karena aku lom berhasil instalasi xspin , sebab install cygwin aja gagal terus ya terpaksa gak pake xspin

mtype = {DATA0,DATA1,RRQ,ACK0,ACK1,DATAreq}
chan ch_rrq = [1] of {mtype};
chan ch_data = [1] of {mtype}; chan ch_status = [1] of {mtype}; chan SAP1 = [1] of {mtype}; proctype client() {
byte state;

do

::SAP1?DATAreq;ch_rrq!RRQ;
if
::ch_data?DATA0;ch_status!ACK0; ::ch_data?DATA1;ch_status!ACK1;
fi
od

}

proctype server() {
do ::ch_rrq?RRQ->ch_data!DATA0;
if
::ch_status?ACK0 -> ch_data!DATA1;
::ch_status?ACK1 -> ch_data!DATA0;
fi
od
}


proctype user() {
byte n=0;
do
::(n <>SAP1!DATAreq;n=n+1
::n==10->break

od

}

init {run user();run client();run server();}


WRQ nya jadi kayak gini :

mtype = {DATA0,DATA1,WRQ,ACK0,ACK1,DATAupload}
chan ch_wrq = [1] of {mtype};

chan ch_data = [1] of {mtype};
chan ch_status = [1] of {mtype};
chan SAP1 = [1] of {mtype};
proctype client() {
byte state;
do

::SAP1?DATAupload;ch_wrq!WRQ;
if

::ch_status?ACK0;ch_data!DATA0;
::ch_status?ACK1;ch_data!DATA1;
fi

od
}


proctype server() {
do
::ch_wrq?WRQ->ch_status!ACK0;
if
::ch_data?DATA0 -> ch_status!ACK1;

::ch_data?DATA1 -> ch_status!ACK0;
fi
od
}

proctype user() {
byte n=0;
do
::(n <>SAP1!DATAupload;n=n+1
::n==10->break
od

}

init {run user();run client();run server();}

Benar tidaknya gak tau nih ... setidaknya aku sudah mencoba ... nanti kita minta punya mr yazid gimana ......
BAKAAAAAAAAAAAAAAAAAAAAAAA


Securing Your PHP - Register Global Vulnerabilities

Ada bener nya juga kali ya PHP itu singkatan dari pretty hard to protect. Karena mudah dan menyenangkan nya php untuk di pelajari dan di gunakan sehingga banyak programmer php melupakan keamanan aplikasi yang di buat nya .... sehingga jangan heran jika web berbasis php paling sering kena serangan hack

Bahkan ada nasihat dari pendekar php, untuk mengurangi agar aplikasi berbasis php itu aman adalah dengan memberikan pendidikan yang baik bagi programmer nya untuk mendesign sebuah aplikasi. Benar boroknya php lagi di bongkar dengan adanya php month of the bugs, tapi tetep saja penyebab aplikasi terkena hack adalah masalah design aplikasi yang buruk. Apakah php aman untuk digunakan membuat sebuah aplikasi web jawabannya bisa ya , jika kita tepat dalam mengkonfigurasi dan mendesign aplikasi kita, jawabannya bisa tidak jika kita tidak bisa konfigurasi dengan baik dan buruk dalam mendesign aplikasi kita.

Beberapa hal yang perlu di perhatikan adalah :

  • Input Validation
  • Cross-Site scripting prevention
  • SQL injection
  • Preventing code injection
  • Command injection
  • Session security
  • Securing file access
  • The last is tips & trick to secure your application
Kita coba mulai dari awal saja ahhh yaitu

Register Globals

Pada umumnya aplikasi berbasis web selalu menggunakan input data baik GET(via url) maupun POST(via form). Banyak para attacker memanfaatkan hal ini untuk niat niat jahatnya, dengan cara memasukkan inputan yang tidak wajar ...

Beberapa masalah dengan input di antaranya :

Bisanya programmer php pemula menggunakan settingan default register_global pada php.ini. Jika register global on artinya variabel yang kita lempar via url akan membuat sebuah variabel sekaligus meng-assign isi dari variabel itu. Sebagai contoh : script.php?mode=secure, maka secara otomatis akan terbentuk variabel $mode dengan value nya 'secure'

Masalah pertama yang timbul akibat register global ini adalah, dapat terjadi konflik variabel yang masuk. Value yang ada pada sebuah variabel dapat dari berbagai sources, mulai dari GET,POST, cookies, server environment variabel, dan system environment variabel. sebagai contoh, kita melempar variabel $id pada url, dan kita juga memiliki cookies $id, kondisi ini memaksa php melakukan merge, sehingga ada informasi yang hilang, value dari $id jadi bisa tidak valid, misal yang dari url assign $id = 3, sedang cookies mengatakan $id = 5, mana yang akan kita gunakan ???

Nah itu tampaknya tergantung dari setting gpc_order di php.ini ,gpc = menggambarkan urutan dari prioritas variabel , Get, Post dan Cookies, pada contoh diatas maka $id akan berisi 5, sebab cookies memiliki prioritas lebih tinggi di bandingkan Get ...

Solusi dari masalah di atas, mungkin dengan memberikan prefix untuk variabel, sebagai contoh variabel dari post kita kasih prefix p jadi $p_id, sedang untuk cookies kita kasih prefix c. Cara ini bisa di lakukan tapi tidak reliabel di terapkan untuk aplikasi yang kompleks dan menggunakan banyak variabel

Contoh berbahaya dengan membiarkan register_global on adalah script seperti berikut :

if (is_authorized_user()) {
$auth = TRUE;
}

if ($auth) {
/* display content intended only for authorized users */
}


Dengan memberikan variabel $auth dengan inputan apa pun baik get maupun post maka kita akan bisa masuk sebagai authorized user ... bisa dengan script.php?auth=true, atau dengan menyisipkan input form yang bernama auth dengan value true, contoh .....

ini sih terjadi karena php tidak bisa/susah mendetect uninitialized variabel. Satu satu nya jalan adalah dengan men-set erorr reporting E_ALL pada php.ini, itu pun dengan batasan akan mengeluarkan error jika php mengeksekusi uninitialized variabel itu.

OK kita berhasil mendetek uninitialized variabel, tapi itu pun belonnn cukupppp ... aduh capek ya !!! mau bukti lihat script di bawah ini ...

$del_user[] = “95”; // add the only desired value
foreach ($del_user as $v) {
mysql_query(“DELETE FROM users WHERE id=”.(int)$v);
}

kita udah assign $del_user khan .... tapi apa yang terjadiii jika dari url kita panggil seperti ini script.php?del_user[]=1&del_user[]=2 ... hahah jadi hancurlah impian kita ... tuhh kannn , gimana menghindarinya sih? sebenarnya simple aja : dengan mendeklarasikan baris

$del_user =array();

setidaknya dengan deklarasi seperti itu menghindari injection ..

Sudah desperate dengan php? jangan dulu, sekarang kita coba solusinya dulu

An Alternative to Register Globals: Superglobals

Karena dengan membiar kan register_global aktif menimbulkan bahaya yang sangat mengerikan maka php 4.1 memperkenalkan super global variabel yang terdiri dari $_GET, $_POST, $_COOKIE, $_SERVER, $_ENV, nah silahkan disabled register global anda dan silahkan gunakan super global variabel

Alternatif lainnya dengan menggunakan constanta, ini bisa menghindari masalah register_global. Lihat contoh ini :

define(‘auth’, is_authorized_user());
if (auth) {
/* display content intended only for authorized users */
}

OK khan .... tapi ... pasti ada tapinya ... jangan pula kayak gini :

if (is_authorized_user())
define(‘auth’, TRUE);
if (auth) // {
/* display content intended only for authorized users */}

Kenapa ... sok aja coba karena auth nya itu akan selalu bernilai TRUE, kondisional expression terhadap undefined constant di php itu akan menghasilkan nilai true ... SIAL!!!! masih ada yang sial juga ... nih :

The $_REQUEST Trojan Horse

Ok di atas di sebutkan dengan ada nya super global variabel bisa mengatasi masalah dengan register global.... tapi be aware dengan super global variabel yang bernama $_REQUEST ... ini mah sama aja dia gabungin variabel dari post , get dan cookie ....maksudnya sih biar simpel tapiii.... bahaya juga. Bisa aja sih digunakan dengan mengecek dulu variabel yang lainnya ... contoh skrip di bawah ini :

if (!empty($_REQUEST[‘id’]) && isset($_COOKIE[‘id’]))
unset($_REQUEST[‘id’]);

}

Dari skrip di atas jadi di cek dulu $id di cookies ... tapi lieur juga oi aku , mendingan nih ya ... untuk safe nya gini aja lah udah :

if (!empty($_GET[‘id’]))
$id = $_GET[‘id’];
else if (!empty($_POST[‘id’]))
$id = $_POST[‘id’];
else
$id = NULL;

skrip di atas ini lebih secure ketimbang skrip di bawah ini :

if (!empty($_REQUEST[‘id’]))
$id = $_REQUEST[‘id’];
}

OK ... sekarang udah makin berdebar debar ... ini baru secuil saja, tapi ini banyak kita jumpai terjadi pada php pemula ... khan? biasanya php pemula sudah cukup senang dengan jalannya program tapi melupakan hal hal di atas .... itu baru dikittt ... kita akan coba lanjutkan dengan bahasan lainnya .... jangan menyerah HIDUP PHP!!! hidup pretty hard to protect hahah ...

Next On Securing Your PHP : INPUT VALIDATION