Tuesday, December 30, 2008

Script pengatur waktu Session, Logout Otomatis

Banyak hal terjadi jika seseorang telah berhasil login sebagai user, dan tentunya login ini ada ketika user akan memanfaatkan layanan dari suatu website, bukan karena sebab yang lain, seperti tingkat sekuritas yang buruk. Selalu ada masa idle. Idle di sini bermakna user tidak melakukan apa-apa sama sekali di website tersebut, tidak berpindah halaman, tidak memasukkan input pada form manapun, dan tidak ada hal apapun yang menyebabkan sebuah halaman website terrefresh, dengan kata lain user tidak melakukan apa pun pada website yang sedang dia kunjungi. Sungguh user yang aneh. :D~~. Tapi hal seperti ini dapat terjadi jika user sedang asik mengunjungi website yang lain, dan lupa akan website yang dia kunjungi sebelumnya. Tentunya keadaan user pada website yang dikunjungi sebelumnya dianggap sebagai condition yang idle oleh website tersebut. Tidak ada hal apapun yang terjadi di website sebelumnya. Atau kondisi lain, dimana seorang user yang telah 10 menit meninggalkan pc-nya dalam keadaan lupa melogout accountnya. Sungguh terlalu. Di sinilah fungsi pengatur waktu session benar-benar dibutuhkan.

Ada dua cara untuk mengatur waktu session, yang pertama adalah merubah konfigurasi session timeout pada php.ini, cara yang terakhir yaitu dengan memanfaatkan fungsi time() dan variable session yang telah teregistrasi, dengan kata lain cara yang terakhir ini adalah merancang barisan code yang dapat mengatur waktu session. Penulis tidak akan menjelaskan cara yang pertama. Tapi yang akan penulis jelaskan adalah cara yang kedua. Penulis akan mengambil sebuah contoh kasus, ini untuk memudahkan penjelasan secara logika, dan penjelasan alur dari cara kerja script yang akan dibuat.
Kasusnya seperti ini, “Ketika user telah berhasil login, akan ada sebuah session yang digunakan sebagai patokan untuk membandingkan berapa lama user telah berada pada halaman website tersebut. Apabila waktu time() yang berjalan lebih besar dari nilai session dari variable yang dijadikan sebagai patokan nanti maka user tersebut akan secara otomatis terlogout”.

Secara struktur, algoritmanya akan seperti ini :

  1. Sediakan sebuah variable x, berisi waktu sekarang ditambah 30 detik.
  2. Jadikan variable x tersebut sebagai session, yang akan membypass valuenya pada setiap halaman, dengan kata lain, isi variable x tersebut dapat ditampilkan di halaman mana pun.
  3. Bandingkan waktu sekarang dengan nilai dari variable x tersebut.
  4. Jika waktu sekarang lebih kecil dari nilai variable x tersebut, maka si user masih dalam keadaan login.
  5. Jika waktu sekarang lebih besar dari nilai variable x tersebut, maka keadaan si user adalah logout.
  6. Jika user melakukan refresh halaman, berpindah halaman, mengisi form, sebelum masa sessionnya habis maka waktu login di tambah 10 menit berikutnya.

Ya, untuk algoritma di atas penulis bagi menjadi 2 function, yakni function login_validate() dan login_check(). Langsung saja persiapkan script yang dibutuhkan :

File index.php :


require_once "functions.php";
if (( $_POST['username'] == 'admin' ) && ( $_POST['password'] == 'admin'))
{
$_SESSION['user'] = $_POST['username'];
login_validate();
header("location: admin.php");
}

else if ( empty($_POST['username']) && empty($_POST['password']) )
{
header("location: login.php");
}

?>

Selanjutnya file intinya yaitu,
functions.php :


session_start();

function login_validate() {
$timeout = 30;
$_SESSION["expires_by"] = time() + $timeout;
}

function login_check() {
$exp_time = $_SESSION["expires_by"];
if (time() < $exp_time) {
login_validate();
return true;
} else {
unset($_SESSION["expires_by"]);
return false;
}
}
?>

Kemudian admin.php, barisan code dalam admin.php ini penulis ibaratkan seperti kondisi dari admin yang telah berhasil login. Jika lebih dari 30 detik maka user secara otomatis akan di logout. Nilai 30 detik ini diambil dari variable $timeout yang ada di functions.php.

File Admin.php :


require_once "functions.php";

if (ISSET($_SESSION['user']))
{
if (!login_check()) {
header("Location: logout.php");
exit(0);
}
else {
echo "Jika tidak ada kegiatan sama sekali, anda akan logout secara otomatis ... ";
}
}

else
{
echo "Anda tidak berhak untuk ngapa-ngapain ... !! :D";
}

?>

Selanjutnya halaman login usernya, login.php :








username
password






Terlihat jelas pada baris ke 4 di atas, halaman login page memiliki action, menuju index.php, yang kemudian menghasilkan 2 variable POST, yaitu $_POST[‘username’], dan $_POST[‘password’]. Kedua variable inilah yang kemudian dicek pada halaman index.php.

Dan yang terakhir adalah logout.php :


require_once "functions.php";

unset($_SESSION['user']);
session_destroy();
header("location: login.php");

?>


Cara kerja source code di atas cukup sederhana, lihat barisan code index.php,

......
if (( $_POST['username'] == 'admin' ) && ( $_POST['password'] == 'admin'))
{
$_SESSION['user'] = $_POST['username'];
login_validate();
header("location: admin.php");
}

else if ( empty($_POST['username']) && empty($_POST['password']) )
{
header("location: login.php");
}
....

Penjelasannya adalah sebagai berikut, Jika user memasukkan username dan password yang cocok ( dalam kasus ini username dan passwordnya adalah admin ) maka user akan diberikan sebuah variable session, yakni $_SESSION['user'], dan akan ditambahkan sebuah variable baru yang nantinya variable ini berfungsi sebagai timer, yakni

$timeout = 30;

Variable tersebut berada dalam fungsi login_validate() pada script functions.php. Sedangkan masih dalam fungsi login_validate, lompat ke barisan code dibawahnya yaitu :

$_SESSION["expires_by"] = time() + $timeout;

Disinilah letak timer yang sebenarnya, kehebatan dari session adalah dapat melakukan passing value walaupun halamannya berbeda. Jelasnya $_SESSION["expires_by"] mengambil nilainya dari waktu ketika user pertama kali login yaitu time() di tambah dengan 30 detik kedepannya, yakni isi dari variable $timeout.

Nah, dari situ, lihat ke bagian fungsi yang ada di bawahnya, pada functions.php :

...
function login_check() {
$exp_time = $_SESSION["expires_by"];
if (time() < $exp_time) {
login_validate();
return true;
} else {
unset($_SESSION["expires_by"]);
return false;
}
}
....

Ya, lihat baris :
$exp_time = $_SESSION["expires_by"];

Varibale $exp_time itu memiliki nilai dari $_SESSION["expires_by"],
Untuk kejelesannya penulis berikan contoh seperti ini, jika user login pada waktu jam 5, maka $_SESSION["expires_by"] berisi jam ke 5, menit ke 0, dan detik ke 30. Dan secara alami pun diketahui bahwa yang namanya waktu pasti akan terus bertambah tentunya. Tapi karena berada dalam fungsi, variable $_SESSION["expires_by"] ini tidak akan bertambah, walaupun time() terus berlanjutnya.

