Anda di halaman 1dari 33

TUGAS SISTEM INFORMASI BERBASIS WEB

MACAM-MACAM JENIS AUTHENTIFIKASI PADA PHP

Di Susun Oleh:

1.Teddy Zugana(09071003050)

UNIVERSITAS SRIWIJAYA
FAKULTAS ILMU KOMPUTER
SISTEM INFORMASI 6B

ANGKATAN 2007

DAFTAR ISI
Table of Contents
1.SESSION
1
2.MEMBUAT SESSION
1
3. Menggunakan session pada array
2
4. Mencegah session Fixation
7
5. Mencegah session Hijacking
8
6.Penggunaan Session Pada login menggunakan
AdoDB___________ 10
7.COOKIES
20
8.Meguji Cookies
20
9. Membuat cookies
22
10. Memanggil cookies
23
11.Menghapus Cookies
23

12. Mengatasi Kegagalan mengirim cookie


24
13.HASHING COOKIES
25
14. Authetikasi PHP pada Port FTP
27

15.Authetikasi menggunakan Variable digest


global PHP 27

BAB I
SESSION PADA PHP

1. Session
Session dalam kaitannya dengan waktu merupakan waktu seorang
user mengunjungi suatu situ. Session akan diawali ketika user mulai masuk
suatu situs dan akan berakhir ketika user menutup situs yang sikunjungi
tersebut. Namun, perlu diingat bahwa tidak semua aplikasi PHP
membutuhkan session. Session ini diperlukan Karena suatu aplikasi web
yang bersifat database hampir tidak mungkin hanya terdiri atas satu
halaman web saja sehingga pengunjung situs tersebut juga dipastikan akan
bolak-balik dari satu halaman ke halaman lainnya. Misalnya pada situs took
buku online, untuk membeli beberapa buku, pengunjung akan bolak-balik
dari satu halaman kategori ke halaman kategori lainnya. Rangkaian
kunjungan inilah yang dapat dipakai untuk menggambarkana sebuah session
sehingga session diperlukan.
Saat user mengunjungi situs yang menerapkan session, user akan diberi
sebuah session_id sebagai identitas sebuah session.
Session dalam PHP dapat dimulai dengan 2 cara, yaitu secara otomatis dan
menggunakan fungsi session pada script PHP. Untuk memulai session secara
otomatis, file php.ini perlu diedit dengan melakukan perubahan pada baris
session.auto_start=0 menjadi session.auto_start=1, kemudian simpan
perubahan tersebut dan restart kembali web server anda. Untuk memulai
session menggunakn fungsi pada PHP, gunakan fungsi session_start()

2. Membuat session
Sebelum mulai membuat session, anda perlu menentukan direktori yang
akan digunakan untuk menampung session yang anda buat. Lakukan
perubahan pada file php.ini seperi anda hendak lakukan padda saat
menjalankan session secara otomatis. Perubahan nilai yang dilakukan pada
baris session.save_path setelah tanda = diisikan sesuai dengan pat direktori
yang anda inginkan untuk menyimpan session yang anda buat, kemudian
simpan perubahan tersebut dan restart kembali web server anda. Misalnya ,
contoh perubahan
Session.save_path=d:/tmp
Maka pastikan pada drive d terdapat direktori yang bernama tmp.
Perhatikan contoh penggunaan session_start berikut ini:
Nama file : testsession. php
<? php
Session_start();
$pesan=”session dimulai...”;
Print($pesan.”<br>”);
Print(”Id session :”.session_id());
?>
Contoh hasil eksekusi testsession.php ditunjukan seperti ini
3. Menggunakan session pada array
Pembuatan session dengan session_start() akan menghasilkan file session
dengan nama sess_ diikuti oleh nilai session_id. Session dapat juga dibuat
dengan fungsi session_register(). Penggunaan session_register
menggunakan array PHP memungkinkan penyimpanan variabel dan nilainya

