PHP

PHP: Hypertext Preprocessor) is a computer scripting language, originally designed for producing dynamic web pages. It is mainly used in server-side scripting, but can be used from a command line interface or in standalone graphical applications.

While PHP was originally created by Rasmus Lerdorf in 1995, the main implementation of PHP is now produced by The PHP Group and serves as the de facto standard for PHP as there is no formal specification. Released under the PHP License, the Free Software Foundation considers it to be free software.

PHP is a widely-used general-purpose scripting language that is especially suited for web development and can be embedded into HTML. It generally runs on a web server, taking PHP code as its input and creating web pages as output. It can be deployed on most web servers and on almost every operating system and platform free of charge.[5] PHP is installed on more than 20 million websites and 1 million servers, although the number of websites with PHP installed has declined since August 2005.It is also the most popular Apache module among computers using Apache as a web server.The most recent major release of PHP was version 5.2.6 on May 1, 2008.

PHP4

Monday, January 7, 2008 ·

Artikel tentang PHP4 ini akan mengulas sebuah aplikasi yang mengimplementasikan proses otentikasi dengan menggunakan fasilitas sesi dan OOP PHP.

Dalam aplikasi Web kadang dibutuhkan mekanisme yang dapat melindungi data dari pengguna yang tidak berhak mengaksesnya. Misalnya sebuah situs Web yang berisikan foto-foto keluarga dan hanya ingin dapat diakses sesama anggota keluarga.

Mekanisme ini dapat diimplementasikan dalam bentuk sebuah proses login yang biasanya terdiri dari tiga buah tahapan yaitu:
1. Identifikasi. Di tahap ini pengguna memberitahukan siapa dirinya.
2. Otentikasi. Di tahapan ini si pengguna memverifikasi klaimnya tersebut. Di tahapan ini ada tiga hal yang dapat memverifikasi klaim user yaitu: 1) sesuatu yang mereka ketahui, contohnya adalah kode PIN dan password; 2) sesuatu yang mereka miliki, contohnya adalah kartu tanda pengenal dan kartu magnetik; 3) sesuatu yang menjadi jatidiri, contohnya adalah sidik jari dan pindai retina.
3. Otorisasi. Pada tahapan terakhir ini jika identifikasi pengguna benar, sistem menyelesaikan proses loginnya dan mengasosiasikan identitas pengguna dan informasi kontrol akses dengan sesi pengguna.

Proses otentikasi pada prinsipnya berfungsi sebagai kesepakatan pengguna dan pemberi layanan dalam proses pengaksesan resource. Pihak pengguna harus mampu memberikan informasi yang dibutuhkan pemberi layanan untuk berhak mendapatkan resourcenya. Sedang pihak pemberi layanan harus mampu menjamin bahwa pihak yang tidak berhak tidak akan dapat mengakses resource ini.

Dalam artikel ini kita akan menggunakan terminologi otentikasi untuk mencakup keseluruhan tahapan di atas.

Proses otentikasi dapat dilakukan oleh webserver ataupun PHP. Kita akan membahas keduanya.
Otentikasi oleh Webserver

Pada webserver Apache ada beberapa metode yang dipakai dalam mengimplementasikan mekanisme otentikasi. Pada prinsipnya mekanisme ini dibagi menjadi dua jenis yaitu:

1. otentikasi dasar HTTP (HTTP Basic Authentication), yang dapat menggunakan beberapa media penyimpanan data otentikasi seperti file teks, file database DBM, atau RDBMS (misalnya MySQL atau PostgreSQL).
2. otentikasi menggunakan MD5 Digest.

Dalam melakukan perlindungan terhadap suatu resource, kedua jenis otentikasi di atas menggunakan metode berbasis realm (daerah akses yang dikontrol). Setiap resource baik tunggal maupun jamak yang dilindungi akan mempunyai sebuah nama realm. Nama realm dapat dispesifikasi dalam file konfigurasi dengan menggunakan direktif AuthName. Pengguna yang ingin mengakses resource ini untuk pertama kalinya harus melakukan otentikasi dengan menyertakan nama realm. Pada pengaksesan selanjutnya realm ini secara implisit akan tercakup dalam URI.
Otentikasi Dasar HTTP