Lompat ke baris selanjutnya :
if (time() < $exp_time) {
login_validate();
return true;

Dalam baris tersebut sederhananya adalah, jika waktu yang sekarang berjalan lebih kecil nilainya dari nilai yang ada pada $_SESSION["expires_by"], maka tambahkan 30 detik lagi, dan jika waktu pada time() sama dengan nilai $_SESSION["expires_by"] maka user akan otomatis logout

Selanjutnya ...
...
else {
unset($_SESSION["expires_by"]);
return false;
}
...

Jika waktu yang sekarang berjalan itu lebih besar dari nilai yang ada pada $_SESSION["expires_by"], maka lakukan logout.

Script tersebut dapat di download di sini
http://networkandgame.890m.com/ilmuwebsite/article/session-time-by-alk.zip
Cukup jelas ya. Jika ada yang di tanyakan, silahkan layangkan pertanyaan ke email penulis.

Redirect Halaman Kompleks

Lagi-lagi penulis coba untuk membayar hutang. :D. Hutang mengenai tutorial yang membahas redirect halaman secara kompleks. Sebelum menuju inti pembahasan, penulis akan beri penjelasan apa dan bagaimana contoh kasus dari redirect halaman secara kompleks ini.
Mungkin ada sebagian orang yang pernah mencoba searching di google mengenai artikel yang dia cari, namun ketika mendapatkan artikel tersebut, web tersebut hanya membolehkan user yang sudah teregistrasi saja yang dapat mengakses artikel tersebut. Maka, langkah selanjutnya yang dilakukan oleh user tersebut adalah meregistrasikan dirinya untuk menjadi member pada website tersebut, pada form yang letak halamannya berbeda dengan artikel yang dicari. Namun setelah proses registrasi selesai, dan proses login berhasil, user secara otomatis di redirect ke halaman yang dia tuju sebelumnya. Ini adalah contoh kecil dari redirect kompleks. Contoh lainnya, ketika user yang akan mencoba untuk mendownload sebuah file pada halaman tertentu di suatu website, user tersebut diharuskan untuk login terlebih dahulu, tapi setelah login user langsung diredirect secara otomatis menuju halaman download. :D. Pada tutorial kali ini, penulis akan coba jawab itu berbagai persoalan tersebut. Mari .. mari ... :D

Ya, persiapkan terlebih dulu databasenya :

create database simple_cms ;
use simple_cms ;
create table user( id int(5) PRIMARY KEY auto_increment, username varchar(20), password varchar(50));
create table article (id int(5) PRIMARY KEY auto_increment, penulis varchar(20), judul varchar(200), isi text);

insert into user values ('','admin',md5('admin'));
insert into article values('','Loka Dwiartara','Kegantengan Abadi','Kegantengan abadi terpancar dari kekerenan sejati. Aura kegantengan selalu terpancar dari kerennya seseorang. :D. Kadang banyak yang berpikir keindahan secara fisik itu melebihi dari segalanya. Kita tahu bahwa b_scorpio itu tidak ganteng, tapi setidaknya tolong hargai dia :D'), ( '','Loka Dwiartara','PHP is powerfull easy language ... ', 'Kekerenan php dalam menangani pengembangan sistem informasi berbasis website patut di acungi 4 jempol kaki dan tangan, kehebatannya melebihi b_scorpio yang tidak pandai menggaet i#a, wanita yang dia suka. ;D~~~, peace ... damai ... ') ;

Selanjutnya, config.php :

$host = "localhost";
$username = "root";
$password = "";
$database = "simple_cms" ;

$connect = mysql_connect($host, $username, $password);
mysql_select_db( $database , $connect) or die ("MySQL is error!!");
?>

Kemudian, halaman login.php :






username
password






Selanjutnya, file cek.php, disinilah redirect kompleks halaman berada :


session_start();
require_once "config.php";

if (ISSET($_POST['username']) && ISSET($_POST['password']) )
{
$username = $_POST['username'];
$password = md5($_POST['password']);
$session_halaman = $_SESSION['halaman'];

$cekuser = "select username, password from user where username = '$username' and password = '$password'";
$query_cekuser = mysql_query($cekuser);
$exist = mysql_num_rows($query_cekuser);

if ($exist >= 1)
{
$_SESSION['user'] = session_id();
header("location: index.php?view=page&id=$session_halaman");
}

else
{
header("location: login.php");
}

}

?>

Dan halaman index.php, untuk menampilkan artikelnya :


session_start();
require_once "config.php";
if (!ISSET($_REQUEST['id']) )
{
$list_article = "select * from article";
$query_list_article = mysql_query($list_article);
echo "

Article Today

";

if (ISSET($_SESSION['user']))
{
echo "

Welcome back User. Do you want logout ? :D~~

";

}


while ($showlist = mysql_fetch_array($query_list_article))
{
$id = $showlist['id'];
$penulis = $showlist['penulis'];
$judul = $showlist['judul'];
$isi = $showlist['isi'];
$panjangartikel = strlen($isi);
$isi_dipotong = substr($isi, 0, 60);
$isi_fix = substr($isi, 0, strrpos($isi_dipotong, " "));
$isi_fix .= "...";

echo "$judul

Oleh : $penulis

$isi_fix selengkapnya



";


}
}

else if (ISSET($_REQUEST['view']) && ISSET($_REQUEST['id']) )
{

$id = $_REQUEST['id'] ;
if (!ISSET($_SESSION['user']))
{
$_SESSION['halaman'] = $id ;
echo "Login dulu dong di sini";
}

else
{
$list_article = "select * from article where id = '$id' ";
$query_list_article = mysql_query($list_article);

while ($showlist = mysql_fetch_array($query_list_article))
{
$id = $showlist['id'];
$penulis = $showlist['penulis'];
$judul = $showlist['judul'];
$isi = $showlist['isi'];

echo "

Article Today

";

echo "$judul

Oleh : $penulis

$isi



";


}

echo "Kembali...";
}

}

?>


Terakhir adalah, file logout.php :


session_start();
unset($_SESSION['user']);
session_destroy();
header("location: index.php");
?>

Hmmm.. panjang juga scriptnya. :D~ Penulis coba jelaskan beberapa baris yang penting saja. Lihat ke halaman index.php, di situ terdapat baris seperti ini :

....
else if (ISSET($_REQUEST['view']) && ISSET($_REQUEST['id']) )
{

$id = $_REQUEST['id'] ;
if (!ISSET($_SESSION['user']))
{
$_SESSION['halaman'] = $id ;
echo "Login dulu dong di sini";
}


...

else if (ISSET($_REQUEST['view']) && ISSET($_REQUEST['id']) )
Ini berarti, jika user mengklik salah satu artikel di halaman index,

if (!ISSET($_SESSION['user']))
dan jika user belum login,

$_SESSION['halaman'] = $id ;
maka, rekam halaman yang akan dibuka, simpan halaman tersebut ke dalam variable session.

echo "Login dulu dong di sini";
Persilahkan user untuk login dulu.

Nah selanjutnya, jika user telah login maka artikel langsung di perlihatkan seluruhnya, seperti pada baris ini

....
else
{
$list_article = "select * from article where id = '$id' ";
$query_list_article = mysql_query($list_article);

while ($showlist = mysql_fetch_array($query_list_article))
{
$id = $showlist['id'];
$penulis = $showlist['penulis'];
$judul = $showlist['judul'];
$isi = $showlist['isi'];

echo "

Article Today

";

echo "$judul

Oleh : $penulis

$isi



";


....

Kemudian untuk script cek.php

if (ISSET($_POST['username']) && ISSET($_POST['password']) )
Jika user telah mengisi password dan username,

....

$cekuser = "select username, password from user where username = '$username' and password = '$password'";
maka buat sebuah query yang akan menyeleksi apakah username dan passwordnya ada.

...

$query_cekuser = mysql_query($cekuser);
Jalankan querynya ...

$exist = mysql_num_rows($query_cekuser);
Apakah username dan password yang dimasukkan tersebut ada dalam database?

if ($exist >= 1)
{
Jika ada,

$_SESSION['user'] = session_id();
maka buat session baru untuk user

header("location: index.php?view=page&id=$session_halaman");
Redirectkan si user ke halaman yang dia tuju sebelumnya ... Ya, disinilah letak dari redirect kompleksnya. :D. Cukup manfaatkan saja session yang ada untuk meredirect user ke halaman yang dituju.

}

else
{
header("location: login.php");
jika username dan password salah, persilahkan user untuk login ulang.

}

}
Untuk screenshoot demonya seperti ini :


Ini adalah halaman pertama kali


Ketika salah satu link akan diklik, maka user diperintahkan untuk login terlebih dahulu


Setelah login berhasil maka user secara otomatis langsung di redirect ke halaman tujuan yang awal.


Yup, penulis kira sudah cukup jelas untuk redirect kompleks. Jika ada yang ditanyakan silahkan kirim email ke alkemail@gmail.com. Selamat mencoba.

Script tersebut dapat di download di sini
http://networkandgame.890m.com/ilmuwebsite/article/redir-complex-by-alk.zip

Greetz : b_scorpio, abuzahra, peterpanz, kandar, phii_, syahrilrohman, ivan, dr.emi, safril, najwa. Special for jojo. :). Hi, Jo! Have a nice day.

Monday, December 22, 2008

Sistem Quota ala Speedy dengan Squish

Hufff, dah lama kita nggak ketemu. :D~~ Kira-kira beberapa bulan yang lalu, saya mencoba mencicipi layanan speedy personal, dan nggak kerasa, baru sekitar 10 hari, bandwithnya sudah overquota, lebih 7 mB kalo nggak salah. Padahal penulis sendiri waktu itu hanya diberikan jatah 1 GB perbulannya. Wekzz !! Maklum penulis termasuk orang yang rakus dalam pemakaian bandwith. :D. Download download ... !!! Terpaksa merogok kocek saku sang mahasiswa yang notebenenya selalu bokek :D~~~.


Tapi berhubung sakunya bolong mau bagaimana lagi, terpaksa pemakaian internet di rumah di cabut. :(~

Kali ini penulis mencoba untuk menjelaskan sebuah system quota ala speedy, dengan pembatasan berdasarkan waktu dan kapasitas pemakaian tentunya.

Kita ambil contoh : user A di berikan batas waktu pemakaian 5 jam, dan 20 MB perharinya. Walaupun sebelum 5 jam kapasitasnya sudah full maka sang user terpaksa menunggu hari berikutnya untuk bisa kembali bermain. Istilah kerennya yakni Squished.

System quota ini menggunakan sebuah paket aplikasi tambahan, Squish. Yang penulis gunakan adalah squish versi 0.0.18.

Di tutorial ini penulis menggunakan distro fedora core 4, yang didalamnya telah terinstall paket squid. Berikut adalah peralatan yang kita butuhkan nantinya :

gd-2.0.33-2.i386.rpm
perl-GD-2.35-1.fc4.i386.rpm
squish-0.0.18.tar.gz

Download dulu paket-paket di atas :
# wget http://h1.ripway.com/ilmuwebsite2/gd-2.0.33-2.i386.rpm
# wget http://h1.ripway.com/ilmuwebsite2/perl-GD-2.35-1.fc4.i386.rpm
# wget http://h1.ripway.com/ilmuwebsite2/squish-0.0.18.tar.gz

Kemudian Install paket gd-2.0.33-2.i386.rpm, dan perl-GD-2.35-1.fc4.i386.rpm
# rpm –ivh gd-2.0.33-2.i386.rpm
# rpm –ivh perl-GD-2.35-1.fc4.i386.rpm

Setelah itu ekstrak file squish-0.0.18.tar.gz :
# tar –xzvf squish-0.0.18.tar.gz

Terdapat sebuah direktori baru disana, squish-0.0.18, kemudian masuk kedalamnya, kemudian install :
# cd squish-0.0.18
# make install

Pindah ke direktori di mana squish berada :
# cd /usr/local/squish/

Kemudian jalankan option run pada file squish.pl, ini dilakukan untuk membuat sebuah tampilan awal dari pemakaian bandwith :

# ./squish.pl --install

Dengan fasilitas crontab tambahkan sebuah perintah baru untuk daemon crond :

# crontab -e
5,10,15,20,25,30,35,40,45,50,55 * * * * /usr/local/squish/squish.cron.sh

Kemudian tekan ESC :x!

Jalankan perintah baru tersebut untuk pertama kalinya :

# /usr/local/squish/squish.cron.sh

Kemudian kita tambahkan authentikasi ncsa_auth pada file konfigurasi squid.conf yang terletak di /etc/squid/squid.conf :

# nano /etc/squid/squid.conf
# baris ini ditambahkan di area authentikasi

auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours

# yang ini ditambahkan pada area acl
acl ncsa proxy_auth REQUIRED

# kemudian simpan
Setelah itu edit di bagian bawah baris kalimat ini

### added by squish (begin)

Menjadi seperti ini :

# acl's for squish - autodetected, sometimes
acl SQUISHLOC dst ns.multimedia.com
acl SQUISHED1 proxy_auth -i "/etc/squid/squished"

#acl SQUISHED2 ident "/etc/squid/squished"
acl SQUISHED3 src "/etc/squid/squished"
acl password proxy_auth REQUIRED

# Error info that says you're squished
deny_info http://ns.multimedia.com/squish/?squished& SQUISHED1

# deny_info http://ns.multimedia.com/squish/?squished& SQUISHED2
deny_info http://nd.multimedia.com/squish/?squished& SQUISHED3

# HTTP access controls for squish

http_access allow SQUISHLOC
http_access allow password !SQUISHED1
http_access deny SQUISHED1

# http_access deny SQUISHED2

http_access deny SQUISHED3

### added by squish (end )

http_access allow ncsa


Kemudian, edit file konfigurasi httpd :

# nano /etc/httpd/conf/httpd.conf
# tambahkan baris berikut di paling bawah dari file konfigurasi tersebut :

include /usr/local/squish/apache-squish.conf

Kemudian edit file apache-squish.conf :
# nano /usr/local/squish/apache-squish.conf

Edit file tersebut menjadi seperti ini :
Alias /squish "/usr/local/squish/"


Options +ExecCGI
AddHandler cgi-script .cgi
DirectoryIndex squish.cgi
AllowOverride None
Order allow,deny
Allow from all

Di bagian terakhir, anda cukup membuat user yang diperbolehkan untuk mengakses internet, dengan membuat sebuah file yang berisi user yang diperbolehkan login :

# htpasswd /etc/squid/passwd mamang

Berikan permission r untuk user lain agar file /etc/squid/passwd dapat dibaca oleh apache.

# chmod o+r /etc/squid/passwd

Kemudian restart service squid dan httpd :

# service squid restart
# service httpd restart

Untuk melakukan pembatasan pemakaian pada user, silahkan edit file konfigurasi squish.conf

# nano /etc/squid/squish.conf

squish.conf:
# This file contains data formatted as follows:
#
# Blank lines and hashed stuff is for comments
# user amount/period
# bandwidth: 999[kmG]b / period: day, week, month
# time: 999[smh] / period: day, week, month
#
# Whitelist entries - they can have as much as they like

192\.168\.99\.44 25h/day
192\.168\.97\.43 25h/day

mamang 12h/day 120Mb/day

# Poor guy:
root 1h/day 1Mb/day 2Mb/week

# Catchall -- people and IP's not matched by the above rules
.* 4h/day 20Mb/day 20h/week 100Mb/week

Tampilan ketika user habis masa pemakaiannya.

Monday, October 20, 2008

Instalasi Java pada OpenSUSE 10.3

Instalasi Java secara cepat dan mudah pada OpenSUSE dapat dilakukan langsung melalui YAST. Namun, karena kita berniat menjadi programmer, mari kita mulai dengan sedikit hand-made :-). Kadangkala, kita butuh Java SDK yang lebih update daripada yang dibundel pada OpenSUSE, itu alasan sebenarnya.

Salah satu yang membuat bingung waktu install Java, adalah : Java versi yang mana yang harus saya pakai ? Jangan dibingungkan dengan istilah. Kita akan mulai belajarJava melalui paket yang paling mudah, yaitu J2SE.

Instalasi Java

Mudahnya, kita akan gunakan Java yang didownload dari Sun. Pada link http://java.sun.com, ada 3 variasi Java, yaitu Java SE, Java ME dan Java EE. Kita langsung dari yang awal yaitu J2SE.



  1. Download Java SE dari http://java.sun.com/javase/downloads/index.jsp
  2. Ambil untuk Linux. Tidak usah yang dibundel dengan Netbeans ataupun yang lainnya. Saat ini versi terbaru adalah 1.6.0. Untuk Linux ada 2 tipe ( Linux RPM in self-extracting file dan Linux in self-extracting file), ambil yang kedua, dengan nama jdk-6-linux-i586.bin

  3. Copy ke folder /opt. Butuh account root untuk mengakses folder ini
  4. Masuk ke Konsole / Terminal
  5. Perintah : ALT+F2, ketik konsole

  6. Install Java SE. Pada Konsole, ketikkan perintah berikut:
    1. chmod +x /opt/jdk-6-linux-i586.bin
    2. ./jdk-6-linux-i586.bin

    [Note : titik-slash-namafile]

  7. Check hasil instalasi
  8. java version “1.6.0″
    Java(TM) SE Runtime Environment (build 1.6.0-b105)
    Java HotSpot(TM) Client VM (build 1.6.0-b105, mixed mode, sharing)

Bagaimana jika yang kita install adalah versi 1.6.0 tapi versi yang keluar adalah versi lain ? Berarti sudah ada Java SDK yang tertanam di OpenSUSE. Java yang baru saja kita install terletak pada folder /opt/jdk1.6.0. Coba check dengan perintah berikut.

lrwxrwxrwx 1 root root 22 Jan 24 09:22 /usr/bin/java -> /etc/alternatives/java

Jika hasilnya seperti diatas atau folder yang tampil tidak sesuai, kita bisa “memaksa” agar OpenSUSE menggunakan Java yang baru saja kita install. Ketik perintah berikut :

  1. ln -s /opt/jdk1.6.0/bin/java /usr/bin/java

Check ulang dengan perintah Java -version pada Konsole

Setting Classpath

Buatkan ClassPath agar kompiler Java [javac] bisa dikenal dari berbagai folder, dengan langkah sebagai berikut :

  1. Buat file dengan nama .bash_profile. Simpan pada home directory. Jika masuk sebagai root, simpan pada /root. Jika masuk sebagai user biasa, simpan pada /home/namauser. Pada Linux, file yang diawali dengan tanda titik berarti hidden file.
  2. Ketik isi file .bash_profile dengan :
    1. JAVA_HOME=/opt/jdk1.6.0
    2. export JAVA_HOME
    3. export PATH=$PATH:$JAVA_HOME/bin
  3. Simpan
  4. Log-off dari OpenSUSE
  5. Masuk kembali
  6. Test Kompiler. Buka konsole, ketik
  7. Jika menghasilkan keluaran, berarti kompiler Java sudah siap digunakan. Jika belum, check ulang penulisan CLASSPATH dan sesuaikan dengan kondisi instalasi

Mendapatkan IP Address dan Host Name

Java menyediakan fungsi InetAddress untuk mendapatkan alamat IP maupun nama host suatu komputer. Alamat IP maupun nama host yang didapatkan tidak tergantung pada alamat ip dan nama host komputer lokal saja, namun juga dapat digunakan untuk mengecek alamat IP dan nama host di Internet, tentu dengan syarat komputer kita terhubung dengan internet. Penggunaan fungsi ini juga terkait erat dengan setting DNS pada komputer yang kita gunakan.

Berikut adalah contoh program yang menunjukkan fungsionalitas tersebut :

  1. Buatlah sebuah project baru Netbeans
  2. Tambahkan sebuah JFrame Form
  3. Lengkapi dengan 2 buah label, 2 buah TextField (txtIPAddress dan txtNamaHost) dan 3 buah Button (btnCheckIPAddress, btnCheckHostName dan btnCheckLokal). Lihat contoh pada gambar berikut :
  4. Ketikkan kode berikut pada btnCheckHostName, event actionPerformed
    1. private void btnCheckHostNameActionPerformed(java.awt.event.ActionEvent evt) {
    2. try {
    3. String strHostName = InetAddress.getByName(txtIPAddress.getText()).getHostName();
    4. JOptionPane.showMessageDialog(null, "Host name dari IP Address '" + txtIPAddress.getText() +"' = "+ strHostName);
    5. } catch (UnknownHostException ex) {
    6. JOptionPane.showMessageDialog(null, ex);
    7. Logger.getLogger(frmIpAddress.class.getName()).log(Level.SEVERE, null, ex);
    8. }
    9. }
  5. Lakukan import library yang diperlukan (import java.net.InetAddress; import javax.swing.JOptionPane;)
  6. Ketikkan kode berikut pada btnCheckIPAddress, event actionPerformed
    1. private void btnCheckIPAddressActionPerformed(java.awt.event.ActionEvent evt) {
    2. try {
    3. String strIPAddress = InetAddress.getByName(txtHostName.getText()).getHostAddress() ;
    4. JOptionPane.showMessageDialog(null, "Alamat IP dari '"+txtHostName.getText() +"' ="+ strIPAddress);
    5. } catch (UnknownHostException ex) {
    6. JOptionPane.showMessageDialog(null, ex);
    7. Logger.getLogger(frmIpAddress.class.getName()).log(Level.SEVERE, null, ex);
    8. }
    9. }
  7. Ketikkan kode berikut pada btnCheckLokal event actionPerformed
    1. private void btnCheckLocalActionPerformed(java.awt.event.ActionEvent evt) {
    2. try {
    3. InetAddress AlamatInternet = InetAddress.getLocalHost();
    4. JOptionPane.showMessageDialog(null, "Host name lokal : " +AlamatInternet.getHostName());
    5. JOptionPane.showMessageDialog(null, "IP Address lokal : " +AlamatInternet.getHostAddress() );
    6. } catch (UnknownHostException ex) {
    7. JOptionPane.showMessageDialog(null, ex);
    8. Logger.getLogger(frmIpAddress.class.getName()).log(Level.SEVERE, null, ex);
    9. }
    10. }
  8. Simpan dan jalankan aplikasi (SHIFT + F6). Masukkan IP Address dan klik pada “Check Host Name” atau masukkan host name dan klik “Check IP Address”. Check IP dan Host Lokal tidak membutuhkan masukan. Berikut adalah beberapa screenshot pesan yang tampil :

Program ini tidak secara smart mendeteksi masukan apakah itu alamat IP ataukah host name. Untuk kemudahan, saya menggunakan 2 buah TextField sebagai contoh. Pada aplikasi terapan, input IP Address ataupun Host Name bisa didapatkan melalui variabel.


Java Fundamental

Bagi temen2 yg baru sekali ini belajar Java..
Ini ada tutorial singkat mengenai cara membuat file Java, mengcompile file Java tersebut, dan bagaimana menjalankan program Java.
Dibagian ini juga akan membahas sedikit tentang variabel dalam Java..
Silahkan mengikuti Smile
Okey skrg gw kasih tutorial singkat mengenai Java, bukan tutorial game, melainkan tutorial dasar-dasar Java, untuk membantu yang bener2 pemula sama sekali ^_^

LANGKAH 1: Membuat kode program Java

Nah hal pertama adalah, bagaimana asal mula suatu program aplikasi Java?
Untuk menjalankan program Java, pertama-tama kita buat file teks (txt) biasa, beri nama dengan format penamaan TitleCase dan akhiri dengan extension .java :
Misalnya Test.java

Untuk mengisi kode programnya, edit file tersebut dengan menggunakan teks editor apa saja, misalnya Notepad.

FILE :: Test.java
Isikan kode programnya:
Code:
public class Test {
// Test -> sesuai dengan nama filenya: Test.java
// (ingat Java case sensitive, Test berbeda dgn test)
}

PS: "//" adalah komentar, apapun yang ditulis setelah // tidak akan diproses
PS2: sekali lagi Java adalah case sensitive, penulisan harus benar2 memperhatikan huruf kecil dan huruf besar.


LANGKAH 2: Mengcompile kode program kita

Compile kode program yang telah kita buat dengan menggunakan Java compiler (javac.exe) yang telah termasuk dalam bundel Java SDK (J2SE), dapatkan Java SDK di http://java.sun.com/j2se/.

Gunakan DOS Prompt, buka melalui Start menu-Run-ketik CMD.
Tuliskan ini di DOS prompt :

Code:
javac Test.java

Setelah dicompile Test.java akan menghasilkan Test.class

Quote:
Test.java (kode program) compile -> Test.class (java bytecode)



LANGKAH 3: Menjalankan program tersebut

Untuk menjalankan program yang telah kita compile diatas digunakan Java launcher (java.exe), juga melalui DOS prompt :

Code:
java Test

Pada tahap ini program kita diatas akan mengeluarkan error tidak dapat dijalankan, karena Java tidak tahu harus dimulai darimana program aplikasi kita ini.


LANGKAH 4: Membuat start awal aplikasi

Start awal jalannya suatu aplikasi Java dimulai dari ditemukannya kata kunci (keyword) :

Code:
public static void main(String[] args) { }

Nah tinggal tambahkan keyword tersebut ke file Test.java kita :

Code:
public class Test {

public static void main(String[] args) {
// application start-point
}

}

Jadi program Test.java diatas sudah dapat dicompile DAN dijalankan.
Tapi karena isinya kosong, jadi program kita tsb tidak melakukan suatu hal apapun, sungguh suatu program yang tak berguna Smile
java Test -> masuk ke bagian application start-point dan selesai, tidak ada yang dikerjakan.


LANGKAH 5: Mengeluarkan suatu tulisan

Nah untuk mengeluarkan output ke console (DOS prompt) kita gunakan fungsi System.out.println("kata") :

Code:
public class Test {

public static void main(String[] args) {
System.out.println("Hello World!");
}

}

Program kita diatas ketika dijalankan akan mengeluarkan tulisan Hello World ke console.
Ah ha! Akhirnya program kita sudah jalan dan mengerjakan sesuatu, apakah Anda sudah cukup senang sekarang?! Smile
Nah selanjutnya kita akan mengenal variabel2 dalam bahasa program Java.



LANGKAH 6: Mengenal variabel serta jenis-jenisnya

Nah setelah kita mengetahui bagaimana dasar aplikasi Java dari membuat file berekstensi .java sampai menjalankannya, sekarang saatnya untuk berkenalan dengan jenis-jenis variabel yang terdapat dalam Java.

Jadi apa itu variabel??

Untuk menyimpan nilai tertentu di dalam program aplikasi kita (memori komputer), nilai tersebut haruslah disimpan sesuai kedalam suatu variabel yang tipenya sesuai dengan tipe dari nilai tersebut.
Kita tidak dapat menyimpan tipe bernilai angka ke variabel bertipe nilai huruf ataupun sebaliknya.

Pada bahasa pemograman Java, tipe-tipe variabel yang tersedia diantaranya :

Quote:
- int : untuk menyimpan nilai berupa angka bilangan bulat, misalnya: 10
- double : untuk menyimpan nilai berupa angka bilangan desimal, misalnya: 0.5
- String : untuk menyimpan nilai berupa teks kata-kata, misalnya: "Hello World"
- boolean : untuk menyimpan nilai sederhana iya atau tidak, misalnya: true


Untuk mendeklarasikan variabel yang dapat menyimpan nilai tersebut cukup dengan menggunakan:

Code:
[tipe_variabel] [nama_variabel];

misalnya: int tipeInt;
pendeklarasian variabel bernama tipeInt sebagai variabel bertipe int

Untuk mengisikan nilai ke variabel tsb gunakan tanda =

Code:
int tipeInt;

tipeInt = 10; // mengisi tipeInt dengan nilai 10


Contoh dalam program:

Code:
public class Test {

public static void main(String[] args) {
int a = 10;
double b = 0.5;
String c = "Halo";
boolean d = true;

// mengeluarkan nilai diatas ke console
System.out.println(a); // console tertulis: 10
System.out.println(b); // console tertulis: 0.5
System.out.println(c); // console tertulis: Halo
System.out.println(d); // console tertulis: true

// ganti nilai variabel a
a = 100;
System.out.println(a); // console tertulis: 100
}

}


Setelah kita mengetahui jenis-jenis tipe variabel dan bagaimana menggunakannya, sekarang kita lihat bagaimana cara mengolahnya/memanipulasinya.


LANGKAH 7: Operasi variabel

Variabel tersebut dapat kita olah sama seperti didalam matematika, yakni dengan menggunakan operasi pertambahan (+), pengurangan (-), perkalian (*), pembagian (/), ataupun hasil bagi (%).
Misalnya: int a = 10 + 10; // pertambahan
Tidak ada yang spesial dalam mengolah data variabel tersebut, cukup gunakan tanda +, -, *, /, %

Contoh:

Code:
public class Test {

public static void main(String[] args) {
int a = 10;
int b = 20;
int c = a + b; // 10 + 20 = 30
int d = a - b; // 10 - 20 = -10

System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);


double e = 2;
double f = 4;
double g = e * f; // 2 x 4 = 8
double h = e / f; // 2 / 4 = 0.5

System.out.println(e);
System.out.println(f);
System.out.println(g);
System.out.println(h);

System.out.println(5 % 3); // = 2 -> 5 / 3 = 1 sisa 2
}

}


Java juga menyediakan cara untuk mempersingkat operasi tertentu:

Code:
int a = 0;
// menambah dengan 10
cara 1: a = a + 10;
cara 2: a += 10; // lebih singkat

Sama halnya dengan pengurangan, perkalian, pembagian.

Code:
a -= 10;
a *= 10;
a /= 10;


Dan Java juga menyediakan khusus penyingkatan untuk penambahan/pengurangan dengan 1:

Code:
a = a + 1; -> a += 1; -> a++;
a = a - 1; -> a -= 1; -> a--;


Begitulah ulasan singkat dari Paupau si pembuat tutorial ini, semoga temen2 bisa mendapatkan dasar untuk belajar Java, selanjutnya mungkin akan banyak lagi ulasan2 menarik ttg Java..tunggu saja update terbarunya di post ini, atau apabila temen2 merasa tidak punya waktu untuk menunggu..temen2 bisa membaca tutorial java di :
http://java.sun.com/docs/books/tutorial/


Sunday, October 19, 2008

Mengenal Zend Framework - PHP MVC Framework

Struts adalah biang MVC di dunia pemrograman Java / J2EE, kalau PHP sekarang sudah ada Zend neh... bagi yang belum tahu Zend bisa baca neh.

Di dalam dunia PHP sebenarnya banyak juga framework-framework yang bermunculan.
Saat ini framework yang terkenal adalah CakePHP, Prado, CodeIgniter, Symfony, dan Zend Framework, di mana masing-masing memiliki keunggulannya tersendiri dan di antara framework itu Zend merupakan salah satu framework yang

mengimplementasikan MVC pattern untuk pengembangan aplikasi web di mana Zend Framework memisahkan bagian yang menjadi controller, model dan view.
Pada artikel ini penulis akan memperkenalkan salah satu framework populer tersebut yang dibuat oleh Zend sendiri yang merasa perlu untuk membuat suatu framework serta library yang dibangun di atas teknologi php5 dengan mendayagunakan kelebihan pemrograman berorientasi objek yang telah disediakan serta menghasilkan library yang lebih maju dan lengkap untuk mendukung kebutuhan developer php pada saat ini yang mulai beralih ke pembuatan aplikasi web 2.0.


Definisi Zend Framework menurut dokumentasinya:

“Zend Framework adalah framework open source dan berkualitas tinggi untuk membangun aplikasi web dan web service dengan PHP”

Zend Framework memiliki keunggulan-keunggulan seperti berikut:

  • Dibuat oleh Zend, pengembang engine PHP
  • Dibangun diatas teknologi php 5
  • Lisensi Open Source berbasis BSD yang fleksibel baik untuk pengembangan aplikasi open source maupun komersial
  • Dokumentasi lengkap (lebih dari 500 halaman)
  • Proses pengembangan Zend Framework menyertakan unit test yang lengkap, mencakup 84% kode yang ada
  • Library yang menyediakan fungsi yang lengkap sehingga hampir semua kebutuhan pengembangan aplikasi web dapat terpenuhi
  • Mendukung pengembangan aplikasi MVC
  • URL yang bagus dan search engine friendly

Macam-macam library yang disediakan oleh Zend Framework:

  • Core Infrastructure
    • Zend_Cache, Zend_Config, Zend_Console_Getopt, Zend_Log, Zend_Memory
    • Zend_Debug, Zend_Environment, Zend_Loader, Zend_Registry, Zend_Version
    • Zend_Filter, Zend_Validate
  • Documentation
    • Improved correctness, readability, and more examples
    • Additional coverage by translation teams
    • Web application development tutorial
  • Internationalization (i18n) & Localization (l10n)
    • Zend_Date
    • Zend_Locale
    • Zend_Measure
    • Zend_Translate
  • Mail, Formats, & Search
    • Zend_Json, Zend_Pdf
    • Zend_Mail, Zend_Mime
    • Zend_Search_Lucene
  • Model-View-Controller (MVC)
    • Zend_Controller, Zend_Controller_Action, Zend_Controller_Dispatcher, Zend_Controller_Plugin, Zend_Controller_RewriteRouter, Zend_View
    • Zend_Http_Request, Zend_Http_Response
  • Web & Web Services
    • Consuming services: Zend_Feed, Zend_Rest_Client, Zend_Service, Zend_XmlRpc_Client, Zend_Gdata, Zend_Http_Client
    • Exposing services: Zend_Http_Server, Zend_Rest_Server, Zend_Server_Documentor, Zend_Server_Reflection, Zend_Soap_Server, Zend_XmlRpc_Server
    • Zend_Uri

Jadi hampir semua yang Anda perlukan sebagai pengembang aplikasi web masa depan (Web 2.0) telah disediakan oleh PHP.
Pertama kali bertemu dengan Zend, penulis merasa familiar dengan konsep framework ini, karena sedikit ada kemiripan dengan Struts di mana ada Controller, Action lalu konsep forward ke view yang sesuai.


Mengenal EJB ( Enterprise Java Bean )

Tutorial Pengenalan EJB (Enterprise Java Bean)

  1. Apakah EJB itu?
  2. Latar Belakang Enterprise Java Bean
  3. Kelebihan EJB
  4. Macam EJB
Anda yang pernah mendengar istilah EJB tetapi belum mengetahui apakah gerangan EJB itu bisa membaca artikel singkat ini.

1. Apakah Enterprise Java Bean itu?

Secara singkat Enterprise Java Bean merupakan komponen software server-side yang menyederhanakan proses pembuatan komponen aplikasi terdistribusi untuk skala enterprise. Pada dasarnya Enterprise Java Bean bukanlah merupakan suatu produk jadi tetapi merupakan spesifikasi atau blueprint teknologi untuk komponen software yang menjadi bagian dari teknologi J2EE.

Menurut Sun Microsystem definisi EJB adalah:

"Aristektur Enterprise JavaBeans adalah arsitektur komponen untuk development dan deployment dari aplikasi bisnis terdistribusi berbasis komponen. Aplikasi yang dibuat dengan artistektur Enterprise JavaBeans adalah skalabel, transaksional, dan multiuser yang aman. Aplikasi-aplikasi ini mungkin ditulis sekali dan dideploy pada berbagai platform server yang mendukung spesifikasi Enterprise JavaBeans."

Catatan: Spesifikasi EJB terbaru dapat didownload di: http://java.sun.com/products/ejb/docs.html

2. Latar Belakang EJB

Berangkat dari kebutuhan aplikasi berskala enterprise yang mendayagunakan sistem terdistribusi dengan banyak user atau pengguna dalam suatu saat maka lahirlah EJB.

Sebelum adanya spesifikasi EJB, perusahaan seringkali membangun middleware sendiri di mana proses development untuk middleware sangatlah kompleks karena harus memperhatikan berbagai aspek, seperti transaksi, mekanisme penyimpanan data persisten, sinkronisasi, resource polling, networking, dan sebagainya. Aplikasi yang berjalan pada middleware harus memanggil API yang diperlukan secara eksplisit apabila ingin mengatur transaksi, menyimpan data, melakukan resource polling, dsb.

Tentu hal ini menyulitkan developer dalam menghasilkan aplikasi bisnis yang berjalan di atas middleware. Terlebih lagi tidak adanya standar atau spesifikasi global sehingga API dari suatu middleware tidaklah sama atau mungkin tidak tersedia pada middleware lain.

Middleware menyediakan service seperti berikut:

  1. Remote Method Invocation
  2. Load Balancing
  3. Transparent fail-over
  4. Integrasi Back-end
  5. Transaksi
  6. Clustering
  7. Dynamic redeployment
  8. Clean shutdown
  9. Logging dan auditing
  10. Manajemen Sistem
  11. Threading
  12. Message-oriented middleware
  13. Siklus hidup objek
  14. Resource polling
  15. Security
  16. Caching
  17. dll

Oleh karena banyaknya hal dan masalah yang harus dapat dilayani oleh suatu middleware untuk aplikasi berskala enterprise maka Sun Microsystem mendefinisikan suatu spesifikasi di mana suatu aplikasi yang memenuhi spesifikasi tersebut dapat dibuat tanpa harus menuliskan kode program secara eksplisit untuk menangani berbagai hal terkait dengan kemampuan yang disediakan middleware karena aplikasi dengan arsitektur EJB dapat mendayagunakan berbagai fungsi middleware yang dimanajemen oleh application server secara otomatis. Jadi dalam aplikasi yang menggunakan EJB kita akan memerlukan software khusus yang berjalan di server yang sering disebut application server di mana application serverlah yang menyediakan berbagai fungsi dan layanan middleware.

3. Kelebihan EJB

EJB memiliki kelebihan-kelebihan sebagai berikut:

• Teknologi EJB merupakan standar teknologi dan spesifikasi yang telah disetujui oleh industri dunia. Oleh karena itu hal ini sangat menguntungkan berbagai industri terkait, baik yang mendayagunakan EJB maupun vendor yang menyediakan jasa development atau tool pendukung EJB

• Portabilitas yang tinggi. Spesifikasi EJB dipublikasikan secara umum dan tersedia gratis sehingga banyak vendor yang mengerti arsitektur EJB dengan baik dan akibatnya memunculkan banyak vendor application server untuk EJB maupun developer aplikasi EJB.

• Rapid application development. Aplikasi dapat dibuat lebih cepat karena layanan atau kemampuan middleware yang rumit dapat diperoleh dari application server.

4. Macam EJB

Enterprise Java Bean terdiri dari 3 macam yaitu:

• Sesson Beans

Session Bean digunakan untuk memodelkan proses bisnis atau merupakan logik bisnis dari aplikasi. Proses yang dapat dilayani Session Bean misalnya: mendapatkan harga barang tertentu, merubah harga barang, dll.

• Entity Beans

Entity Beans digunakan untuk memodelkan data bisnis. Apabila diistilahkan dalam kata-kata maka Entity Beans bersifat kebendaan, lain halnya dengan Session Beans yang bersifat suatu pekerjaan atau aksi.

• Message-driven Beans

Message Driven Beans adalah hampir sama dengan Session Beans dalam sudut pandang fungsi yaitu melakukan proses bisnis atau sebagai logik bisnis. Hanya saja perbedaaanya adalah message-driven beans dijalan atau dieksekusi dengan menyampaikan "message" ke bean tersebut.


Saturday, October 11, 2008

Koneksi PHP dengan Oracle

Dalam tutorial ini, kita akan menggunakan tabel oracle berikut sebagai source datanya. Nama tabel adalah test.

nama
kota
Prothelord
New York
Strawberi
Bangkok



Tujuan kita adalah menampilkan data nama dan kota dari tabel tersebut. Namun sebelum mulai, kamu perlu mencari informasi terlebih dahulu tentang informasi login ke Oracle yang biasanya disebut dengan TNS name (kamu bisa bandingkan dengan user, password dan IP dariMySQL server). TNS name terdiri dari :

- IP server Oracle
- Port yang dipakai (kalau MySQL 3306, ingat kan?)
- SID
- User
- Password
Cobalah tanyakan sama Oracle admin di tempatmu tentang informasi tersebut.

Kalau sudah dapat, cobalah edit program berikut dengan konfigurasi TNS Name yang kamu peroleh dari admin Oracle kamu. Dalam contoh kali ini, kita menggunakan konfigurasi TNS name sebagai berikut:

- IP: 10.2.2.2
- Port : 1523
- SID : TEST
- User : namamu
- Password : pwd

Berikut contoh program untuk mengakses tabel Oracle:


”) ;
}
ocilogoff($c1) ;
?>
Setelah selesai, simpanlah dengan nama coba_oracle.php dan panggil dari browser. Kamu seharusnya akan melihat hasil sebagai berikut :


