k7x22xp
<titlu>Securitate</titlu>
Securitatea reprezinta un subiect complex, care nu este adecvat pentru un programator
incepator. Totusi, chiar si programatorii PHP incepatori doresc
sa creeze aplicatii si sa le puna in functiune. Un aspect nefericit al
retelelor de calcula¬toare este acela ca aplicatiile disponibile prin intermediul
unei retele vor fi supuse atacurilor, atat din partea unor persoane rau-intentionate,
cat si din partea curiosilor. Aceasta anexa are menirea de a atrage atentia
cititorului asupra unor aspecte si resurse legate de securitate care nu au fost
prezentate in cartea de fata. Cititorul atent la posibilitatea existentei
breselor in sistemul de securitate trebuie sa fie motivat pentru a invata
mai multe despre acestea, precum si despre modul de a le preveni. Cititorii
interesati in desfasurarea de aplicatii Internet care prelucreaza date
importante - cum sunt tranzactiile de afaceri - trebuie sa-si continue studiul
legat de PHP si de securitate sau sa solicite consultanta din partea unui expert
in pro¬bleme de securitate.
<titlu>Pericole si riscuri</titlu>
Un principiu fundamental al securitatii produselor software este acela ca nici
un sistem nu este absolut sigur, in consecinta, securitatea nu este o
chestiune de tipul „totul sau nimic", in schimb, politicile
si mecanismele de securitate trebuie sa fie concepute in functie de:
• Frecventa si natura amenintarilor la adresa securitatii
• Posibilele consecinte ale unei brese de securitate
Altfel spus, securitatea este legata mai mult de descurajare decat de
prevenire. Daca dispune de timp si de experienta, un hacker motivat are toate
sansele de a compromite orice sistem. Scopul securitatii este de a ridica stacheta
elementelor necesare pentru a compromite un sistem si de a impune unui potential
hacker sa piarda o cantitate de timp mai mare decat cea rezonabila din
punctul de vedere al recompensei pe care un hacker spera sa o obtina in
urma unei patrunderi reusite in sistem.
Hackerii pot fi motivati de perspectiva unor castiguri financiare, de
dorinta de razbunare, de o simpla curiozitate sau de o varietate de alte motive.
Unii hackeri dispun de o experienta considerabila in materie de programe.
Altii, cunoscuti si sub numele de script kiddies (incepatori), de abia
au invatat sa foloseasca instrumentele si procedurile create de altii.
Cu toate acestea, un hacker hotarat si cu un oarecare grad de cunostinte
poate fi un adversar extrem de redutabil.
O alta modalitate de a caracteriza un pericol la adresa securitatii este din
punctul de vedere al modalitatii in care pericolul afecteaza un sistem
tinta, si anume tipul
pericolului. O aplicatie software in retea este susceptibila la o diversitate
de tipuri de pericole. Printre acestea se numara:
• Dezvaluirea unor date confidentiale
• Modificarea sau distrugerea datelor
• Refuzul de a executa un serviciu
• Repudierea tranzactiilor
Dezvaluirea datelor confidentiale este un pericol deosebit de frecvent intalnit.
Printre variantele cele mai caracteristice ale acestuia se numara publicarea
mesajelor de e-mail private si a informatiilor privind cartea de credit. Protectia
impotriva acestui pericol implica o administrare de sistem si o programare
conform normelor in vigoare.
Modificarea sau distrugerea datelor reprezinta un alt pericol comun. Deseori,
acesta ia forma deteriorarii unui sit Web. Virusii de calculator care modifica
datele reprezinta o alta forma comuna de atac. Din nou, protectia impotriva
acestor pericole implica respectarea normelor recunoscute privind programarea
si admi¬nistrarea sistemelor.
Refuzul de a executa un serviciu este un alt tip de pericol care a devenit extrem
de frecvent intalnit. Daca dezvaluirea informatiilor confidentiale
si modificarea sau distrugerea datelor sunt deseori rezultatul unei brese de
securitate inlesnite printr-o actiune sau o omisiune a unui programator
sau a unui adminis¬trator de sistem, atacurile prin refuzul de a executa
un serviciu*, nu implica asemenea puncte slabe, in prezent, majoritatea
sistemelor sunt susceptibile la atacuri prin refuzul de a executa un serviciu,
care bombardeaza o gazda cu cereri ilicite de serviciu intr-o asemenea
masura, incat gazda devine incapabila sa raspunda la cererile efective.
In prezent, se lucreaza la identificarea unor modalitati de contra¬carare
a acestor atacuri.
Repudierea tranzactiilor este un pericol la adresa securitatii asociat cu notiunea
de comert electronic si consta in aceea ca una din partile implicate intr-o
tranzactie nu recunoaste, la un moment ulterior, ca a autorizat tranzactia.
Protectia impotriva acestui pericol implica o proiectare a aplicatiilor
care sa includa tehnici criptografice, precum si de alta natura, pentru autentificarea
identitatii partilor implicate intr-o tranzactie.
Este important de retinut ca severitatea consecintelor care pot rezulta dintr-o
bresa de securitate poate varia intr-o gama foarte larga. De exemplu,
consecintele care pot decurge din dezvaluirea de informatii confidentiale pot
varia de la usor jenante - in cazul publicarii unui mesaj de e-mail privat
care contine si unele expresii mai „tari" - la catastrofale - prin
publicarea unor planuri de afaceri confidentiale sau a unor documente care constituie
proprietate intelectuala.
<nota>
In original denial of service - abreviat DOS. Nu se va confunda cu MS-DOS,
adica Microsoft Disk Operating System - N.T.
</nota>
<titlu>Contramasuri</titlu>
Aceasta sectiune explica unele dintre contramasurile frecvent intrebuintate
pentru a reduce riscul aparitiei unei brese de securitate. Tratamentul propus
nu este nici complet si nici foarte amanuntit, fiind destinat a-l pune la curent
pe cititor cu privire la unele posibilitati mai evidente, nu de a furniza un
indrumar pentru asigu¬rarea securitatii aplicatiilor. Sectiunea urmatoare
contine trimiteri spre numeroase surse mai bine documentate.
<titlu>Autentificarea si autorizarea utilizatorilor</titlu>
Cand o aplicatie contine functii care nu sunt destinate utilizarii de
catre publicul larg, aplicatia trebuie sa includa mecanisme pentru identificarea,
autentificarea si autorizarea utilizatorilor sistemului. Unii incepatori
scriu aplicatii care solicita utilizatorilor sa se identifice. Deoarece un utilizator
rau intentionat va prezenta o identitate care nu-i apartine, simpla identificare
nu este suficienta.
Autentificarea implica verificarea identitatii unui utilizator. Cea mai simpla
posibilitate de autentificare consta in utilizarea unei parole private.
Totusi, alte mijloace - cum este procedeul intrebare si raspuns, in
care utilizatorul primeste o intrebare dintr-un set predeterminat de intrebari
— sunt de asemenea posibile.
Autorizarea asociaza privilegiile cu identitatea unui utilizator. De exemplu,
unii utilizatori pot avea permisiunea de a vizualiza datele privind salariile
intr-o aplicatie care manipuleaza datele referitoare la angajati, dar
numai utilizatorii cu privilegii speciale pot modifica datele referitoare la
salarii.
Stocarea datelor privind autorizarea si autentificarea intr-o baza de
date permite utilizatorilor desemnati sa intretina aceste informatii si
implicit sa actualizeze in permanenta datele. Bresele de securitate pot
surveni atunci cand nu sunt retrase autorizatiile utilizatorilor care
nu mai sunt asociati unei anumite companii sau unui anumit proiect. Informatiile
privind parolele trebuie sa fie stocate in forma criptata, astfel incat
nici macar administratorii de sistem sa nu poata falsifica identitatile.
<titlu>Suspectarea datelor introduse de utilizatori</titlu>
Asa cum s-a explicat in Modulul 14, datele provenite de la utilizatori
trebuie privite cu neincredere. Furnizarea de date care contin metacaractere
reprezinta un mijloc frecvent folosit de compromitere a securitatii aplicatiei.
Cand scrieti apli¬catii PHP bazate pe retea, trebuie sa folositi functia
addslashes() si alte mijloace pentru a va asigura ca datele introduse de utilizator
nu initiaza operatii de prelu¬crare neprevazute.
<titlu>Intrebuintarea unor masuri criptografice</titlu>
Aceasta carte nu se refera la suportul PHP pentru functii criptografice. Totusi,
utilizarea unor asemenea functii este importanta pentru protejarea securitatii.
O forma populara de securitate este asa-numitul server Web sigur, care schimba
date cu browserele Web prin intermediul HTTPS, o varianta criptata a protocolului
HTTP comun. Tranzactiile folosite in comertul electronic se deruleaza
deseori utilizand protocolul HTTPS.
Printre alte tehnologii criptografice disponibile se numara criptografia cu
cheie publica si cu cheie privata, care se poate folosi pentru autentificarea
utilizatorilor a mesajelor, precum si pentru schimbul de informatii in
conditii de siguranta. Intre tehnologiile care se pot dovedi utile se numara
urmatoarele:
• Algoritmi MD5
• Criptare RSA
• Criptare PG pentru PGP si GNU
<titlu>Configurarea adecvata a serverelor</titlu>
Datorita modului in care PHP interactioneaza cu un server Web, configurarea
inadecvata a serverului Web poate avea consecinte grave asupra securitatii PHP.
Daca sunteti administratorul de sistem al unei gazde care furnizeaza servicii
de Web, trebuie sa fiti la curent cu optiunile serverului Web relative la securitate.
De asemenea, trebuie sa va procurati si sa instalati remedii pentru sistemul
de operare, serverul Web si PHP care au implicatii pentru securitatea sistemului
si a retelei.
Un aspect important al securitatii serverului Web consta in prevenirea
accesului fara autorizatie la fisierele sursa si la fisierele de date. Trebuie
sa configurati serverul Web astfel incat sa permita browserelor
Web sa obtina acces numai la cataloagele selectate, precum si sa va asigurati
ca fisierele sursa si fisierele de date se gasesc in alte cataloage decat
acestea.
<titlu>Asigurarea bazelor de date</titlu>
Numele de utilizator si parolele folosite pentru conectarea la bazele de date
si de obicei, codate hard in scripturile PHP. Daca un hacker poate determina
numele de utilizator si parola, atunci se poate conecta la baza de date si poate
executa orice operatie neautorizata doreste. De exemplu, un hacker poate sterge
toate randurile unuia sau mai multor tabele din baza de date.
O modalitate de a proteja numele de utilizator si parolele consta in a
le insera in fisiere care sunt accesibile prin intermediul instructiunilor
include sau require. Nu este necesar - si nici nu trebuie - ca aceste fisiere
sa se gaseasca in cataloage accesibile din Web. Prin amplasarea acestor
informatii intr-un catalog
care nu este accesibil din Web, devine mult mai dificil pentru un hacker sa
le descopere continutul.
<titlu>Resurse</titlu>
Pentru o introducere in tematica securitatii pentru retele, abordata din
punctul de vedere al incepatorilor, consultati volumul Network Security:
A Beginner's Guide, de Eric Maiwald (Osborne McGraw-Hill, 2001). Pentru a invata
mai multe despre asigurarea sistemelor UNIX impotriva pericolelor locale
si de la distanta, consultati cartea UNIX System Security Tools, de Seth Ross
(Osborne McGraw-Hill, 1999). Informatii referitoare la modul de configurare
a serverului Apache se gasesc in volumul Administering Apache, de Mark
Arnold (Osborne McGraw-Hill, 2000).