Serial Apache II
       =================================================
                WEB INTERAKTIF DENGAN MODUL PERL
       =================================================
                          Budi Santosa
                       [EMAIL PROTECTED]


1. Modul PERL.

        Modul Perl merupakan shared library yang digunakan Apache untuk menjalankan 
aplikasi yang dibuat oleh menggunakan bahasa PERL. Modul PERL tersedia diberbagai 
distro Linux, misal; Red Hat dan Mandrake. Kelebihan modul ini dapat meng-emulasikan 
CGI (COMMON GATEWAY INTERFACE), agar WEB lebih interaktif terhadap pemakai /user serta 
bisa dijadikan integrasi berbagai sistem (misal ; web dengan database PostgreSQL dan 
Web dengan POP3). Desainer web dapat membuat modul sendiri melalui bahas perl untuk 
mengembangkan aplikasi e-commerce yang fleksibel, efisien dan ekonomis. Hanya saja 
untuk menggunakan modul ini, user harus mengkonfigurasi terlebih dahulu di file 
"/etc/httpd/conf/httpd.conf". Di tutorial ini hanya membahas mekanisme konfigurasi 
mod_perl, emulasi CGI dan integrasi antar sistem. PERINGATAN: APLIKASI PERL DAPAT 
MENIMBULKAN BUG / LUBANG PADA SISTEM KEAMANAN KARENA BERUPA SCRIPT. UNTUK MENGHINDARI 
HACKER MENG-EXPLOIT APLIKASI, GUNAKAN PROXY SEBAGAI WEB AKSELERATOR ATAU WEB DIBUAT 
TERPISAH DENGAN DATABASE. JADI TIDAK ADA AKSES LANGSUNG TERHADAP SCRIPT MAUPUN SISTEM 
DATABASE.  

2. Instalasi dan konfigurasi

        2.1. mod perl
             Paket ini harus diinstall terlebih dahulu agar Apache dapat 
mengemulasikan CGI

                # rpm -ivh mod_perl.xx.xx.rpm

        2.2. Driver database.
             Driver ini diperlukan jika perl ingin dihubungkan ke sistem RDBMS         
      PostgreSQL.

               # rpm -ivh perl-DBI-xx.xx.rpm
               # rpm -ivh perl-DBD-Pg-xx.xx.rpm
               # rpm -ivh perl-CGI-xx-xx.rpm ;; modul CGI perl

3. Konfigurasi httpd.conf

    1. cari konfigurasi di httpd.conf, jika tidak ada tambahkan.

                <IfModule mod_perl.c>
                  Alias /perl/ /var/www/perl/
                    <Location /perl>
                        SetHandler perl-script
                        ##PerlModule Apache::DBI ;;  sistem database
                        PerlHandler Apache::Registry
                        PerlSendHeader on
                        Options +ExecCGI
                    </Location>
                </IfModule>

     2. Keterangan.
        Konfigurasi diatas menjelaskan, direktif "Alias" digunakan untuk membuat alias 
direktori "/var/www/perl/" jika saat "/perl/" dipanggil, atau bisa 
http://localhost/perl/aplikasi.pl. module Apache::Registry meng-kompile dan 
meng-eksekusi aplikasi PERL, sedangkan "PerlSendHeader On" akan mengaktifkan non-parse 
header(NPH). NPH merupakan header dari server yang akan disampaikan ke browser klien ( 
Intet Explorer, Netscape dan Mozzilla dll) untuk diproses.

4. Test konfigurasi.

        1. login sebagai super user buat direktori perl di /var/www.

                # cd /var/www
                # mkdir perl
                # chown apache.apache perl
                # chmod u+rwx perl
                # /etc/rc.d/init.d/httpd restart

        2. buat file test.pl

                #!/usr/bin/perl
                ## tampilan "Content-type" harus tidak ada di web browser
                print "Content-type: text/plain \n\n";
                print "Send header oke ........... apik \n\n";
                print "Ini test Non-parse header \n\n";

        3. test konfigurasi

                # chown apache.apache test.pl ;; 1
                # chmod u+rwx test.pl ;; 2
                # lynx 127.0.0.1/perl/test.pl

        PERINGATAN: pada no 1 chown untuk menggantikan kepemilikan file dari root ke 