Prothelord,New York
Strawberi,Bangkok


Dah, cuman gitu doang kok. Gampang yach ?

Selamat mencoba, dan semoga bermanfaat.

Perbedaan Class OOP dengan Fungsi

Dalam tutorial OOP PHP sebelumnya, kita sudah belajar tentang 5 istilah kunci dalam OOP. Namun sebelum kita membahas lebih lanjut kelima istilah tersebut, kita akan mempelajari dulu konsep OOP alias Object Oriented Programming. Konsep ini tentu saja berlaku umum baik untuk PHP maupun pemrograman lain yang mendukung OOP seperti Java.

Ingat ini. Sebenarnya OOP adalah cara berpikir dalam membuat program.

Sebenarnya dalam banyak hal, program kita tidak akan berbeda jauh dengan metode terstruktur yang mungkin selama ini kita kenal. Namun yang penting adalah cara berpikirnya. Ingat kata kunci ini: Berpikir secara obyek. Gampangnya kalau kita membuat sebuah program, maka kita akan membuat berbagai class yang akan sering kita gunakan dan class itu akan kita buat menjadi obyek itu bisa kita kembangkan lagi nantinya.

Untuk menjelaskannya, biasanya berbagai buku atau tutorial akan menggunakan contoh obyek seperti kucing, rumah atau mobil. Karena penjelasan itu memang menggambarkan proses pembuatan program berbasis OOP yang mirip cara berpikir kita sehari-hari. Kalo ndak percaya, coba aja beli buku OOP atau baca tutorial OOP.

