E-learn.ro
Panou utilizatori
Utilizator Parola
Creeaza cont nou    Recupereaza parola
Login
Newsletter
Introdu adresa ta de email
Inscrie-te
Inchide panoul de utilizatori
Add to Google

Tutoriale PHP

Descarca toolbar

Toolbar E-learn.ro Facebook Twitter

WEB DEVELOPMENT  /  PHP  /  Diverse (10)

5 sfaturi utile pentru crearea unor aplicatii PHP sigure

23.03.2009
5 sfaturi utile pentru crearea unor aplicatii PHP sigure

PHP reprezinta unul dintre cele mai populare limbaje de programare destinate web-ului. Uneori, un limbaj cu o interfata prietenoasa poate ajuta programatorul prea mult si se pot strecura brese de securitate, creand blocaje in dezvoltare. In acest tutorial, iti voi oferi 5 sfaturi care te vor ajuta sa eviti cateva capcane de securitate obisnuite in PHP si atacuri asupra proiectului.

Total vizualizari: 8112 8112 afisari   |   Comentarii  1   |   Rating   |   (2 voturi)   |   Timp necesar: 25 min 25 min   |   Nivel de cunostiinte necesar: Mediu  Mediu

Sursa:  net.tutsplus.com  
Autor:  Justin Shreve
Adauga la tutoriale favorit Adauga la tutoriale favorite
Pagina:
« 1 2
comenteaza printeaza

Sfatul 3: Validarea Inregistrarilor

In plus, pe langa introducerea de slash-uri, validarea datelor este un alt mod fantastic de a ne proteja inregistrarile. In cazul multor aplicatii, deja stii ce date vor fi introduse. Deci cel mai simplu mod de a te proteja impotriva atacurilor este sa te asiguri ca utilizatorii pot introduce doar datele potrivite.

De exemplu, sa spunem ca vom crea o aplicatie care listeaza datele de nastere ale utilizatorilor si le permite utilizatorilor sa-si adauge propriile lor date. Vom accepta pentru luna o cifra intre 1-12, pentru zi intre 1-31, pentru an formatul YYYY.

In cazul acestui tip de logica a aplicatiei, datele pot fi validate folosind expresii regulate. Sa luam urmatorul exemplul:

<?php
if ( ! preg_match( "/^[0-9]{1,2}$/", $_GET['month'] ) )   
{   
    // prelucreaza eroarea
}   
if ( ! preg_match( "/^[0-9]{1,2}$/", $_GET['day'] ) )   
{   
    // prelucreaza eroarea   
}   
if ( ! preg_match( "/^[0-9]$/", $_GET['year'] ) )   
{   
    // prelucreaza eroarea
}  
?>

In acest exemplu, am verificat pur si simplu (in primele doua declaratii if) numerele intregi [0-9], cu una sau doua cifre {1,2}. Am facut acelasi lucru si pentru a treia declaratie if, dar am verificat ca anul sa aiba 4 cifre .

In toate cazurile, daca datele nu se potrivesc formatului dorit, iti returneaza eroare. Acest tip de validare nu lasa prea mult loc vreunui tip de atac SQL.

Expresiile regulate asemeni celor de mai sus pot fi un pic mai dificil de inteles, dar explicarea lor este in afara temei acestui tutorial. Manualul Php contine cateva resurse suplimentare care te vor ajuta la validare. PEAR contine de asemenea, cateva formate, cum ar fi formatul Validate care te pot ajuta la verificarea adreselor de e-mail, datelor calendaristice şi URL-urilor.

Mai jos este un exemplu de output al script-ului anterior, folosind 200 ca input pentru luna, ABC pentru zi si doar 09 pentru an.

Sfatul 4: Fii atent la atacurile Cross Site Scripting (XSS) din inregistrarile utilizatorului

O aplicaţie web accepta de obicei inregistrari de la utilizatori si le afişeaza intr-un anumit mod. Aceasta se poate efectua, desigur, intr-o mare varietate de forme, cum ar fi comentarii, postari blog sub forma de cod HTML,etc.. Acceptarea inregistrarilor in format HTML reprezinta un lucru periculos, deoarece este permisa executarea JavaScript in mod nedorit. Daca este lasata deschisa chiar si numai o portita, codul JavaScript poate fi executat si cookie-urile ar putea fi furate. Aceste date de tip cookie ar putea fi apoi utilizate pentru a falsifica un cont real, permitand utilizatorilor accesul ilegal la baza de date a site-ului.

Exista cateva modalitaţi prin care te poti proteja de astfel de atacuri. O modalitate este de a interzice in totalitate codul HTML, pentru ca atunci nu mai exista nicio metoda care sa permita executarea vreunui JavaScript. Insa, daca faci acest lucru, atunci si formatarea este interzisa, ceea ce nu reprezinta intotdeauna o optiune pentru un forum sau blog.

Daca doresti dezactivarea aproape in totalitate a HTML, dar sa permiti formatarea simpla, poti accepta doar cateva tag-uri HTML (fara atribute), cum ar fi <strong> sau <em>. Sau, alternativ, poti accepta un set accesibil de tag-uri, numit "BBCode" sau "BB Tags", utilizat frecvent pe forumuri, in formatul [b]test[/b]. Acesta poate fi modul perfect pentru a oferi anumite posibilitati de formatare, interzicand in acelasi timp elementele periculoase. Poti implementa BBCode utilizand pachete pre-existente, cum ar fi HTML_BBCodeParser sau iti poti scrie propria implementare a BBCode cu expresii regulate si cu o serie de declaratii preg_replace.