user apache, agar bisa di-eksekusi oleh user apache (User Web server apache). 
Kesalahan yang ditampilkan jika lupa merubah ke user apache yaitu; Internal Server 
Error atau Forbiden access.

5. Tampilan Web.

        Contoh dibawah ini, merupakan tampilan HTML yang dijadikan masukan oleh user 
dari "INPUT TYPE". User memasukkan Nama, No Pokok dan Password yang kemudian diproses 
oleh script "user.pl" melalui "FORM ACTION".
        -------------------------------------------------------------
        -------------------------------------------------------------
        ## file /var/www/html/user.html

        <HTML>
        <HEAD><TITLE>Form sederhana</TITLE></HEAD>
        <BODY>
        <FORM ACTION="/perl/user.pl" METHOD="GET">
        Nama     : <INPUT TYPE="text" NAME="nama" SIZE=40><BR>
        No Pokok : <INPUT TYPE="text" NAME="no_pokok" SIZE=10><BR>
        Password : <INPUT TYPE="password" NAME="pass" SIZE=10><BR>
        <INPUT TYPE="submit" VALUE="submit form">
        <INPUT TYPE="reset" VALUE="reset form">
        </FORM>
        </BODY>
        </HTML>
        -------------------------------------------------------------
        -------------------------------------------------------------
        ## file /var/www/perl/user.pl
        #!/usr/bin/perl
        print "$ENV{'QUERY_STRING'} <BR>\n";
        $masukan = $ENV{'QUERY_STRING'};
        ($user,$no_pokok,$password) = split(/&/, $masukan);
        $user =~ s/nama=//g;
        $user =~ s/\b\+|\t\b/ /g;
        $password =~ s/pass=//g;
        $no_pokok =~ s/no_pokok=//g;
        $encrypt = crypt($password, substr($password,0,2));
        print "Nama user : $user \n";      
        print "Password  : $password \n";
        print "No Pokok  : $no_pokok \n";
        print "Password encrypt : $encrypt \n";

        Tampilannya menjadi:

        Nama      : budi santosa        
        Password  : santosa
        No Pokok  : 97220037
        Password encrypt : saBGrZphkCo5k ## ini encrypt standar.. tidak aman



6. Koneksi Database PostgreSQL.

        Untuk koneksi ke Database PERL harus diinstall terlebih dahulu modul 
perl-DBI-xx-xx.rpm dan perl-DBD-Pg-xx.rpm. Modul ini merupakan shared library yang 
menghubungkan aplikasi / script PERL dengan database. Dengan adanya modul ini kita 
dapat memanipulasi RDBMS (SELECT, INSERT, UPDATE dan DELETE) melalui WEB BROWSER klien 
atau Internet. Dengan syarat membikin dulu database "test" dan tabel  "auth". contoh 
dibawah ini memasukkan no pokok, nama dan password encrypt MD5 UNIX ke dalam tabel 
database postgreSQL.

        +--------------+        +-------------+         +------------+
        |  Apache      |------->|  mod_perl   |-------->| PostgreSQL |
        |              |<-------|  perl-DBI   |<--------|            |
        +--------------+        |  perl-crypt |         +------------+
                                +-------------+                                        
               
Sebelum membuat koneksi ke PostgreSQL, database test dengan tabel auth harus dibuat, 
untuk menyimpan informasi "no pokok", "nama" dan "password".

============================================
$ createdb test
$ psql test

test => CREATE TABLE auth (
test ->         no_pokok        int,
test ->         nama            varchar(30),
test ->         password        varchar(40)
test ->         );
CREATE
test => \q
============================================


##file crypt_insert.pl di direktori /var/www/perl
use Crypt::PasswdMD5; ## module ini harus di install
use DBI;