Namun saya pernah merasakan sendiri bahwa penjelasan langsung dengan contoh riil di dunia nyata tersebut menjadi contoh abstrak di dunia pemrograman. Lha iya kan, masak kita akan membikin kucing atau rumah atau mobil dengan PHP? Makanya saya coba njelasinnya sedikit berbeda. Saya akan mulai bukan dari contoh riil yang malah jadi abstrak tadi, tetapi dari membandingkan beberapa cara berpikir dalam membuat program. Selanjutnya baru kita lihat proses berpikir OOP dengan membandingkannya ke kehidupan sehari-hari tadi.

Mudah-mudahan bisa lebih clear.

Ok, untuk mempermudah membayangkan perbedaan cara membuat program biasa dan OOP, saya akan sampaikan beberapa perbandingan antara cara berpikir dalam pemrograman. Siap?

Di awal karir kita (kita? Lu aja kali, gua kagak. Awas jangan ngomong gitu yah :)), umumnya kita akan membuat program tanpa fungsi. Misalnya kita akan membuat sebuah program kalkulator. Dalam contoh ini kita akan fokus dalam pembuatan tampilannya.

Bayangkan sebuah kalkulator. Udah? Nah, kita pasti perlu membuat tampilan depannya yang mirip kalkulator kan? Di mana ada beberapa tombol angka dan operasi matematikanya serta layar yang akan menampilkan apapun yang kita pencet di tombol itu dll. Nah, dalam pembuatan program kalkulator tersebut, kita akan membuat sebuah program panjang yang menuliskan semua kode untuk membuat tampilan. Mulai dari kotak luarnya, diteruskan layarnya, tombol 1, tombol 2, tombol 3, dst, serta tombol operator -, +, x dan : serta sebuah tombol = yang Anda buat lebih besar dari yang lain karena sering dipakai.