Perhatikan contoh penggunaan session_register pada array menggunakan 3


script berikut:
Nama file : ftamu.htm
<!DOCTYPE HTML PUBLIC ”-//W3C//DTD HTML 4.10 Transitional //EN”
“http://www.w3.org/TR/html4/loose.dtd”>
<html>
<head>
<title>Buku Tamu</title>
<meta http-equiv=”Content-Type” content=”text/html; charset=iso-8859-
1”>
</head>
<body>
<h1>Selamat Datang</h1>
Silakan isi buku tamu:<br>
<form name=”tamu” method=”post” action=”sesreg.php”>
<pre>
Nama:<input type=”text” name=”nama”>
Email :<input type=”text” name=”email”>
<input type =”submit” value=”kirim”>
</pre>
</form>
</body>
</html>

File :sesreg.php
<?
session_start();
$_SESSION[nama]=$_POST['nama'];
$_SESSION[email]=$_POST['email'];
?>
<html>
<head>
<title>Penggunaan Session_register()</title>
</head>
<body>
<?
Print("<h1>Hallo ".$_POST['nama']."</h1>");
Print("<h1>Email anda:".$_POST['email']."</h1>");
Print("Terima kasih telah mengisi buku tamu kami <br>");
?>
<a href="ujisession.php">Uji session</a>
</body>
</html>

Nama file:ujisession.php
<?
session_start();
?>
<html>
<head>
<title> Penggunaan session_register()</title>
</head>
<body>
<?
Echo "session anda adalah <br>";
Print("<h3>Hallo". $_SESSION['nama']."</h3>");
Echo "<h1> Email anda".$_SESSION['email']."</h1><br>";
Echo " Test session akan segera dihapus";
session_destroy():
?>
<a href=”ftamu.htm”>kembali ke Form</a>
</body>
</html>

Gambar Form tamu Untuk session:


4. Mencegah session Fixation
Id session (session identifier ) adalah informasi yang sangat berguna bagi
penyerang. Apabila penyerang berhasil mendapatkan id session. Ia bias
menggunakan sebagai senjata untuk menyerang system aplikasi. Pada
umumnya, ada tiga metode yang bias digunakan untuk mendapatkan id
session yang valid yaitu:

1. Prediction . Prediksi adalah metode yang paling ringan, di mana


penyerang mencoba menebak id session. Metode ini jarang berhasil, jika
anda menggunakan fungsi random dan hashing
2. Capture. Menangkap id session adalah jenis serangan yang umum.
Metode ini tidak akan berhasil apabila id session disebarkan ke dalam cookie
atau variable get

3.Fixation Metode ini sangat sederhana bagi penyerang untuk mendapatkan


id session yang valid, di mana penyerang menggunakan fixed id.

Apabila dilihat dari waktu kejadiannya, session fixation adalah jenis serangan
di mana attacker menyerang browser user sebelum user tersebut login.
Serangan ini secara tidak langsung juga difasilitasi oleh lemahnya proteksi
sistem aplikasi.
Untuk bisa mencegah session fixation, anda tentu perlu mengetahui
bagaimana penyerang melakukan aksinya. Sebagai ilustrasi, anda memiliki
kode sebagai berikut:
Session_start();
$_SESSION[’user’]=’admin’;
Kode diatas merepresentasikan simulasi login oleh admin, di mana ketika
login sesuai, kode akan menset session . Selanjutnya, dengan menggunakan
komputer lain, atau paling tidak browser lain, penyerang mengakses alamat
yang sama dengan menambahkan id PHPSESSID. Contohnya seperti berikut:
http://path_URL/TestFixation.php?PHPSESSID=1234
Aksi penyerang akan mengakibatkan dibuatnya session dengan nilai sama
dan id sesuai yang dikirimnya, setelah itu, penyerang bisa menggunakan id
yang telah dikirimkan melalui parameter URL.

Solusi untuk mencegah session fixation adalah dengan memanfaatkan fungsi