Otentikasi dasar HTTP menggunakan teknik base64-encoding sederhana, yang diaplikasikan untuk username dan password sebelum data tersebut ditransfer ke server.

Otentikasi jenis ini dipakai untuk membatasi akses ke halaman-halaman Web dengan berdasarkan pada:

* nama host dari browser;
* password yang dimasukkan oleh user.

Proses pengontrolan terhadap resource yang dilindungi ini biasanya menggunakan direktif yang dapat dituliskan dalam file konfigurasi httpd.conf secara langsung atau disimpan dalam file .htaccess. Penggunaan nama file yang lain dapat dilakukan dengan cara mengeset direktif AccessFileName dalam file konfigurasi httpd.conf. Isi dari direktif ini adalah instruksi yang dipakai oleh webserver untuk memastikan siapa yang berhak mengakses dan siapa yang tidak berhak mengakses ke suatu resource.

Dalam contoh ini kita akan menggunakan file .htaccess untuk menyimpan instruksi tersebut.
Otentikasi Dasar Berbasis Password

Jika seorang pengguna untuk pertama kalinya mencoba mengakses direktori yang dilindungi, maka ia harus terlebih dahulu menuliskan nama dan password ke dalam sebuah form yang muncul dalam bentuk window pop up. Jika nama dan password pengguna ini diizinkan untuk mengakses, maka browser berhak mengakses ke direktori ini selama sisa sesi browsing.

Untuk menggunakan fasilitas ini, kita harus menuliskan beberapa instruksi ke dalam file .htaccess yang harus disimpan dalam direktori yang akan dilindungi. Sebagai contoh adalah sebagai berikut:

AuthType Basic
AuthName "Protected Directory"
AuthUserFile /usr/local/httpd/.htpasswd
Require valid-user

Di sini setiap kali direktori diakses, webserver akan melihat ke file .htpasswd yang berada di direktori /usr/local/httpd untuk memastikan apakah browser mempunyai akses atau tidak. File ini dapat dibuat dengan bantuan program htpasswd yang disertakan bersama Apache. Isi dari file ini kurang lebih baris-baris seperti berikut:

eko:Yq8VgagJ3WXCo

di mana kolom pertama (sebelum titik dua) adalah nama pengguna dan kolom berikutnya adalah password yang sudah terenkripsi.
Otentikasi Dasar Berbasis Host

Jenis otentikasi dasar lainnya adalah pembatasan akses berdasarkan host klien. Host dapat berupa nama domain seperti f117.bomber.org atau alamat IP seperti 172.20.172.10.

Contoh dari file .htaccess yang hanya mengizinkan host dengan alamat IP 172.20.172.10 untuk mengakses direktori adalah seperti berikut:

AuthType Basic
AuthName "Protected Directory"
AuthUserFile /dev/null
order deny,allow
deny from all
allow from 172.20.172.10

Dukungan otentikasi di atas diimplementasikan oleh modul Apache mod_auth. Untuk menggunakan metode otentikasi yang sama, namun dengan menggunakan media penyimpanan informasi otentikasi lain (bukan file .htpasswd), dapat digunakan modul mod_auth_dbm, mod_auth_db, atau mod_auth_mysql.
Otentikasi Digest HTTP

Otentikasi yang diimplementasikan dalam modul mod_auth_digest ini mempunyai kelebihan yaitu sistem passwordnya lebih aman dibandingkan dengan otentikasi dasar. Password yang dituliskan oleh user akan mengalami proses message digest dengan metode MD5 terlebih dahulu sebelum dikirimkan ke server. Untuk memanfaatkan dukungan ini, di sisi browser harus ada dukungan untuk MD5. Internet Explorer 5.0, Amaya, dan Mozilla mendukung otentikasi digest. Netscape 4.x tidak mendukungnya. Hal ini dapat menjadi pertimbangan Anda apakah hendak memilih jenis otentikasi ini atau tidak.

Cara menggunakan otentikasi ini cukup sederhana seperti pada otentikasi dasar. Berikut adalah contoh konfigurasi file httpd.conf untuk menggunakan otentikasi ini.


AuthType Digest
AuthName "Protected Directory"
AuthDigestDomain /private/
AuthDigestFile /usr/local/httpd/.digestpw
require valid-user