Nah, setelah Anda agak canggih dalam membuat program, Anda pasti tahu bahwa pembuatan tombol itu adalah proses berulang yang sebenarnya bisa kita buatkan fungsi dengan variabel input tulisan yang akan ditampilkan. (Ingat contoh ini sangat disederhanakan lho, jadi jangan protes). Maka kita akan membuat fungsi tombol tersebut. Di sini kita akan membuat 2 jenis fungsi yaitu tombol kecil dan tombol besar (tombol besar tentu saja buat si “sama dengan” tadi itu).

Kemudian, setelah belajar OOP, maka kamu akan membuat sebuah sebuah class yang bernama tombol. Class ini sudah kita desain agar dapat kita bikin obyek tombol berbagai ukuran, warna, tulisan yang menyertainya dan event yang terjadi kalau kita pencet tuh tombol. Dengan OOP, maka class kita tadi akan memiliki sifat-sifat pemrograman OOP yang tentu saja akan membantu kita untuk membuat program berbasis PHP.

Penjelasan mengenai perbedaan antara class dengan fungsi secara sederhana adalah pada sifat-sifat OOP yang sudah pernah kita sebutkan dalam tutorial OOP sebelumnya.

Dengan adanya sifat-sifat itu, maka pembuatan program akan jauh lebih mudah. Contohnya, kalau kamu membuat program dan memerlukan fungsi tertentu, maka kamu bisa membuat sendiri fungsi kamu atau akan lebih mudah dengan mencari di Internet. Setelah kamu download, maka kamu akan perlu mempelajari fungsi itu dan cara penggunaannya serta bila perlu memodidikasi core programnya. Ini berbeda dengan class pada OOP. Dengan class, kita cuman butuh tahu sifatnya aja.