session_regenerate_id(). Fungsi ini akan men-generate current id dengan
nilai yang baru. Implementasinya, re-generate id session baru setiap login
berhasil dilakukan, contohnya seperti berikut:
Session_start();
$_SESSION[’user’]=’admin’;
Echo ‘<p>id:’,session_id();
If(!empty($_SESSION))
{session_regenerate_id(true);
}
Kode diatas akan selalu men-generate id session baru jika session bukan
merupakan session baru. Secara default, session_regenerate_id() tidak akan
menghapus session yang lama. Anda bisa menambahkan parameter opsional
berupa boolean true untuk menghapus session lama secara otomatis.
Parameter ini hanya bisa digunakan di PHP 5.1.0 ke atas.

5. Mencegah session Hijacking


Jenis serangan lain yang berbasis pada informasi session adalah session
hijacking. Berbeda dengan session fixation, di sini penyerang melakukan
aksinya setelah user login ke komputer server. Sebenarnya serangan ini juga
ada kaitannya dengan session fixation.
Pendekatan yang baik untuk mencegah session hijacking adalah dengan
menyebarkan token. Langkah ini harus didukung dengan penggunaan
algoritma hashing atau enskripsi. Contohnya seperti berikut:

session_start()
$token=md5($_SERVER[’HTTP_ACCEPT_ENCODING’]
. $_SERVER[‘HTTP_ACCEPT_LANGUAGE’]
. $_SERVER[‘HTTP_USER_AGENT’]);
If(isset($_SESSION[‘HTTP_USER_AGENT’]))
{
If($_SESSION[‘HTTP_USER_AGENT’]!=$token)
{ exit(‘invalid…’);
}
else
{$_SESSION[‘HTTP_USER_AGENT’]=$token;
}
}
Print_r($_SESSION);

Perlu diketahui, keamanan data session tidak hanya dipengaruhi oleh teknik
hashing ataupun enskripsi. Ada factor lain yang perlu anda perhatikan, yaitu
lokasi penyimpanan session. Dimana normalnya terletak di direktori
penyimpanan (tmp). Pastikan bahwa direktori ini tidak bisa diakses oleh
orang lain. Akan lebih baik lagi jika session ditempatkan di memori, dengan
mengatur konfigurasi directive session.save _path, dan memberinya nilai
mm.

6.Penggunaan Session Pada login menggunakan AdoDB


Dengan menggunakan fungsi-fungsi session, kita bisa membagun suatu
mekanisme login.
Skenarionya begini: Pengunjung mekakses halaman utama index.php,
dimana terdapat form isian login form isian user dan form isian password
untuk login. Ia harus memasukkan username dan password yang valid agar
dapat mengakses informasi utama di suatu situs , kemudian setelah berhasil
akan disediakan link untuk logout dan diharapkan telah menyediakan plugin
inodb pada directory active pada web yang akan dibuat.
Untuk itu maka diperlukan suatu database untuk menampung data user
yang terdaftar dalam contoh ini menggunakan mysql
Sintaks sql untuk table user yang akan digunakan dalam aplikasi login
session:
CREATE TABLE IF NOT EXISTS `users` (
`No` bigint(100) NOT NULL auto_increment,
`username` varchar(100) NOT NULL,
`nama_lengkap` varchar(100) NOT NULL,
`password` varchar(100) NOT NULL,
`level` varchar(100) NOT NULL,
`id_session` varchar(100) NOT NULL,
PRIMARY KEY (`No`)
)
Kemudian isilah table tersebut dengan user yang anda inginkan untuk
pengetestan login nanti
Kita akan membuat file konektor AdoDb untuk koneksi menggunakan ado DB
seperti contoh berikut
File :connector.php
<?
require_once("adodb/adodb.inc.php");
$db = ADONewConnection('mysql');
$db->Connect('localhost','root','','TA');
?>