Sebagai AuthType digunakan nilai Digest. File yang akan menyimpan nama penguna dengan passwordnya dapat diset dengan instruksi AuthDigestFile. Pada contoh di atas, nama file ini adalah .digestpw yang berada dalam direktori /usr/local/httpd. File ini dapat dihasilkan dengan bantuan program aplikasi htdigest yang juga disertakan bersama Apache. Contoh isi dari file ini adalah seperti berikut:

eko:Protected Directory:fbbd87b7dfc47774c42100bf1f5dfe29

Kolom pertama memuat nama pengguna yang dipakai sebagai login. Kolom kedua adalah nama realm tempat pengguna yang bersangkutan memiliki akses. Sedang kolom ketiga adalah hasil message digest.
Cara Kerja Otentikasi Dasar

Setelah kita membahas jenis otentikasi, ada baiknya kita mengetahui cara kerja otentikasi dasar ini.

Jika browser untuk pertama kalinya mengakses resource yang dilindungi:

GET /private/pic01.jpg HTTP/1.1
Host: www.heriyanto.com

maka server akan mengirimkan status respon 401 (Unauthorized) serta header respon WWW-Authenticate yang berisi tipe otentikasi Basic serta nama realm ke browser:

HTTP/1.1 401 Authorization Required
WWW-Authenticate: Basic realm="Protected Area"

Menerima pesan ini, browser akan meminta pengguna untuk menuliskan username serta password yang dibutuhkan untuk otentikasi. Di browser GUI seperti Netscape atau IE, akan muncul window pop up.

Selesai pengguna memasukkan informasi otentikasinya, browser akan kembali mengakses ke resource yang sama dengan mengirimkan header request Authorization yang juga berisi username, password serta tipe otentikasi Basic ke server.

GET /private/pic01.jpg HTTP/1.1
Host: www.heriyanto.com
Authorization: Basic c3RldmVuOnN1cGVybWFu

Jika username dan password ini tidak valid, maka server akan mengirimkan status respon 401 seperti sebelumnya. Seandainya username dan password valid, maka webserver baru akan memberikan resource tersebut.

HTTP/1.1 200 OK
Date: Fri, 16 Nov 2001 19:24:45 GMT
Server: Apache/1.3.20 (Unix) mod_fastcgi/2.2.10
Last-Modified: Thu, 22 Feb 1996 11:45:54 GMT
Content-Length: 23982

...

Untuk selanjutnya, jika mengakses direktori /private atau direktori di bawahnya, browser akan selalu mengirimkan header request Authorization yang sama. Hal ini dikarenakan protokol HTTP yang bersifat stateless, sehingga browser harus selalu mengirim ulang informasi otentikasi kepada server di setiap request.
Dukungan Otentikasi Pada PHP

Dukungan otentikasi oleh PHP secara default hanya ada jika PHP dibuat sebagai modul Apache dan bukan sebagai CGI. Pada dasarnya dukungan ini berkonsep pada cara kerja otentikasi yang telah kita bahas sebelumnya. Untuk bisa menghasilkan header respon, dapat digunakan fungsi header().

Kita akan mengambil contoh dari manual PHP untuk menunjukkan dukungan otentikasi pada PHP. Skrip di bawah ini akan mengharuskan seorang pengguna untuk mengisi username serta password.

if (!isset($PHP_AUTH_USER)) {
header("WWW-Authenticate: Basic realm=\"My Realm\"");
header("HTTP/1.0 401 Unauthorized");
echo "Text to send if user hits Cancel button\n";
exit;
} else {
echo "

Hello $PHP_AUTH_USER.

";
echo "

You entered $PHP_AUTH_PW as your password.

";
}
?>

Jika pengguna sudah mengisi username dan password, maka skrip PHP ini akan kembali diakses oleh browser dan PHP akan menyimpan beberapa variabel:

* $PHP_AUTH_USER berisi username;
* $PHP_AUTH_PW berisi password;
* $PHP_AUTH_TYPE berisi tipe otentikasi. Manual PHP menyebutkan bahwa hanya tipe Basic yang didukung oleh PHP.

Dalam aplikasi yang sesungguhnya, variabel di atas dapat dimanfaatkan untuk memeriksa validitas username dan password dengan bantuan database yang menyimpan data pengguna.
Mendesain Aplikasi Untuk Proses Otentikasi

