ACCES INTERZIS | blog de programare si securitate IT


De multe ori am avut nevoie sa rulez functia PHP phpinfo() ca sa aflu niste detalii legate de serverul web ce imi gazduieste fisierele. De aceea am facut o pagina phpinfo.php pe care o deschid oridecateori am nevoie sa aflu cate ceva despre setarile serverului.

<?php
phpinfo();
?>

Problema e ca accesul la continutul paginii nu este restrictionat. Oricine de pe intreg mapamond care are un PC conectat la Internet poate vedea continutul paginii mele. Ceea ce nu este prea indicat. Asadar, trebuie sa creez un sistem de autentificare care sa permita doar persoanelor autorizate sa vada continutul paginii. Acest sistem de autentificare este destul de simplu. Nu necesita un formular de login sau o baza de date. Ma folosesc doar de array-ul superglobal $_GET.

<?php
if ($_GET['pw'] != 'primavarapeinserate') {
	echo 'You are NOT allowed to view this page.';
	exit();
}

phpinfo();
?>

Ca sa pot accesa continutul paginii trebuie sa scriu URL-ul astfel: http://www.accesinterzis.ro/myportofolio/phpinfo.php?pw=primavarapeinserate.

Scriptul are doua mici dezavantaje:

  • cel mai important dezavantaj e ca, desi am deschis pagina si pot vedea continutul,  parola ramane in URL si este vizibila (deci cineva din camera unde ma aflu o poate vedea)
  • al doilea dezavantaj e ca parola nu este validata cu toate ca nu prea e necesar acest lucru in acest context dar este un obicei bun de programare sa validam intotdeauna datele primite de la utilizator

Deci, trebuie sa rescriu scriptul. Sa il imbunatatesc.

<?php
/*
Titlu: Cum restrictionez accesul la continutul paginii mele web phpinfo.php?
Autor: Marian Barbu aka AccesInterzis
Website: http://www.accesinterzis.ro
2010 (c) Toate drepturile rezervate
*/

#1
session_start();

$php_self = htmlentities(strip_tags($_SERVER['PHP_SELF']), ENT_QUOTES, 'utf-8');

#2
if (!isset($_GET['pw'])) {
		#2.1
		if (!isset($_SESSION['pw']) || $_SESSION['pw'] != sha1('primavarapeinserate')) {
			echo 'You are NOT allowed to view the content of this page.';
			exit();
		} else {
			#2.2
			if (isset($_GET['action'])) {
				$action = trim($_GET['action']);

				if (!preg_match('/^[a-z]{6}$/', $action)) {
					echo 'Your action is wrong.';
					exit();
				} else {
					if ($action == 'logout') {
						$_SESSION = array();
						if (session_destroy() && setcookie('PHPSESSID', '', time()-300, '/', '', 0)) {
							header('Location:http://'.$_SERVER['HTTP_HOST'].$php_self);
							exit();
						}
					}
				}
			}
		}
} else {
	#2.3
	$pw = trim($_GET['pw']);

	if (!preg_match('/^[a-zA-Z0-9]{5,30}$/', $pw)) {
		echo 'Your password is NOT valid.';
		exit();
	} else {
		if ($pw != 'primavarapeinserate') {
			echo 'Your password is wrong.';
			exit();
		} else {
			$_SESSION['pw'] = sha1($pw);
			header('Location:http://'.$_SERVER['HTTP_HOST'].$php_self);
		}
	}
}

#3
phpinfo();
?>

Acum nu mai ramane decat sa punem scriptul de mai sus deasupra DOCTYPE-ului fiecarei paginii web pe care vrem sa o protejam de ochii curiosi. Am adaugat in script si functia de logout. Nu trebuie decat sa scriem URL-ul astfel: http://www.accesinterzis.ro/myportofolio/phpinfo.php?action=logout.

Scriptul poate fi dezvoltat si mai mult si poate fi folosit ca sistem de autentificare a utilizatorilor unei sectiuni de administrare. Diferenta dintre sistemul de login ce foloseste un formular HTML si acesta este ca in loc sa preiau datele de logare din array-ul superglobal $_POST, le preiau din array-ul superglobal $_GET.

Post to Twitter Publica acest articol pe Twitter

Articole asemanatoare:

Publicat de: admin
Ultima modificare: 13, 2010, 11:40

Etichete
Etichete:
Categorii: programare, securitate IT


 

Comentarii lasate » (1)

 
  1. allyna says:

    felicitari,asteptam mai multe tutoriale..

Lasa un comentariu

XHTML: Poti folosi urmatoarele taguri HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>