Kemudian kita akan membuat script untuk form login sebagai interface login:
File:index.php
<html>
<head>
<title></title>
<link href="style.css" rel="stylesheet" type="text/css" />
</head>
<body OnLoad="document.login.username.focus();">
<div id="header">
<div id="content">
<h2>Login</h2>
<img src="images/login-welcome.gif" width="97" height="105"
hspace="10" align="left">

<form name="login" action="cek_login.php" method="POST"


onSubmit="return validasi(this)">
<table>
<tr><td>Username</td><td> : <input type="text"
name="username"></td></tr>
<tr><td>Password</td><td> : <input type="password"
name="password"></td></tr>
<tr><td colspan="2"><input type="submit" value="Login"></td></tr>
</table>
</form>
<p>&nbsp;</p>
</div>
<div id="footer">
Copyright &copy; <?echo date("Y");?>. All rights reserved.
</div>
</div>
</body>
</html>
File :cek_login.php
Kemudian akan membuat file cek_login.php yang digunakan untuk
mencheck login user disertai validasi input login:
<?php

include("connector.php");
function anti_injection($data){
$filter =
mysql_real_escape_string(stripslashes(strip_tags(htmlspecialchars($data,ENT
_QUOTES))));
return $filter;
}

// pastikan username dan password adalah berupa huruf atau angka.