Dalam artikel ini kita akan membahas pembuatan aplikasi guna menangani proses otentikasi dengan memanfaatkan fitur sesi dan OOP yang ada pada PHP4. Beberapa dukungan yang harus diimplementasi pada aplikasi ini antara lain:

* penggunaan sesi untuk menyimpan variabel otentikasi dan data lainnya;
* penggunaan MD5 untuk menghindari pengiriman password secara apa adanya tanpa dilindungi (plain-text) ke webserver;
* dukungan untuk sign out secara automatis;
* pengimplementasian dengan kelas yang memudahkan pengguna menambahkan fitur yang diperlukan.

Dengan menggunakan sesi, maka hanya session id saja yang akan selalu ditransfer dari browser ke webserver dan sebaliknya. Variabel lain yang dibutuhkan akan tersimpan dalam webserver dan tidak terlihat oleh browser.

Untuk menghindari pengiriman sebuah password secara polos digunakan metode message digest. Secara prinsip dapat juga digunakan metode enkripsi, namun cara ini biasanya terlalu banyak memakan resource prosesor. Implementasi message digest direalisasikan dengan Javascript yang source codenya bisa didapatkan di Internet.

Pada artikel Pemrograman Berorientasi Objek dengan PHP (juga di edisi ini) telah dibahas tentang penggunaan kelas untuk mengimplementasi konektivitas ke database MySQL maupun PostgreSQL. Karena aplikasi ini memakai MySQL sebagai DBMS, kita akan menggunakan kelas MySQLDb untuk melakukan koneksi ke database.

Berikut kita akan membahas secara rinci komponen pendukung aplikasi ini.
Komponen Pendukung

Sebagian besar komponen pendukung aplikasi diimplementasikan dalam bentuk kelas. Hal ini akan memudahkan pengguna menambahkan fungsi yang diinginkan hanya dengan membuat kelas baru yang diturunkan dari kelas yang sudah ada. Tidak kalah pentingnya adalah pendefinisian kolom dari tabel yang digunakan. Kita akan membicarakan ini satu persatu.
Tabel Session

Tabel ini digunakan untuk mendukung pemanfaatan sesi dengan memakai database sebagai media penyimpanannya.

Tiga kolom penting di sini adalah:

* keyname, yang akan menyimpan setiap session id;
* expired, batas waktu berlakunya sebuah session id;
* keyvalue, menyimpan semua variabel sesi yang didefinisikan dalam session id.

Dukungan sesi pada PHP dapat memanfaatkan cookie, namun jika cookie tidak diaktifkan oleh user, sesi tetap dapat dilakukan tanpa cookie. Pekerjaan ini dilakukan oleh PHP secara otomatis jika PHP dikompilasi dengan opsi --enable-trans-sid.
Tabel User

Tabel user digunakan untuk menyimpan data pengguna yang terdaftar. Paling tidak ada dua kolom dari tabel user yang dimanfaatkan untuk kepentingan otentikasi, yaitu kolom email dan passwd. Entri dari email dalam tabel ini selalu unik, dalam arti tidak boleh ada dua email atau lebih yang sama. Sedangkan entri dari passwd adalah sebuah digest yang dihasilkan dari proses message digest md5 terhadap password yang dimasukkan oleh pengguna.
Kelas MySQLDb

Kelas ini digunakan pada setiap operasi yang memerlukan koneksi ke database MySQL. Dalam setiap pemanggilan halaman Web, sedapat mungkin hanya digunakan satu buah koneksi untuk menghindari pemakaian resource yang berlebihan.
Kelas User

Kelas User digunakan untuk mempermudah operasi terhadap tabel user. Sebagian metode dalam kelas ini akan mempunyai nilai kembali berupa array berdimensi satu atau dua.
Kelas Session

Tujuan utama dari penulisan kelas ini adalah untuk mempermudah penggunaan sesi, dalam arti pengguna tidak harus mengurusi apakah variabel konfigurasi register_globals diaktifkan atau tidak. Pengaksesan ke variabel sesi akan ditangani oleh metode GetVar() dari kelas ini, yang memberikan nilai kembali variabel sesi yang diinginkan. Beberapa metode penting dalam kelas ini antara lain:

* Start(), yang harus dipanggil untuk mengaktifkan dukungan session dengan cara meregistrasi fungsi handler sesi;
* GetVar($name), untuk memperoleh nilai variable sesi yang diinginkan;
* Register($args), untuk meregistrasi variabel sesi yang disimpan dalam parameter $args yang merupakan variabel array;
* SetVar($args), yang digunakan untuk mengeset nilai variabel sesi. Parameter $args adalah variabel array asosiatif.

Kelas Authen

Kelas ini diimplementasikan dalam file authen.class.php yang ditujukan untuk menangani proses otentikasi. Konfigurasi seperti nama tabel session dan user yang digunakan dapat dilakukan lewat parameter konstruktor. Untuk mengaktifkan proses otentikasi, metode Start() harus dipanggil. Bergantung pada status otentikasi, maka metode ini akan memanggil salah satu dari dua metode penting lainnya yang harus diimplementasikan:

* ShowLoginForm(), yang akan menampilkan form dengan dua buah masukan yang harus diisi oleh user yaitu email dan password. Variabel ini disimpan sebagai my_email dan my_passwd. Sebelum variabel ini dikirimkan ke webserver, akan dilakukan proses hashing/digest terhadap nilai dari my_passwd yang hasilnya disimpan ke dalam variabel my_md5pass. Nilai inilah yang akan dikirimkan ke webserver, sementara nilai my_passwd akan dikosongkan sehingga tidak dapat digunakan lagi.
* CheckLogin(), yang mengerjakan proses validasi terhadap email dan password yang dimasukkan oleh pengguna dengan cara melakukan query select ke database untuk mendapatkan user dengan email dan password yang diinginkan. Password yang disimpan dalam database adalah juga hasil dari proses hash, sehingga mempermudah query. Jika pengguna ini tidak valid, maka harus ditampilkan teks kesalahan dan fungsi ini memberikan nilai kembalian berupa false.

Jika pengguna ingin menggunakan cara otentikasi yang lain, maka tinggal membuat kelas baru yang diturunkan dari class Authen dan mengimplementasikan dua metode di atas.
File page.inc.php

Yang tidak kalah pentingnya adalah komponen file page.inc.php yang ada dalam direktori includes. Saat ini baru terdapat satu buah fungsi yang didefinisikan di sini yaitu page_open($args). Fungsi ini bertindak sebagai penginisialisasi objek maupun variabel dalam skrip dan harus dipanggil oleh halaman utama dari aplikasi Web. Parameter yang dilewatkan pada fungsi ini adalah array yang berisi pasangan kunci => nilai.

Kunci pada array di sini dapat dikelompokkan menjadi lima bagian seperti diuraikan di bawah ini:

* Kunci db untuk membuat objek dari kelas database (yaitu, MySQLDb). Jika kunci ini didefinisikan maka kunci lain akan dapat digunakan, seperti kunci dbclass untuk mendefinisikan kelas database dan kunci database untuk mendefinisikan nama database. Jika kunci yang dbutuhkan tidak didefinisikan maka akan dipakai nilai yang didefinisikan pada konfigurasi.
* Kunci session, yang berfungsi untuk membuat objek dari kelas Session. Kunci lain yang dapat didefinisikan adalah sessionclass untuk menentukan kelas yang digunakan.
* Kunci autologout untuk menghasilkan logout secara otomatis pada jangka waktu yang ditentukan. Kunci logouttime digunakan untuk mengeset jangka waktu ini.
* Kunci signout untuk mendukung logout secara manual.
* Kunci authen untuk membuat objek dari kelas Authen. Kelas yang digunakan dapat diset dengan kunci authenclass.

Contoh Aplikasi

Sekarang kita akan melihat contoh penggunaan komponen yang disebut di atas dalam aplikasi nyata yang mengharuskan proses otentikasi. Dalam CD yang disertakan Anda akan menemukan file otentikasi_php.tgz yang berisi contoh aplikasi Web.