Penjelasan mengenai class ini akan membawa kita pada penjelasan yang menggunakan obyek sehari-hari.

Ok, mudah-mudahan penjelasan dengan membandingkan ini bisa membantu kamu buat sedikit memahami OOP. Berikutnya kita akan belajar konsep berpikir dalam OOP dengan contoh obyek sehari-hari. Ini kamu perlukan untuk menyambung penjelasan tentang sifat class tadi. Penting lho. So don’t miss it

menyembunyikan lokasi image

Image / gambar merupakan salah satu file yang wajib ada dalam sebuah website. Pernahkah kita menemukan adanya website yang tidak menggunakan image sama sekali? Pasti tidak bukan. Sekecil apapun, suatu image wajib hukumnya ada dalam suatu website. Pengunaan image pada website membuat source kode tempat image tersebut akan terlihat. Misalnya image tersebut kita letakkan pada folder “images”. Untuk melihat dimana seorang webmaster meletakkan image suatu gambar sangatlah mudah. Cukup dengan klik kanan pada image tersebut lalu pilih menu properties. Secara otomatis akan terlihat di folder mana webmaster tersebut meletakkan image.

Hal ini tentu membuat para webmaster penasaran bagaimana cara menyembunyikan source kode image tersebut. Nah mari kita belajar cara menyembunyikan lokasi image dengan PHP.