if (!ctype_alnum($username) OR !ctype_alnum($pass)){
echo "Sekarang loginnya tidak bisa di injeksi lho.";
}
else{

$login=$db->Execute("SELECT * FROM users WHERE


username='$username' AND password='$pass'");
$ketemu2=$db->Execute("SELECT COUNT(*) FROM users WHERE
username='$username' AND password='$pass'");
$ketemu3=$ketemu2->GetArray();
$ketemu=$ketemu3[0][0];
$r=$login->GetArray();
// Apabila username dan password ditemukan
if ($ketemu > 0){
session_start();

$_SESSION[namauser] = $r[0][username];
$_SESSION[namalengkap] = $r[0][nama_lengkap];
$_SESSION[passuser] = $r[0][password];
$_SESSION[leveluser] = $r[0][level];

$sid = session_id();
mysql_query("UPDATE users SET id_session='$sid' WHERE
username='$username'");
header('location:media.php?module=home');
}
else{
echo "<link href=../config/adminstyle.css rel=stylesheet type=text/css>";
echo "<center>LOGIN GAGAL! <br>
Username atau Password Anda tidak benar.<br>
Atau account Anda sedang diblokir<br>";
echo "<a href=index.php><b>ULANGI LAGI</b></a></center>";
}
}
?>

Kemudian Menampilkan halaman bila berhasil login


File :media.php
<?php
session_start();

if (empty($_SESSION[username]) AND empty($_SESSION[passuser])){


echo "<link href='style.css' rel='stylesheet' type='text/css'>
<center>Untuk mengakses modul, Anda harus login <br>";
echo "<a href=index.php><b>LOGIN</b></a></center>";
}
else{
?>

<html>
<head>
<title></title>
<script type="text/javascript" src="../nicEdit.js"></script>
<script type="text/javascript">
bkLib.onDomLoaded(function() { nicEditors.allTextAreas() });
</script>
</script>
<link href="style.css" rel="stylesheet" type="text/css" />
<link href="style3.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="header">
<div id="menu">
<ul>
<li><a href=?module=home>&#187; Home</a></li>
<?php include "menu.php"; ?>
<li><a href=logout.php>&#187; Logout</a></li>
</ul>
<p>&nbsp;</p>
</div>

<div id="content">
<?php include "content.php"; ?>
</div>
<div id="footer">
Copyright &copy; <?echo date("Y");?>. All rights reserved.
</div>
</div>
</body>
</html>
<?php
}
?>

Kemudian file untuk logout pada halaman:


<?php
session_start();
session_destroy();

// Apabila setelah logout langsung menuju halaman utama website, aktifkan


baris di bawah ini:

// header('location:http://www.alamatwebsite.com');
?>
<html>
<head>
<title></title>
<link href="style.css" rel="stylesheet" type="text/css" />
</head>
<div id="header">
<div id="content">
<h2>SUCCESS LOGOUT FROM SYSTEM <b>[LOGOUT]<b></h2>

<center>
<br>
<a href='index.php'> << BACK TO LOGIN FORM</a>
</center>

<p>&nbsp;</p>
</div>
<div id="footer">
Copyright &copy; <?echo date("Y");?>. All rights reserved.
</div>
</div>
</body>
</html>

Beberapa contoh gambar login menggunakan session


Sukse login
Sukses logout
BAB II
COOKIES PADA PHP

7.COOKIES
Cookies dapat digunakan di dalam script PHP untuk menyimpan bit-bit kecil
informasi tentang user. Suatu cookies adalah sejumlah kecil data yang
disimpan oleh browser user bersamaan dengan suatu permintaan sari suatu
server atau script. Cookies pada browser client akan dikirim pertama kali ke
server dan kemudian disimpan pada browser web.
Cookies memiliki kemampuan untuk menyimpan dan memanggil kembali
data yang ada pada hardisk client. Hanya saja cookies ini bersifat
sementara sehingga keyika browser ditutup, atau waktu penyimpanan
cookies sudah habis, cookies juga akan dihapus. Dengan demikian,, ketika
browser dibuka kembali atau melewati jangka waktu tertentu, nilai cookies
akan kosong karena suatu cookies terdiri dari nama, nilai dan tanggal nilai
expires cookie.

8.Menguji Cookies
Sebelum melakukan pembuatan cookies, lebih baik anda melakukan
pengujian terlebih dahulu pada browser yang anda pakai, apakah briwser
anda mendukung cookies atau tidak. Perlu anda ketahui bahwa terkadang
fungsi untuk menerima cookies pada beberapa server sering dimatikan
dengan alasan keamanan, walupun tidak ada masalah pada kenyataannya,
karena cookies memeiliki batasan. Suatu serever hanya dapat menyimpan
20 cookies pada browser pemakai, masing-masing cookies berukuran
terbatas sampai sebesar 4 KB.
File:testcookies.php
<?
$status=0;
If(isset($cookieku)&&($cookieku==”testcookie”))
{$status=1;
}
If(!isset($CK))
{
Setcookie(”cookieku”,”testcookie”);
header(”Location:$PHP_SELF?CK=1”);
exit;
}
?>
<html>
<head>
<title>Menguji cookie</title>
</head>
<body>
Status cookie:
<?
If($status==1)
{echo ”mendukung cookie”;
}
Else
{ echo ”tidak mendukung cookie”;
}
?>
</body>
</html>

9.Membuat cookies
Untuk membuat cookie digunakan fungsi setcookie() dengan sintaks sebagai
berikut:
Setcookie(String_name,String_value,int_expire,string_path,string
_domain,int_secure)

Semua argumen, kecuali string_name , bersifat opsional


Keterangan:
• String_name adalah nama variabel yang digunakan untuk menyimpan
nilai cookie yang dapat diakses nantinya dengan $_COOKIE atau array
$HTTP_COOKIE_VARS.
• String_value merupakan nilai yang dilewatkan ke variabel string_name.
• Int_expire adalah batas waktu expire cookie yang ditentukan
• String_path adalah path direktori web server yang berlaku untuk
cookie
• String_domain merupakan domain server yang mendefinisikan cookie
• Int_secure nilai parameter keamanan transmisi melalui HTTPS

<?
Setcookie(”nama”,”kasiman”,time()+60,”/”,”127.0.0.1”,0);
?>
<html>
<head>
<title>membuat cookie</title>
</head>
<body>
<h1>cookie</h1>
</body>
</html>
Pada script diatas cookie diset hanya berlaku 1 menit dalam nilai set cookie
expire time()+60 yang artinya cookie hanya berlaku selama 60 detik atau 1
menit, dan fungsi cookie ini harus dideklarasikan sebelum output program
dikirim ke browser client yang artinya harus ditulis sebelum penulisan tag
html

10. Memanggil Cookies


Untuk memanggil cookie, cukup ketikan nama cookie
Perhatikan contoh pemanggilan cookie berikut:
<?
$namac=$HTTP_COOKIE_VARS[”nama”];
$nama2=$_COOKIE[”nama2”];
Print(”nama :$namac<br>”);
Print(”nama :$nama2<br>”);
Print(”nama :$nama<br>”);
?>

11.Menghapus Cookies
Untuk menghapus cookie, panggil fungsi set cookie dengan hanya
menyebutkan nama cookie sebagai argumennya atau hanya denga
menyebutkan nama cookie sebagai argumen pertama dan string kosong
pada argumen nilai.
File :setcookie
<?
Setcookie(”nama”,”kasiman”);
Print(”cookie telah terbentuk”);
?>
<html>
<body>
Cookie
</body>
</html>

File :Hapus cookie


<?php
$namac=$HTTP_COOKIE_VARS[”nama”];
//hapus cookie
Setcookie(”nama”);
Print(”nama sebelum dihapus: $namac”);
Print(”nama sesudah dihapus:$_COOKIE[’nama’]”);
?>

12. Mengatasi Kegagalan mengirim cookie


Apakah anda pernah mengalami kegagalan saat mengirim cookie? Misalnya ,
Mendapat respon berupa pesan ”header already sent” dari parser PHP. Ini
berarti bahwa cookie yang nada tetapkan tidak bisa dikirim dan diset.
Kegagalan seperti itu disebabkan karena kita terlebih dahulu mengirim
output lain ke browser sebelum memanggil fungsi setcookie(). Contohnya
seperti berikut ini :
<?
Echo ’hii..’;
Setcookie(’mycookie’,’test’);
?>
Kode diatas berpotensi besar mengakibatkan cookie gagal dikirim. Spserti
diketahui, pesan HTTP memiliki header dan body yang nantinya dikirim ke
browser client. Begitu anda sudah mengirim body, anda tidak diperkenankan
lagi untuk mengirim header lainnya. Adapun penulisan yang disarankan
adalah sebagai berikut:

Setcookie (’mycookie’,’test’);
Echo ”test”;
Atau
<?
Setcookie(’mycookie’,’test’);
?>
<html>
<body>
</body>
</html>
Kegagalan semacam ini juga berlaku ketika anda mengirim header HTTP.
Misalnya, browser sudah mencetak output body sebelum header berhasil
dikirim

13.Hashing Cookie
Umumnya, kita menggunakan cookie untuk menyimpan nama yang
kemudian diikuti password. Bagaimanapun juga, menyimpan informasi
sebagai teks sederhana akan lebih membuka peluang terhadap penyerangan
. Cara seperti ini harus dihindari, dan sebaiknya anda menggunakan
algoritma hash untuk menyimpan cookie.
Salah satu algoritma hashing yang cukup populer dan sering digunakan
adalah message-digest (MD). Algoritma ini diimplementasikan dalam fungsi
md5().Contoh penggunaannya sebagai berikut:
If(!empty($_POST[’nama’])&&!empty($_POST[’pass’]))
{$time=$time();
$nama=$_POST[’nama’];
$pass=md5($_POST[’pass’]);
If(isset($_POST[’remember’]))
{$remember=$_POST[’remember’];
}
}
$sql=’SELECT nama,password FROM login WHERE nama=”’.$nama.’” AND
password =”’.$pass.’”’;

$res=mysql_query($db,$sql) or die(’sql error’);


If(($res!=null) && (mysql_num_rows($res)==1))
{$data=$nama.’-’.$pass;
If(isset($_POST[’remember’]) && ($_POST[’remember’]==’yes’))
{if(setcookie(’info’,$data,$time+3600)==true)
{$lifetime=$time+3600;
Echo ’cookie Lifetime: ’,$lifetime;
}
}
}
?>
<p><a href=”./logout.php”>logout</a>
<?
ELSE
{exit(’acesss denied’);
}
Mysql_free_result($res);
Mysql_close($db);
?>

14. Authetikasi PHP pada Port FTP


Untuk dapat melalukan login pada port 21 yaitu FTP untuk pengaksesan file
dapat menggunakan fungsi dalam php yaitu dengan sintaks:
ftp_login(ftp_connection,username,password)

keterangan atribut:
ftp_connection unutuk mejelaskan server yang kan diakses contoh 127.0.0.1
username yaitu username yang digunakan untuk login pada ftp
password. Ialah password yang digunakan untuk authetikasi username yang
mengakses ftp port 21

contoh sintaks pada php


<?php
$conn = ftp_connect("ftp.testftp.com") or die("Could not connect");
ftp_login($conn,"admin","ert456");
ftp_close($conn);
?>

15.Authetikasi menggunakan Variable digest


global PHP
Authentikasi digest dengan variabel global hanya berlaku pada PHP apache
modul
Berikut contoh dasar penggunaaan:

Example #6 Basic HTTP Authentication example

<?php
if (!isset($_SERVER['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';
exit;
} else {
echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";
echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as your password.</p>";
}
?>

Example #7 Digest HTTP Authentication example

<?php
$realm = 'Restricted area';

//user => password


$users = array('admin' => 'mypass', 'guest' => 'guest');

if (empty($_SERVER['PHP_AUTH_DIGEST'])) {
header('HTTP/1.1 401 Unauthorized');
header('WWW-Authenticate: Digest realm="'.$realm.
'",qop="auth",nonce="'.uniqid().'",opaque="'.md5($realm).'"');

die('Text to send if user hits Cancel button');


}

// analyze the PHP_AUTH_DIGEST variable


if (!($data = http_digest_parse($_SERVER['PHP_AUTH_DIGEST'])) ||
!isset($users[$data['username']]))
die('Wrong Credentials!');

// generate the valid response


$A1 = md5($data['username'] . ':' . $realm . ':' . $users[$data['username']]);
$A2 = md5($_SERVER['REQUEST_METHOD'].':'.$data['uri']);
$valid_response = md5($A1.':'.$data['nonce'].':'.$data['nc'].':'.
$data['cnonce'].':'.$data['qop'].':'.$A2);
if ($data['response'] != $valid_response)
die('Wrong Credentials!');

// ok, valid username & password


echo 'Your are logged in as: ' . $data['username'];

// function to parse the http auth header


function http_digest_parse($txt)
{
// protect against missing data
$needed_parts = array('nonce'=>1, 'nc'=>1, 'cnonce'=>1, 'qop'=>1, 'userna
me'=>1, 'uri'=>1, 'response'=>1);
$data = array();
$keys = implode('|', array_keys($needed_parts));

preg_match_all('@(' . $keys . ')=(?:([\'"])([^\2]+?)\2|([^\s,]+))@', $txt,


$matches, PREG_SET_ORDER);

foreach ($matches as $m) {


$data[$m[1]] = $m[3] ? $m[3] : $m[4];
unset($needed_parts[$m[1]]);
}

return $needed_parts ? false : $data;


}
?>
DAFTAR PUSTAKA
Kadir Abdul, 2007. Konsep Sistem Informasi, Bandung.
Penerbit Andy
Peranginangin kasiman 2005, Aplikasi web dengan
PHP, Bandung .Penerbit andy
Dwi Prasetyo Didik, 2006. 101 Tips and trik
pemprograman PHP, Jakarta. Penerbit Elex Media
komputindo
http://www.php.net/
http://www.w3schools.com

Anda mungkin juga menyukai