Di dalam contoh diperlihatkan dua buah aplikasi yaitu admin.php dan admin_img.php. Perbedaan keduanya adalah dalam penggunaan kelas untuk melakukan proses otentikasi. Pada admin.php digunakaan class Authen yang adalah kelas dasar dari AuthenImg. Class AuthenImg adalah kelas turunan dari Authen ; kelas ini digunakan untuk proses otentikasi pada aplikasi admin_img.php. Jika dilihat source codenya, maka pada kelas AuthenImg ini hanya ditambahkan sebuah gambar sebagai header halaman pada metode ShowLoginForm(). Sedangkan proses yang dibutuhkan untuk melakukan otentikasi sesungguhnya tetap menggunakan metode dari kelas Authen. Ini adalah bukti salah satu keuntungan penggunaan kelas.
Aplikasi admin.php

Pada aplikasi pertama proses otentikasi ditangani oleh kelas Authen. Setelah melakukan include beberapa file yang dibutuhkan, fungsi page_open() dipanggil dengan parameter yang mendefinisikan beberapa kunci.

if (!page_open(array("db" => 1,
"session" => 1,
"authen" => 1,
"authenclass" => "Authen",
"autologout" => 1 ,
"logouttime" => 300,
"signout" => $signout,
"page" => $PHP_SELF)))
die;

Dengan kunci db, session, dan authen maka objek yang bersangkutan akan dibuat dengan memakai kelas default. Baris "authenclass" => "Authen" memerintahkan skrip untuk memakai class Authen pada pembuatan objek authen. Dengan kunci autologout dan "logouttime"=>300 maka setelah 300 detik sejak pengguna sukses melakukan otentikasi tanpa melakukan aktivitas apapun, ia akan dilogout secara otomatis.

Tampilan aplikasi admin.php untuk memasukkan email dan password diperlihatkan pada Gambar 1.
Aplikasi admin_img.php

Seperti telah disinggung sebelumnya, aplikasi kedua mempunyai fungsi yang sama seperti aplikasi pertama. Perbedaannya hanya terletak pada bentuk form. Pada aplikasi ini ditambahkan sebuah gambar. Penambahan ini dilakukan oleh kelas AuthenImg yang diturunkan dari kelas Authen. Kelas ini mula-mula melakukan overriding atas metode ShowLoginForm() untuk menampilkan gambar. Namun di baris akhir memanggil metode ShowLoginForm() asli yang didefinisikan di kelas dasar Authen untuk menampilkan form otentikasi.

class AuthenImg extends Authen {
// Definisi metode ShowLoginForm yang baru
function ShowLoginForm() {
echo "
";
echo "";
echo "
";

// Lalu memanggil metode ShowLoginForm pada class Authen
parent::ShowLoginForm();
}
} // End of class

Untuk memerintahkan agar kelas AuthenImg ini dipakai dalam proses otentikasi, maka pada file admin_img.php instruksi page_open() diubah menjadi seperti berikut:

...
if (!page_open(array("db" => 1,
"session" => 1,
"authen" => 1,
"authenclass" => "AuthenImg",
"autologout" => 1 ,
"logouttime" => 300,
"signout" => $signout,
"page" => $PHP_SELF)))
die;
...

Satu hal yang penting diperhatikan adalah baris "authenclass"=>"AuthenImg", perintah ini akan menghasilkan pembuatan objek dari kelas AuthenImg. Hasil tampilan aplikasi kedua dapat dilihat di Gambar 2.
Penutup

Contoh aplikasi di atas hanya menggambarkan prinsip penggunaan komponen dalam proses otentikasi. Anda tentu saja dapat mengubah atau menambahkan fitur baru untuk disesuaikan dengan kebutuhan aplikasi yang Anda tulis. Akhir kata, selamat mencoba.

Site Sponsors

About this blog

Selamat datang Di Blog PHP & MYSQL
Blog ini akan membahas tentang PHP manual, Tutorial PHP, TIPS & TRIKS PHP, Keamanan Code-PHP, Function PHP, Class PHP...

Blog ini juga membahas dasar-dasar Belajar PHP , belajar basis data atau database MySql, memanipulasi data MySql, script untup convert Mysql to Text, convert text to MySql dengan PHP, report dengan PDF, report dengan Excel, dan Aplikasi Barcode dengan PHP, dan beberapa contoh-contoh script yang bisa di implementasikan....

XML

The Extensible Hypertext Markup Language, or XHTML, is a markup language that has the same depth of expression as HTML, but also conforms to XML syntax.
Adsense Indonesia

REQUEST TUTORIAL PHP