#####################
# koneksi ke database #
#####################
$dbh = DBI->connect("dbi:Pg:dbname=test;host=localhost;port=5432", "budi", "santosa");
die "gagal konek ke database\n" unless($dbh);
$masukan = $ENV{'QUERY_STRING'};
($user,$no_pokok,$password) = split(/&/, $masukan);
$user =~ s/nama=//g;
$user =~ s/\b\+|\t\b/ /g;
$password =~ s/pass=//g;
$no_pokok =~ s/no_pokok=//g;

#########################
# encrypt password      #
#########################
$salt = substr($password, 0, 2);
$encrypt = unix_md5_crypt($password, $salt);
print "$encrypt\a\n";

#########################
#  query database       #
#########################
$prep = $dbh->prepare("INSERT INTO auth VALUES($no_pokok,'$user','$encrypt')");
die "tidak bisa prepare \a\n" unless($prep);
$prep->execute;


Data yang dimasukan ke PostgreSQL, berupa password encrypt:

$ psql test

test => SELECT * FROM auth;

 no_pokok |      nama      |           password           
----------+----------------+------------------------------
 97220037 | budi santosa   | $1$sa$5SxFohiip1Mr.IzDHuq9w.
 99220178 | harisa yumawan | $1$ha$R0tMGiC09a4NjEaYeJA9j1
 98220012 | wibowo ageng   | $1$wi$KjEcmUiC0.Rfe5.h7awC0.
  1220034 | sinuwun sare   | $1$si$uJ14/TCGVnkAEuZgUgqcD/
 95220122 | heri wiyanto   | $1$wi$jjNMwJAINTaDCcUhWw0g0/
(5 rows)

Execelent ..... You're real HACKER


7. Pelacakan kesalahan.
        
        7.1. Konfigurasi httpd.conf
                
        agar dapat melihat kesalahan pada saat apache meng-kompile program, 
        dilakukan dengan mengubah tingkat LogLevel menjadi Debug. Sedangkan
        error nya dilihat difile /etc/httpd/log/error_log atau 
        /var/log/httpd/error_log.
        
                LogLevel debug
        
        7.2. Konfigurasi syslogd.conf
        
        Konfigurasi ini digunakan untuk melihat kesalahan konfigurasi Direktif 
        pada Apache web server, yang berhubungan dengan aplikasi daemon. 
        pesan dari daemon di arahkan ke user root dan terminal 1 (/dev/tty1).
        jarak harus menggunakan TAB tidak boleh SPACE BAR.

                daemon.*                        root, admin
                daemon.*                        /dev/tty1

                # /etc/rc.d/init.d/syslog restart ;;restart syslogd     


Pesan :
MAAF KALO TUTORIAl INI RUMIT,... KARENA INTEGRASI SISTEM WEB DENGAN DATABASE 
MELIBATKAN KOMBINASI SERTA KONFIGURASI ANTAR SUB SISTEM (Web, PERL, Syslogd dan 
PosgreSQL). PENULIS TIDAK BISA MEMBERIKAN PEMBAHASAN YANG LEBIH DETAIL KARENA 
KETERBATASAN WAKTU, JIKA ADA TEMAN 2X YANG BERMINAT MELENGKAPI TUTORIAL INI DAPAT 
MENGHUBUNGI SAYA DI [EMAIL PROTECTED] NANTI AKAN SAYA BERIKAN PETUNJUK TENTANG TATA 
CARA  DESAIN INTEGRASI SISTEM. 

Tutorial Serial Apache III : Server Side Include

  Wassalam                                            Jakarta, 30 November 2002
                                                      Sabtu 16:00 


Budi Santosa






-- 
_______________________________________________
Get your free email from http://www.graffiti.net

Powered by Outblaze

---------------------------------------------------------------------
Jumlah pelanggan (updated daily): 188
Untuk berhenti berlangganan, kirim email ke: [EMAIL PROTECTED]
Arsip milis, hyperlink: http://www.mail-archive.com/[email protected]/ 

Kirim email ke