Mbrojtja
Mënyra e shpjeguar më poshtë aftëson mbrojtjen e një ose më shumë faqeve me një llogari të vetme të administratorit. Mbrojtja bëhet nëpërmjet sesioneve të PHP-së dhe administratori qëndron i identifikuar për aq kohë sa sesioni nuk ka skaduar (zakonisht 20 minuta pa hapur faqen) ose administratori nuk mbyll shfletuesin (IE, Firefox).
E vetmja mënyrë për të sulmuar faqen, është duke gjetur ID-në e sesionit të hapur nga administratori si dhe HTTP_USER_AGENT të shfletuesit të përdorur nga administratori. Për të gjetur ID-në, sulmuesi duhet të përgjojë informacionin e shkëmbyer nga administratori ose duhet të ketë leje të hapë "cookies" në kompjuterin e administratorit. Për të gjetur HTTP_USER_AGENT, sulmuesi duhet të përgjojë rrjetin e administratorit. Me pak fjalë, skripti ofron mbrojtje relativisht të sigurtë.
Për këtë shembull supozojmë se faqja ka adresën http://localhost/ dhe aty janë hedhur këta skedarë:
vizitor.php - faqja e vizitorëve të thjeshtë
identifikohu.php - faqja e identifikimit
eshteAdmin.php - skripti qe kontrollon nëse ka hyrë administratori apo jo.
admin.php - faqja e administratorit
Pra, identifikimi ndjek këtë rrugë:
vizitor.php -> identifikohu.php -> eshteAdmin.php -> admin.php
Konfigurimi
Para se të vini në punë mbrojtjen e mësipërme, duhet kryer konfigurimi i skedarit identifikohu.php. Në krye të këtij skedari duhet shkruar emri dhe fjalëkalimi i administratorit, si dhe adresat e faqeve që hapen pas hyrjes dhe daljes së panelit të administratorit.
Për këtë shembull kemi këtë konfigurim:
Kodi PHP:
<?php
//**************** KONFIGURIMI *********************
// Shkruaj emrin dhe fjalekalimin e administratorit
// Fjalekalimi duhet te shifrohet me funksionin MD5()
// Per ta shifruar mund te perdorni funksionin MD5 te PHP-se
// ose tek faqja http://pajhome.org.uk/crypt/md5/
define ('ADMIN_EMRI', 'admin');
define ('ADMIN_FJALEKALIMI', '4b14ade55cf2243661b1f2919884edfe');
define ('HYRJA', '/admin.php'); // faqja e administratorit
define ('DALJA', '/vizitor.php'); // faqja e vizitoreve
?>
Vini re se fjalëkalimi është shifruar si hash me funksionin MD5. Kjo bëhet me qëllim që edhe nqs një person arrin të hapë kodin e faqes identifikohu.php, ai nuk mund të hyjë dot në panelin e administratorit sepse fjalëkalimi është i shifruar.
Në shembullin më lart, fjalëkalimi i shifruar është 'admin2006'. Për të shifruar një fjalëkalim tjetër, përdorni këtë faqe ose krijoni një skript të thjeshtë në PHP me kodin:
echo md5("Fjalekalimi_im_sekret");
HYRJA është vendndodhja e faqes që hapet pas identifikimit të saktë të administratorit ndërsa DALJA është vendodhja e faqes që hapet kur administratori mbyll panelin e administratorit.
Përdorimi
Për të mbrojtur një faqe mjafton të shkruani një rresht të vetëm në krye të faqes:
require('eshteAdmin.php');
Pra, nëse duam te mbrojmë admin.php, hapDatabazen.php, fshiAnetaret.php, apo faqe të tjera të administratorit, mjafton të shkruajmë rreshtin e mësipërm në krye të çdo faqeje.
Skedarët
Më poshtë është kodi i skedarëve, si dhe pamjet e tyre gjatë shfletimit. Skedarët mund të shkarkohen të gjithë sëbashku në paketën e bashkëngjitur.
vizitor.php
Kodi PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Faqja e Vizitorëve</title></head>
<body>
<h2><strong>Kjo është faqja e vizitorëve të thjeshtë. </strong></h2>
<p><a href="admin.php">Hyni në Panelin e Administratorit</a></p>
</body>
</html>
identifikohu.php
Figura e bashkëngjitur.
Kodi PHP:
<?php
//**************** KONFIGURIMI *********************
// Shkruaj emrin dhe fjalekalimin e administratorit
// Fjalekalimi duhet te shifrohet me funksionin MD5()
// Per ta shifruar mund te perdorni funksionin MD5 te PHP-se
// ose tek faqja http://pajhome.org.uk/crypt/md5/
define ('ADMIN_EMRI', 'admin');
define ('ADMIN_FJALEKALIMI', '4b14ade55cf2243661b1f2919884edfe');
define ('HYRJA', '/admin.php'); // faqja e administratorit
define ('DALJA', '/vizitor.php'); // faqja e vizitoreve
//********* MOS NDRYSHO ASGJE ME POSHTE ************
if (isset($_POST['prano'])) {
kontrolloIdentifikimin();
} else if (isset($_GET['largohu'])) {
largoIdentifikimin();
} else {
kerkoIdentifikimin();
}
//*************************************************************************
// Shfaq formularin e identifikimit
//
function kerkoIdentifikimin ($gabimi = '') {
if ($gabimi != '') {
$gabimi = htmlentities($gabimi);
$gabimi = $gabimi . '';
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Paneli i Administratorit</title>
<style type="text/css">
<!--
.bardhe {
color: #FFFFFF;
font-size: x-large;
font-weight: bold;
}
.gabim {color: #FF0000}
-->
</style>
</head>
<body>
<form action="identifikohu.php" method="post" name="identifikimi" id="identifikimi">
<table width="302" border="0" align="center" cellpadding="10" cellspacing="0">
<tr>
<td colspan="2" align="center" bgcolor="#990000" class="bardhe">Identifikohu</td>
</tr>
<tr>
<td width="20%" bgcolor="#FEF8ED"><strong>Emri</strong></td>
<td width="80%" bgcolor="#FEF8ED"><input name="emri" type="text" tabindex="1" maxlength="50"> </td>
</tr>
<tr>
<td bgcolor="#FEF8ED"><strong>Fjalëkalimi</strong></td>
<td bgcolor="#FEF8ED"><input name="fjalekalimi" type="password" tabindex="2" maxlength="50"></td>
</tr>
<tr>
<td colspan="2" align="center" bgcolor="#FEF8ED"><span class="gabim"><?=$gabimi?>
</span>
<input name="prano" type="submit" id="prano" tabindex="3" value="Prano">
<input name="anulo" type="reset" id="anulo" tabindex="4" value="Anulo"></td>
</tr>
</table>
</form>
</body>
</html>
<?php
}
//*************************************************************************
// Kontrollo nese vizitori shkruan emrin dhe fjalekalim e sakte
//
function kontrolloIdentifikimin() {
$emri = isset($_POST['emri']) ? $_POST['emri'] : '';
$fjalekalimi = isset($_POST['fjalekalimi']) ? md5($_POST['fjalekalimi']) : '';
if ($emri == ADMIN_EMRI && $fjalekalimi == ADMIN_FJALEKALIMI) {
// emri dhe fjalekalimi jane te sakte
// hap sesionin dhe lejo privilegjet e administratorit
session_start();
$_SESSION['ADMINISTRATOR'] = true;
$_SESSION['HTTP_USER_AGENT'] = md5($_SERVER['HTTP_USER_AGENT']);
// dergoje tek faqja e hyrjes (paneli i administratorit)
Header('Location: ' . HYRJA);
} else {
// emri ose fjalekalimi jane te gabuar
kerkoIdentifikimin("emër ose fjalëkalim i gabuar");
}
}
//*************************************************************************
// Lesho privilegjet e administratorit dhe kthehu ne nje vizitor te thjeshte
//
function largoIdentifikimin() {
require('eshteAdmin.php'); // kontrollo a eshte admin
unset($_SESSION['ADMINISTRATOR']); // hiq privilegjet e admin
unset($_SESSION['HTTP_USER_AGENT']);
Header('Location: ' . DALJA); // dergoje tek faqja e daljes
die();
}
?>
admin.php
Nëse personi nuk është identifikuar, hapet faqja e identifikimit.
Nëse personi është identifikuar:
Kodi PHP:
<?php
// A eshte administrator?
require('eshteAdmin.php');
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Paneli i Admnistratorit</title>
</head>
<body>
<h2><strong>Kjo është faqja e administratorit. </strong></h2>
<p><a href="/identifikohu.php?largohu=po">Mbylleni Panelin e Administratorit</a> </p>
</body>
</html>
eshteAdmin.php
Kodi PHP:
<?php
//*************************************************
// Ky skript kontrollon nese nje vizitor
// eshte identifikuar si administrator apo jo.
// Per te perdorur skriptin, shkruani:
// require('eshteAdmin.php');
//
// mos lejo skriptin te hapet vetem
if (eregi('eshteAdmin.php', $_SERVER['PHP_SELF'])) {
Header('Location: /index.php');
die();
}
session_start();
// ndalo sesionet e paidentifikuar
if (!isset($_SESSION['HTTP_USER_AGENT']) || !isset($_SESSION['ADMINISTRATOR'])) {
Header('Location: /identifikohu.php');
die();
}
// ndalo perdorimin e sesioneve te hapur nga dikush tjeter (session hijacking)
if ($_SESSION['HTTP_USER_AGENT'] != md5($_SERVER['HTTP_USER_AGENT'])) {
Header('Location: /identifikohu.php');
die();
}
// Vizitori ka leje si Administrator
?>
Krijoni Kontakt