Keterangan lebih lanjut tentang artikel ini silahkan download disini


Saturday, September 20, 2008

PHP Security - Cek Bug PHP Script

Setelah terampungkan script php yang telah kita buat ada kalanya bug-bug yang tidak diinginkan bercokol di sela-sela script yang telah siap dionlinekan. Dan tentunya bug ini bisa berakibat fatal sehingga dapat dimanfaatkan oleh para intruder-intruder yang berusaha untuk mengekploitasi system.

Dan siapa sangka script php yang telah dibuat itu aman dari kerentanan dalam masalah security. :D~~~

Lalu, bagaimana mencegah sang hacker mengekploitasi, bahkan merusak website anda, bagaimana mencegah secara pasti dan mengetahui script yang telah dibuat memiliki bug yang fatal, bagaimana menangani itu semua ?? :D

Sebelum kita beralih maju ke langkah selanjutnya ada baiknya untuk mengenali bug popular yang paling sering diexploitasi.

Penulis akan mencoba untuk memberikan sedikit penjelasan, bug yang sering dijumpai dalam aplikasi berbasis web khususnya Content Management system maupun yang lainnya. Di antaranya :

- XSS ( Cross Site Scripting )
- SQL Injection
- RFI ( Remote File Inclusion )

Cross Site Scriping
Lebih dikenal dengan sebutan XSS. Kesalahan ini terjadi karena tidak adanya filtering pada html maupun java script.

Tetapi pada dasarnya defacing ( perubahan kontent ) hanya terjadi disisi client saja. Yang paling fatal dari bug ini adalah anda dapat mencuri cookie kemudian menggunakannya untuk berbuat sesuatu yang ... :D~~

Contohnya :
Sensored [ maaf ]