Sfatul 5: Protejarea impotriva injectarilor SQL

Ultimul, dar nu cel din urma, dintre cele mai cunoscute atacuri la securitate de pe web: injectarea SQL. Atacurile de tip injectare SQL au loc atunci cand datele ruleaza nebifate si aplicatia nu introduce caracterele utilizate in stringurile SQL, cum ar fi ghilimele simple (') sau ghilimele duble (").

Daca aceste caractere nu sunt filtrate, utilizatorii pot exploata sistemul, efectuand interogari care sunt intotdeauna adevarate ceea ce le va permite sa pacaleasca sistemele de autentificare.

Din fericire, PHP ofera cateva instrumente care te vor ajuta sa-ti protejezi inregistrarile din baza de date. Cand esti conectat la un server SQL poti utiliza aceste functii, printr-o simpla apelare, iar variabilele tale ar trebui sa fie sigure pentru a le utiliza in interogari. Majoritatea sistemelor importante de baze de date includ aceste functii de protecţie.

MySQLi iti permite aceasta in doua modalitati: fie cu ajutorul functiei mysqli_real_escape_string, atunci cand esti conectat la un server:

<?php
$username = mysqli_real_escape_string( $GET['username'] );   
mysql_query( "SELECT * FROM tbl_members WHERE username = '".$username."'");  
?>

sau cu declaratii predefinite.

Declaratiile predefinite reprezinta o metoda de separare a logicii SQL de datele transmise catre acesta. Functiile utilizate in cadrul bibliotecii MySQLi filtreaza intrarile atunci cand legam variabile de o declaratie intocmita. Acestea pot fi folosite dupa cum urmeaza (cand esti conectat la un server):

<?php
$id = $_GET['id'];   
$statement = $connection->prepare( "SELECT * FROM tbl_members WHERE id = ?" );   
$statement->bind_param( "i", $id );   
$statement->execute();  
?>

In apelul metodei bind_param, parametrul "i" reprezinta un tip de date intreg. In functie de datele pe care le transmiti, acest parametru trebuie sa aiba valoarea s pentru siruri de caractere, d - pentru numerele rationale sau b - pentru blob.

Desi aceasta te protejeaza in majoritatea cazurilor, tot trebuie sa tii seama de validarea adecvata a datelor, asa cum am mentionat anterior.

Incheiere

Acest tutorial prezinta doar cateva dintre vulnerabilitatile unui site in PHP. Pana la urma, developerii trebuie sa se asigure ca aplicatiile construite sunt sigure, educandu-se ei insisi cu privire la pericolele de pe web si despre cele mai frecvente tipuri de atacuri. Daca doresti sa citesti mai multe despre problemele de securitate in PHP, exista un capitol dedicat acestora in manualul php.

Pagina:
« 1 2
comenteaza printeaza
Alte tutoriale PHP:
Noteaza acest tutorial
Rating tutorial
 
(2 voturi)
Pentru a nota acest tutorial, trebuie sa fii logat!
COMENTARII (1) spune-ti parerea
bogdan bogdan , Miercuri, 16 Septembrie 2009, ora 00:41
#1

tare....:),,,,,nu prea se pune accentul pe securitate pe la noi ...dupa principiu "las-o ma ca merge asa"....oricum cred ca asta e numai o mica parte din capitolul de securitate al PHP-ului asa ca astept noi informatii :::::::::D

Raporteaza acest comentariu ca injurios!
Posteaza un comentariu
Pentru a posta un comentariu, trebuie sa fii logat!
0 TOP UTILIZATORI* 0 0
Tutoriale scrise de claibornelara
claibornelara Rang utilizator claibornelara - Incepator
4550
Tutoriale scrise de mcuemica
mcuemica Rang utilizator mcuemica - Incepator
4460
Tutoriale scrise de ellarichards
ellarichards Rang utilizator ellarichards - Incepator
4410
Tutoriale scrise de emonclercheap
emonclercheap Rang utilizator emonclercheap - Incepator
4280
Tutoriale scrise de beacherrosa
beacherrosa Rang utilizator beacherrosa - Incepator
4155
* Acest top reprezinta punctajele acumulate in ultimele 30 de zile.
CSS Swift 3D Fotografie PSD MySQL SWF AJAX Java Lightroom JSON HTML Excel Bridge Verilog Javascript StyleSheet Photoshop Gimp XHTML Ruby on Rails Outlook Python Action Script Illustrator RoR Sony Vegas COREL DRAW Fireworks Powerpoint Flash Vista SEO Dreamweaver PHP Word XML
Promovare:
Daca faci parte din comunitatea E-learn.ro si doresti promovarea acesteia, poti accesa pagina de promovare.
Arhiva newsletter:
Daca ai ratat un numar mai vechi, sau vrei sa revezi care au fost noutatile E-learn.ro la un moment dat, poti accesa arhiva de newslettere.
  Copyright © 2008-2013 E-LEARN.ro. Toate drepturile rezervate. Termeni si conditii.
Conceput si realizat de Neokinetics Software