SQL Injection
SQL Injection sebenarnya terjadi karena seorang attacker yang mencoba melakukan inject query sql melalui form ataupun via address bar pada browser internet. Sebagai contohnya ketika penulis mencoba login sebagai admin pada situs pemerintah Sumatra Selatan ( http://www.sumsel.go.id ). Dengan menggunakan query ' or 1=1-- penulis pun berhasil login. Pada dasarnya ' atau single quote dan or 1=1-- itu berfungsi untuk membingungkan si server sql, sehingga yang dilakukan oleh server sql adalah menjalankan query " select * ". Yang terjadi adalah penulis diloloskan untuk login sebagai admin.

Berikut adalah gambar yang penulis capture ketika penulis berhasil login sebagai admin pada situs http://www.sumsel.go.id
tutorial jaringan komputer


tutorial jaringan komputer

Gambar ini diambil sebelum penulis mengontak webmaster via email untuk mempatch script phpnya.

RFI ( Remote File Inclusion )
Sebelumnya silahkan membaca artikel fungsi require, require_once, include, dan include_one RFI sendiri terjadi karena kesalahan programmer ketika melakukan coding, yakni menggunakan variable dalam fungsi-fungsi tersebut. Apabila user memasukkan url evil script miliknya pada variable yang digunakan dalam fungsi require ataupun include, yang terjadi adalah evil script tersebut dapat dieksekusi secara remote, dengan kata lain, attacker dapat menjalan command di server milik anda untuk merubah konten situs atau bahkan merusaknya. :D~~

Untuk contohnya silahkan anda cari di www.milw0rm.com :D~

Keywordnya Remote File Inclusion. :D~

Pengecekan BUG
Pengecekan bug sendiri bisa dilakukan secara manual. Hmmm ... tentunya ini akan memakan banyak waktu. Terbentuklah tools yang dapat secara cepat dan otomatis menemukan bug-bug yang terselip di php script secara tidak sengaja maupun sengaja. :D~

Pada dasarnya untuk mengecek bug dapat dilakukan secara online maupun offline. Penulis sarankan pengecekan bug ini dilakukan di localhost anda ( offline ) saja.

Cek Bug XSS
Tools untuk mengecek XSS pada script php milik anda adalah sebuah addons mozilla firefox yang disediakan secara gratis. Penginstallannya pun tergolong mudah, berikut juga cara penggunaannya.

Tools tersebut dapat anda download disini :
http://www.securitycompass.com/exploit_me/xssme/xssme-0.2.1.xpi

Cek Bug SQL Injection
Untuk periode saat ini defacing dengan SQL Injection digolongkan paling favorit dan tentunya paling banyak digunakan, mungkin karena penyerangan yang dilakukan cukup mudah, cukup memiliki dasar pengetahuan syntax sql. Lagi-lagi sebuah addons mozilla firefox yang cukup ampuh dan mudah digunakan telah disediakan untuk melakukan cek bug sql injection. :D

Anda dapat mendownloadnya disini :
http://www.securitycompass.com/exploit_me/sqlime/sqlime-0.2.xpi

Penggunaanya pun tidak terlalu sulit.

Cek BUG Remote File Inclusion
Sebelumya anda download terlebih dahulu scriptnya disini http://www.newhack.org/dl_jump.php?id
Setelah itu silahkan download active perl, compiler interpreter ini nantinya digunakan untuk menjalankan script inclusionscanner.pl.
Dan kemudian copykan inclusionscanner.pl tersebut ke direktori c:\perl\bin

Langkah selanjutnya :

1. Masukkan script yang akan anda scan kedalam sebuah direktori di c:\perl php.

ex : c:\perl\wordpress.

2. Masuk ke command prompt, start | run | cmd | enter

3. Setelah itu masuk ke direktory c:\perl\bin, cd c:\perl\bin

4. Jalankan scriptnya,

C:\Perl\bin>perl.exe inclusionscanner.pl

#Will check a directory for all includes and unsets

#Coded by Ironfist (ironsecurity.nl)

#Usage: create a folder in your perlfolder and put the files to be scanned in it

, next type the folder name below (eg myfolder)

#GIVES ERRORS WHEN CHECKING SUBFOLDERS: IGNORE THEM :)

Directory to read? c:\perl\wp

kemudian lihat hasilnya di c:\perl\bin\result.html

berikut hasil scan ketika penulis mencoba untuk melakukan cek inclusion pada wordpress-2.3.3 :

FOUND: require_once($locale_file);
in c:\perl\wp/wp-settings.php FOUND: require_once($import_root . '/' . $file);
in c:\perl\wp/wp-admin/import.php FOUND: include_once($this->PluginDir . "class-smtp.php");
in c:\perl\wp/wp-includes/class-phpmailer.php FOUND: include($lang_path.'phpmailer.lang-'.$lang_type.'.php');
in c:\perl\wp/wp-includes/class-phpmailer.php FOUND: include($lang_path.'phpmailer.lang-en.php');
in c:\perl\wp/wp-includes/class-phpmailer.php FOUND: include($template);
in c:\perl\wp/wp-includes/template-loader.php FOUND: include($template);
in c:\perl\wp/wp-includes/template-loader.php FOUND: include($template);
in c:\perl\wp/wp-includes/template-loader.php FOUND: include($template);
in c:\perl\wp/wp-includes/template-loader.php FOUND: include($template);
in c:\perl\wp/wp-includes/template-loader.php FOUND: include($template);
in c:\perl\wp/wp-includes/template-loader.php FOUND: include($template);
in c:\perl\wp/wp-includes/template-loader.php FOUND: include($template);
in c:\perl\wp/wp-includes/template-loader.php FOUND: include($template);
in c:\perl\wp/wp-includes/template-loader.php FOUND: include($template);
in c:\perl\wp/wp-includes/template-loader.php FOUND: include($template);
in c:\perl\wp/wp-includes/template-loader.php FOUND: include($template);
in c:\perl\wp/wp-includes/template-loader.php FOUND: include($template);
in c:\perl\wp/wp-includes/template-loader.php FOUND: require_once($_template_file);
in c:\perl\wp/wp-includes/theme.php

woww !!! :D~~ silahkan di exploitasi eh di patch script milik anda. :D~~

CD Hacking Tools Gratis

Tersedia untuk download gratis CD Hacking Tool. Di dalam CD ini tersedia berbagai macam tool2x hacking yang nantinya akan sangat bermanfaat untuk kita gunakan sebagai experiment ataupun keperluan yang lainnya.

XxxPass-Team 2007
Danger Cracking & Hacking Tools - Ver 1.0

- Exploit Collection (4 Tools)
- Google Hacking (4 Tools)
- Keyloggers (5 Tools)
- Binder & Packer (15 Tools)
- Flood_DOS (20 Tools)
- Messenger (11 Tools)
- Bruter (9 Tools)
- Anonimity (1 Tool)
- !!! $$$ !!! (13 Tools)
- AIO

Exploit Collection

1. 10377 Exploit
2. SMF ShoutBox Xss & HTML Injection
3. SMF Ultimate Shoutbox Cookie Disclosure Exploit
4. Firefox_BuG

Messenger

1. MSN Extreme 3.0
2. MSN Spy Lite v1.0
3. Yahoo Hack!
4. Hotmail Email Hacker
5. Hotmail Hacker Gold
6. HotmailHack
7. YahooUltraCracker
8. winks,moods,mugins,weemees and meegos + Installer
9. MSN Messenger Account Cracker v2.0
10. SH Yahoo Pass Sender 1.1
11. Yahoo Password Decoder

Google Hacking

1. Alt GooGle
2. Google Version 1.2
3. Google H4ck3r (3 programs)
4. GooLink

Keyloggers

1. Elgolf 1.0 Beta
2. ESK KeyLogger
3. Glog Keylogger
4. HermanAgent
5. IKlogger0.1

Bbruter

1. WebCrack v4.0
2. Brutus
3. Crack FTP
4. FTP Brute Hacker
5. phpbb bruteforcer
6. PhpBB Pass Extractor
7. phpBB Cracker
8. Email Cracker
9. FTP Brute Forcer

!!! $$$ !!!

1. Cmaster
2. CC Verify
3. CWizard
4. THCC
5. Visa Card Generator 06
6. Carcabot_Mass_Email
7. CcHack
8. CC-Fake
9. cvv2c
10. DesertCVV2
11. id-fake
12. Paypal-Link-Spoofed
13. HoW to get Credit Cards Fresh and Fastest

AIO

1. Uploader for All
2. Cool Small Usefull Dp

Flood DOS

1. Flowbabeflow
2. FreeSiteKiller V 2.01
3. Webxgrab
4. Web Attacker ENG
5. TheRapist-Dos Attacker
6. HybridFlood2
7. Ati-russ 3.0
8. Http Bomber v1.001b
9. Sprut
10. DoS_5
11. etherflood
12. DoSAttacker
13. phpBB Dos
14. phpBB Attacker
15. Ping Attack
16. Site Nuke
17. Divine Intervention
18. UC Forum Spammer
19. Inferno Nuker
20. Multiple Site Flood

Silahkan di download di :

http://rapidshare.com/files/24341192/XxxPass-C_H_Ver1.0-_2007-part1.rar.html
http://rapidshare.com/files/24350769/XxxPass-C_H_Ver1.0-_2007-part2.rar.html
Pass : XxxPass_DJ_haselking

Mirror di tempat lain ( Tambahan dari Mas Yudhie -- Terima kasih banyak Mas :D )
http://www.cocosunroofs.com/bbs/configs/free/inc0mp13te/XxxPass-C_H_Ver1.0-_2007-part1.rar
http://www.cocosunroofs.com/bbs/configs/free/inc0mp13te/XxxPass-C_H_Ver1.0-_2007-part2.rar
Pass : XxxPass_DJ_haselking

Hack ... hack ... hack the World !! :D
Kita belajar security, tapi kita juga harus tahu akan kelemahannya dulu.

Klik Kanan Gempa

-------
Script ini hanya jalan di Internet Explorer

Jika anda klik kanan maka browser akan bergetar !!
-------



contoh buka: http://www.ilmuwebsite.com/javascript/klik-gempa.htm

<html>
<head>
</head>
<body bgcolor="#000000">

<SCRIPT language=JavaScript>
<!--inizio-----mess per copiare

document.onmousedown=click
function click() {
times2=0
if ((event.button==2) || (event.button==3))
{
alert("Jangan klik kanan !!");
shake(20)
}
}
function shake(n) {
if (parent.moveBy) {
for (i = 20; i > 0; i--) {
for (j = n; j > 0; j--) {
parent.moveBy(0,i);
parent.moveBy(i,0);
parent.moveBy(0,-i);
parent.moveBy(-i,0);
         }
      }
   }
}
//fine copia-->
</SCRIPT>

</body>

</html>