UNIVERZA V MARIBORU FAKULTETA ZA ELEKTROTEHNIKO, RAČUNALNIŠTVO IN INFORMATIKO Vladimir Mančić MODEL ZA ANALIZO IN PRIMERJAVO OGRODIJ PHP Magistrsko delo Maribor, maj 2017
UNIVERZA V MARIBORU
FAKULTETA ZA ELEKTROTEHNIKO,
RAČUNALNIŠTVO IN INFORMATIKO
Vladimir Mančić
MODEL ZA ANALIZO IN PRIMERJAVO OGRODIJ PHP
Magistrsko delo
Maribor, maj 2017
UNIVERZA V MARIBORU
FAKULTETA ZA ELEKTROTEHNIKO,
RAČUNALNIŠTVO IN INFORMATIKO
Vladimir Mančić
MODEL ZA ANALIZO IN PRIMERJAVO OGRODIJ PHP
Magistrsko delo
Maribor, maj 2017
I
MODEL ZA ANALIZO IN PRIMERJAVO OGRODIJ PHP
Magistrsko delo
Študent: Vladimir Mančić
Študijski program: Študijski program 2. stopnje
Informatika in tehnologije komuniciranja
Smer: /
Mentor: doc. dr. Boštjan Šumak, univ. dipl. inţ. rač. in inf.
Somentor: /
Lektorica: Tatjana Hren Dizdarević, prof. slo.
II
Številka: Datum in kraj: ………………, Maribor
Na osnovi 330. člena Statuta Univerze v Mariboru (Ur. l. RS, št. 01/2010) izdajam
SKLEP O MAGISTRSKEM DELU 1. #Ime Priimek, študent-ka študijskega programa 2. stopnje #PROGRAM, smeri #Smer, izpolnjuje
pogoje, zato se mu/ji dovoljuje izdelati magistrsko delo. 2. Tema magistrskega dela je s področja inštituta za #Katedra.
MENTOR-ICA: #Mentor SOMENTOR-ICA: #Somentor
3. Naslov magistrskega dela: #Naslov 4. Naslov magistrskega dela v angleškem jeziku: #NaslovA 5. Magistrsko delo je potrebno izdelati skladno z »Navodili za izdelavo magistrskega dela« in ga do
#Rok v 2 vezanih in 1 v spiralo vezanem izvodu oddati v pristojni referat ter elektronski izvod v Digitalno knjižnico Univerze v Mariboru.
Dekan:
Obvestiti:
kandidata,
mentorja,
somentorja,
odložiti v arhiv.
III
Model za analizo in primerjavo ogrodij PHP
Ključne besede: ogrodje PHP, model za primerjavo ogrodij PHP, razvoj spletnih aplikacij,
PHP
UDK: 004.774-026.12(043.2)
Povzetek
V okviru magistrskega dela smo kreirali model za analizo in primerjavo ogrodij PHP, na
podlagi katerega smo nato izvedli raziskave, ki so vključevale eksperiment ter različna
testiranja. Pred predstavitvijo modela smo najprej poiskali ključne faktorje, ki jih
potrebujemo za izbiro primernega ogrodja. Ker je v današnjem času na voljo veliko ogrodij
PHP, s katerimi lahko razvijamo spletne aplikacije, smo na podlagi kriterijev izbiro zožili.
Šest izbranih ogrodij smo primerjali na podlagi kreiranega modela. Izbrana ogrodja so:
Laravel, Codeigniter, CakePHP, Symfony, Zend Framework ter Yii2. Na koncu
magistrskega dela smo predstavili rezultate, pridobljene tekom raziskave.
IV
Model for analysis and comparison of PHP frameworks
Key words: PHP framework, model for comparison of PHP frameworks, web application
development, PHP
UDK: 004.774-026.12(043.2)
Abstract
In the context of the Master Thesis, we have created a model for analyzing and comparing
PHP frameworks, which presented a basis for further research, including experiment and
test procedures. Before the presentation of the model, we first researched key factors,
used for selecting the appropriate framework. Because nowadays there are many PHP
frameworks with which we can develop web applications, a selection criteria narrowed the
chosen frameworks. Based on selection we chose six frameworks, over which we carried
out a comparison based on the created model. Selected frameworks are: Laravel,
Codeingiter, CakePHP, Symfony, Zend Framework and Yii2. At the end of the Master
Thesis, we present the results, which we acquired during the research.
V
KAZALO
1 UVOD ........................................................................................................................................ 1
1.1 Področje in namen raziskave .......................................................................................................... 2
1.1.1 Raziskovalna vprašanja in predvidene metode za pridobivanje podatkov ter analiz ...................... 4
1.2 Struktura dela ................................................................................................................................ 5
2 OPIS VKLJUČENIH JEZIKOV............................................................................................... 6
2.1 Programski jezik PHP ...................................................................................................................... 6
2.2 Označevalni jezik HTML5 ................................................................................................................ 7
2.3 Kaskadne stilske predloge CSS3 ...................................................................................................... 8
2.4 Strukturirani povpraševalni jezik MySql ........................................................................................ 9
3 OPIS ARHITEKTURNEGA VZORCA MVC ..................................................................... 10
4 OPIS OGRODIJ PHP ........................................................................................................... 12
4.1 Laravel ......................................................................................................................................... 14
4.2 CodeIgniter .................................................................................................................................. 15
4.3 CakePHP ....................................................................................................................................... 16
4.4 Zend Framework .......................................................................................................................... 17
4.5 Yii2 ............................................................................................................................................... 18
4.6 Symfony ....................................................................................................................................... 19
5 DEFINIRANJE MODELA ZA ANALIZO PROGRAMSKEGA OGRODJA PHP .......... 20
5.1 Zaloge vrednosti ........................................................................................................................... 21
5.2 Model za analizo programskega ogrodja ...................................................................................... 24
VI
6 ANALIZA OGRODIJ ............................................................................................................ 25
6.1 Zanesljivost .................................................................................................................................. 25
6.1.1 Hitrost ............................................................................................................................................ 25
6.1.2 Varnost ........................................................................................................................................... 31
6.2 Težavnost uporabe ogrodja .......................................................................................................... 47
6.2.1 Kompleksnost ................................................................................................................................. 47
6.2.2 Podpora funkcionalnosti ................................................................................................................ 57
6.3 Priljubljenost ................................................................................................................................ 58
6.3.1 Trend .............................................................................................................................................. 58
6.3.2 Skupnost ........................................................................................................................................ 63
7 REZULTATI IN UGOTOVITVE EKSPERIMENTA ....................................................... 66
7.1.1 Predstavitev modela značilnih faktorjev ogrodij............................................................................ 75
7.2 Nadaljnje raziskovanje ................................................................................................................. 76
7.3 Omejitve raziskave ....................................................................................................................... 76
8 SKLEP .................................................................................................................................... 78
9 BIBLIOGRAFIJA .................................................................................................................. 80
10 PRILOGE ........................................................................................................................... 86
VII
KAZALO SLIK
SLIKA 3.1: PREDSTAVITEV PRINCIPA MVC. ................................................................................................................ 10
SLIKA 4.1: OGRODJE LARAVEL. ............................................................................................................................... 14
SLIKA 4.2: OGRODJE CODEIGNITER. ......................................................................................................................... 15
SLIKA 4.3: OGRODJE CAKEPHP. ............................................................................................................................. 16
SLIKA 4.4: OGRODJE ZENDFRAMEWORK. .................................................................................................................. 17
SLIKA 4.5: OGRODJE YII2. ...................................................................................................................................... 18
SLIKA 4.6: OGRODJE SYMFONY. .............................................................................................................................. 19
SLIKA 5.1: MODEL ZA ANALIZO PROGRAMSKEGA OGRODJA PHP. ................................................................................... 24
SLIKA 6.1: PRIKAZ PRIMERA PRIDOBLJENIH REZULTATOV Z OGRODJEM APACHE BENCHMARK. .............................................. 25
SLIKA 6.2: PRIKAZ PRIMERA 2. DELA REZULTATOV Z OGRODJEM APACHE BENCHMARK. ...................................................... 26
SLIKA 6.3: VNOS ZLONAMERNIH PODATKOV OB REGISTRACIJI. ....................................................................................... 32
SLIKA 6.4: PRIKAZ DELOVANJA »ESCAPE« FUNKCIJE. .................................................................................................... 32
SLIKA 6.5: SQL INJECTION-PREPREČEVANJE NAPADA (SORTIRANJE PO ID-JU). .................................................................. 34
SLIKA 6.6: POROČILO KOMPLEKSNOSTI – CODEIGNITER. .............................................................................................. 49
SLIKA 8.1: KLJUČNI FAKTOR PREDSTAVLJA IZBIRA MERJENJA PRAVIH VREDNOSTI. ............................................................... 78
file:///C:/Users/Vlado/Desktop/mag/MAG/Magistrska%20naloga/Lektorirano/Vladimir_Mančić_Magistrsko%20delo.doc%23_Toc483689238file:///C:/Users/Vlado/Desktop/mag/MAG/Magistrska%20naloga/Lektorirano/Vladimir_Mančić_Magistrsko%20delo.doc%23_Toc483689239file:///C:/Users/Vlado/Desktop/mag/MAG/Magistrska%20naloga/Lektorirano/Vladimir_Mančić_Magistrsko%20delo.doc%23_Toc483689240file:///C:/Users/Vlado/Desktop/mag/MAG/Magistrska%20naloga/Lektorirano/Vladimir_Mančić_Magistrsko%20delo.doc%23_Toc483689241file:///C:/Users/Vlado/Desktop/mag/MAG/Magistrska%20naloga/Lektorirano/Vladimir_Mančić_Magistrsko%20delo.doc%23_Toc483689242file:///C:/Users/Vlado/Desktop/mag/MAG/Magistrska%20naloga/Lektorirano/Vladimir_Mančić_Magistrsko%20delo.doc%23_Toc483689243file:///C:/Users/Vlado/Desktop/mag/MAG/Magistrska%20naloga/Lektorirano/Vladimir_Mančić_Magistrsko%20delo.doc%23_Toc483689244file:///C:/Users/Vlado/Desktop/mag/MAG/Magistrska%20naloga/Lektorirano/Vladimir_Mančić_Magistrsko%20delo.doc%23_Toc483689245file:///C:/Users/Vlado/Desktop/mag/MAG/Magistrska%20naloga/Lektorirano/Vladimir_Mančić_Magistrsko%20delo.doc%23_Toc483689246file:///C:/Users/Vlado/Desktop/mag/MAG/Magistrska%20naloga/Lektorirano/Vladimir_Mančić_Magistrsko%20delo.doc%23_Toc483689247file:///C:/Users/Vlado/Desktop/mag/MAG/Magistrska%20naloga/Lektorirano/Vladimir_Mančić_Magistrsko%20delo.doc%23_Toc483689248file:///C:/Users/Vlado/Desktop/mag/MAG/Magistrska%20naloga/Lektorirano/Vladimir_Mančić_Magistrsko%20delo.doc%23_Toc483689249file:///C:/Users/Vlado/Desktop/mag/MAG/Magistrska%20naloga/Lektorirano/Vladimir_Mančić_Magistrsko%20delo.doc%23_Toc483689250file:///C:/Users/Vlado/Desktop/mag/MAG/Magistrska%20naloga/Lektorirano/Vladimir_Mančić_Magistrsko%20delo.doc%23_Toc483689251file:///C:/Users/Vlado/Desktop/mag/MAG/Magistrska%20naloga/Lektorirano/Vladimir_Mančić_Magistrsko%20delo.doc%23_Toc483689252
VIII
KAZALO TABEL
TABELA 1.1: PREDSTAVITEV RAZISKOVALNIH VPRAŠANJ IN PREDVIDENIH METOD RAZISKAVE .................................................. 4
TABELA 5.1: SPREMENLJIVKE, MERSKE LESTVICE IN ZALOGE VREDNOSTI ........................................................................... 23
TABELA 6.1: REZULTATI TESTIRANJA HITROSTI OGRODIJ PHP ........................................................................................ 26
TABELA 6.2: REŠITVE ZA PREPREČEVANJE NAPADOV V POSAMEZNEM OGRODJU ................................................................ 46
TABELA 6.3: ŠTEVILO VRSTIC KODE IN ŠTEVILO VSEH DATOTEK POSAMEZNEGA OGRODJA PHP ............................................. 47
TABELA 6.4: PODATKI O KOMPLEKSNOSTI POSAMEZNEGA OGRODJA ............................................................................... 50
TABELA 6.5: PODATKI O KOMPLEKSNOSTI ODPRTOKODNIH OGRODIJ ............................................................................... 54
TABELA 6.6: PODPORA FUNKCIONALNOSTI POSAMEZNEGA OGRODJA .............................................................................. 57
TABELA 7.1: SKUPNI REZULTATI OCENITVE HITROSTI .................................................................................................... 68
TABELA 7.2: SKUPNI REZULTATI OCENITVE KOMPLEKSNOSTI .......................................................................................... 70
TABELA 7.3: SKUPNI REZULTATI OGRODIJ .................................................................................................................. 73
TABELA 7.4: SPSS – REZULTATI, PRIKAZANI V TABELI ................................................................................................... 74
IX
KAZALO GRAFOV
GRAF 4.1: PREGLED OGRODIJ PHP. ......................................................................................................................... 13
GRAF 6.1: PRIKAZ REZULTATOV HITROSTI – CELOTNO ŠTEVILO ZAHTEV. ........................................................................... 27
GRAF 6.2: PRIKAZ REZULTATOV HITROSTI – PRENOS PODATKOV..................................................................................... 27
GRAF 6.3: PRIKAZ REZULTATOV HITROSTI – ŠTEVILO ZAHTEV V SEKUNDI. ......................................................................... 28
GRAF 6.4: PRIKAZ REZULTATOV HITROSTI – ČAS NA ZAHTEVO. ....................................................................................... 28
GRAF 6.5: PRIKAZ REZULTATOV HITROSTI – HITROST PRENOSA. ..................................................................................... 29
GRAF 6.6: ŠTEVILO VRSTIC KODE POSAMEZNEGA OGRODJA PHP. .................................................................................. 48
GRAF 6.7: ŠTEVILO DATOTEK POSAMEZNEGA OGRODJA PHP. ....................................................................................... 48
GRAF 6.8: RELATIVNA KOMPLEKSNOST SISTEMA V RAZMERJU Z LCOM. .......................................................................... 51
GRAF 6.9: RAZMERJE CIKLOMATIČNE KOMPLEKSNOSTI Z LCOM. ................................................................................... 55
GRAF 6.10: RAZMERJE CIKLOMATIČNE KOMPLEKSNOSTI Z LCOM, DRUGI PRIMER. ............................................................ 55
GRAF 6.11: GRAF ISKANJA IN ZANIMANJA OGRODIJ PHP [24], [69]. ............................................................................. 58
GRAF 6.12: TREND – OBJAVE PROSTIH MEST [25]. ..................................................................................................... 59
GRAF 6.13: TREND – ISKANJE ZAPOSLITEV [25]. ........................................................................................................ 59
GRAF 6.14: TREND – OBJAVE PROSTIH MEST Z OGRODJI JS [70].................................................................................... 61
GRAF 6.15: TREND – ISKANJE ZAPOSLITEV Z OGRODIJ JS [70]. ...................................................................................... 62
GRAF 7.1: OCENITEV HITROSTI OGRODIJ. .................................................................................................................. 69
GRAF 7.2: OCENITEV VARNOSTI OGRODIJ. ................................................................................................................. 70
GRAF 7.3: OCENITEV KOMPLEKSNOSTI OGRODIJ. ........................................................................................................ 71
GRAF 7.4: OCENITEV PODPORE OGRODIJ. ................................................................................................................. 71
GRAF 7.5: OCENITEV SKUPNOSTI OGRODIJ. ............................................................................................................... 72
GRAF 7.6: TREND OGRODIJ. ................................................................................................................................... 72
GRAF 7.7: SKUPNI REZULTATI OGRODIJ. .................................................................................................................... 73
GRAF 7.8: PREGLED ZNAČILNIH FAKTORJEV NA POSAMEZNO OGRODJE. ........................................................................... 76
file:///C:/Users/Vlado/Desktop/mag/MAG/Magistrska%20naloga/Lektorirano/Vladimir_Mančić_Magistrsko%20delo.doc%23_Toc483689265file:///C:/Users/Vlado/Desktop/mag/MAG/Magistrska%20naloga/Lektorirano/Vladimir_Mančić_Magistrsko%20delo.doc%23_Toc483689266file:///C:/Users/Vlado/Desktop/mag/MAG/Magistrska%20naloga/Lektorirano/Vladimir_Mančić_Magistrsko%20delo.doc%23_Toc483689268file:///C:/Users/Vlado/Desktop/mag/MAG/Magistrska%20naloga/Lektorirano/Vladimir_Mančić_Magistrsko%20delo.doc%23_Toc483689269file:///C:/Users/Vlado/Desktop/mag/MAG/Magistrska%20naloga/Lektorirano/Vladimir_Mančić_Magistrsko%20delo.doc%23_Toc483689270file:///C:/Users/Vlado/Desktop/mag/MAG/Magistrska%20naloga/Lektorirano/Vladimir_Mančić_Magistrsko%20delo.doc%23_Toc483689271file:///C:/Users/Vlado/Desktop/mag/MAG/Magistrska%20naloga/Lektorirano/Vladimir_Mančić_Magistrsko%20delo.doc%23_Toc483689272file:///C:/Users/Vlado/Desktop/mag/MAG/Magistrska%20naloga/Lektorirano/Vladimir_Mančić_Magistrsko%20delo.doc%23_Toc483689273file:///C:/Users/Vlado/Desktop/mag/MAG/Magistrska%20naloga/Lektorirano/Vladimir_Mančić_Magistrsko%20delo.doc%23_Toc483689274file:///C:/Users/Vlado/Desktop/mag/MAG/Magistrska%20naloga/Lektorirano/Vladimir_Mančić_Magistrsko%20delo.doc%23_Toc483689275file:///C:/Users/Vlado/Desktop/mag/MAG/Magistrska%20naloga/Lektorirano/Vladimir_Mančić_Magistrsko%20delo.doc%23_Toc483689276file:///C:/Users/Vlado/Desktop/mag/MAG/Magistrska%20naloga/Lektorirano/Vladimir_Mančić_Magistrsko%20delo.doc%23_Toc483689277file:///C:/Users/Vlado/Desktop/mag/MAG/Magistrska%20naloga/Lektorirano/Vladimir_Mančić_Magistrsko%20delo.doc%23_Toc483689278file:///C:/Users/Vlado/Desktop/mag/MAG/Magistrska%20naloga/Lektorirano/Vladimir_Mančić_Magistrsko%20delo.doc%23_Toc483689279file:///C:/Users/Vlado/Desktop/mag/MAG/Magistrska%20naloga/Lektorirano/Vladimir_Mančić_Magistrsko%20delo.doc%23_Toc483689280file:///C:/Users/Vlado/Desktop/mag/MAG/Magistrska%20naloga/Lektorirano/Vladimir_Mančić_Magistrsko%20delo.doc%23_Toc483689281file:///C:/Users/Vlado/Desktop/mag/MAG/Magistrska%20naloga/Lektorirano/Vladimir_Mančić_Magistrsko%20delo.doc%23_Toc483689282file:///C:/Users/Vlado/Desktop/mag/MAG/Magistrska%20naloga/Lektorirano/Vladimir_Mančić_Magistrsko%20delo.doc%23_Toc483689283file:///C:/Users/Vlado/Desktop/mag/MAG/Magistrska%20naloga/Lektorirano/Vladimir_Mančić_Magistrsko%20delo.doc%23_Toc483689284file:///C:/Users/Vlado/Desktop/mag/MAG/Magistrska%20naloga/Lektorirano/Vladimir_Mančić_Magistrsko%20delo.doc%23_Toc483689285file:///C:/Users/Vlado/Desktop/mag/MAG/Magistrska%20naloga/Lektorirano/Vladimir_Mančić_Magistrsko%20delo.doc%23_Toc483689286
X
SEZNAM UPORABLJENIH SIMBOLOV
XI
SEZNAM UPORABLJENIH KRATIC
HTML – Hypertext Markup Language
CSS – Cascading Style Sheets
PHP – PHP Hypertext Preprocessor
MVC – MODEL - VIEW - CONTROLLER
CSRF – CROSS SITE REQUEST FORGERY
XSS ATTACK – CROSS SITE SCRIPTING ATTACK
SQL – Structured Query Language
W3C – World Wide Web Consortium
CRUD – Create | Read | Update | Delete
IRC – Internet Relay Chat
ORM – Object Relational Mapping
1
1 UVOD
V zadnjih dveh desetletjih je internet postal del vsakdana, saj se le-ta uporablja za
komercialne in poslovne namene na mnogo različnih načinov, kot npr. za spletne
aplikacije, predstavitvene strani, bloge, novice, video vsebine itd. Veliko število aplikacij se
je v te namene razvilo v spletno obliko oziroma spletne aplikacije. V današnjem času je
povsem običajno, da uporabniki neprestano pričakujejo spremembe oziroma nove izume,
kateri se bodo na spletu lahko uporabljali. Posledično je potrebno neprestano slediti
tehnologijam in se le-tem čim bolj prilagajati [1].
Trenutno je v spletnem razvoju na voljo ogromno tehnologij, ki se lahko uporabljajo za
razvoj spletnih aplikacij [2], [3]. V našem raziskovalnem delu bomo predstavili trenuten
trend ogrodij PHP (angl. »PHP Hypertext Preprocessor«), kaj nam posamična ogrodja
nudijo, kakšna je kompleksnost uporabe in teţavnost učenja, na kakšen način je
poskrbljeno za varnost, do kakšnih razlik pride pri merjenju hitrosti, koliko se danes
posamezno ogrodje uporablja, in najpomembneje, v katerih primerih je posamezno
ogrodje najprimernejše.
V raziskavi ne sme biti vključeno subjektivno mnenje, na podlagi katerega lahko pridemo
do nepravilnih rezultatov. Velikokrat pride do tega problema, kadar odgovor iščemo v
osebah, katere imajo izkušnje v določenem ogrodju. V mnogih primerih te osebe
priporočajo njim najbolj poznano ogrodje, medtem ko je na voljo še veliko drugih ogrodij,
katera bi bila lahko bolj primerna za razvoj posamezne rešitve. Da bi se izognili tovrstnim
teţavam, bomo v magistrskem delu predstavili model za analizo in primerjavo ogrodij
PHP. Glavni razlog za raziskovanje temelji na veliki izbiri ogrodij PHP, s katerimi lahko
razvijemo spletne aplikacije oziroma rešitve. To lahko za razvijalce predstavlja problem,
saj večja ponudba različnih rešitev ni le pozitivna lastnost, ampak ima tudi negativne
strani, saj razvijalcu oteţi izbiro v primeru, da je precej ogrodij nepoznanih oziroma
razvijalec ne pozna posamezne lastnosti ogrodij ter tega, kaj le-te nudijo.
Predmet raziskovanja v magistrski nalogi je najti najpomembnejše faktorje, na podlagi
katerih bomo ocenjevali ogrodja. Kot rezultat raziskovanja bo predstavljen analitični model
za oceno in izbiro PHP ogrodja ter rezultati primerjave ogrodij na podlagi tega modela.
2
1.1 Področje in namen raziskave
V raziskavi ţelimo definirati analitični model, na podlagi katerega bomo primerjali različna
ogrodja PHP, ki se uporabljajo za razvoj spletnih aplikacij. Vključena bodo testiranja na
različnih področjih, kot so hitrost, varnost, kompleksnost, podpora, trend in skupnost.
Raziskava bi pripomogla k večjim ciljnim skupinam, kot so posamezniki ali podjetja, ki se
ukvarjajo z razvojem spletnih aplikacij, saj se lahko prihrani veliko časa, posledično tudi
stroškov, v primeru, da se ţe na samem začetku razvoja uporabi najprimernejše ogrodje.
S samim raziskovanjem bomo iskali pozitivne in negativne lastnosti ogrodij PHP, na
podlagi katerih bomo lahko opredelili kdaj oziroma v katerem primeru je določeno ogrodje
najprimernejše za uporabo.
Ogrodja nam nudijo različne vidike uporabe, medtem ko morajo razvijalci vedeti, kaj je
njihov cilj oziroma končna naloga, na podlagi česar lahko laţje izberejo primernejšo
ogrodje in s tem prihranijo več časa pri razvoju ter vzdrţevanju. Za laţji razvoj
analitičnega modela smo zapisali smernice oziroma raziskovalna vprašanja, na podlagi
katerih smo zapisali hipoteze.
Raziskovalna vprašanja:
RV 1: kateri faktorji so najpomembnejši pri ocenjevanju ogrodij?
RV 2: kakšne so varnostne luknje pri ogrodjih?
RV 3: kako velike razlike nastanejo med ogrodji, ko se meri kompleksnost?
RV 4: kakšne so razlike med ogrodji pri merjenju odzivnosti in hitrosti?
RV 5: kako je pokrita podprtost knjiţnic pri posameznem ogrodju?
RV 6: katero izmed naštetih ogrodij je trenutno največkrat uporabljeno?
Hipoteze:
H 1: najpomembnejše faktorje predstavljajo hitrost, varnost, kompleksnost,
podpora, trend in skupnost.
H 2: v ogrodjih se pojavi moţnost zlorabe z načinom CSRF, XSS ali SQL-injection.
H 3: ogrodja se po kompleksnosti močno razlikujejo.
H 4: pri hitrosti in odzivnosti se pojavljajo nezanemarljive razlike.
H 5: ogrodja nudijo različno število podprtih knjiţnic.
H 6: med naštetimi ogrodji se uporabljajo samo novejša ogrodja.
3
Primerjava ogrodij bo temeljila na podlagi razvitega modela za primerjavo ogrodij. V
modelu bodo predstavljeni faktorji, s katerimi bomo ocenjevali in primerjali ogrodja. Za
iskanje faktorjev bomo uporabili raziskovalno metodo sistematičnega pregleda literature.
To raziskovalno metodo bomo uporabili tudi pri raziskavi, ko bomo iskali, katero ogrodje je
največkrat uporabljeno, v katerih primerih in zakaj, vključena pa bo tudi v raziskovanju
ostalih faktorjev v modelu. Kot druga raziskovalna metoda bo predstavljena izvedba
eksperimenta. Na koncu bodo predstavljeni rezultati in ugotovitve eksperimenta.
Eksperiment bo vključeval testiranje zaščite posameznega ogrodja, kompleksnost,
odzivnost, hitrost ter podprtost ogrodja z različnimi knjiţnicami in vključenimi rešitvami.
4
1.1.1 Raziskovalna vprašanja in predvidene metode za pridobivanje podatkov ter analiz
Tabela 1.1: Predstavitev raziskovalnih vprašanj in predvidenih metod raziskave
Raziskovalno vprašanje Predvidene metode
pridobivanja podatkov
Predvidene metode analize
RV1: kateri faktorji so
najpomembnejši pri
ocenjevanju ogrodij?
Sistematičen pregled
literature
Na podlagi pridobljenih
podatkov lahko določimo
glavne faktorje za izbiro
najprimernejšega ogrodja.
RV 2: kakšne so varnostne
luknje pri ogrodjih?
Sistematičen pregled
literature, eksperiment
S testiranjem bomo primerjali,
kakšna je zaščita
posameznega ogrodja.
RV 3: kako velike razlike
nastanejo med ogrodji, ko
se meri kompleksnost?
Sistematičen pregled
literature, eksperiment
Kompleksnost se bo merila na
podlagi strukture, obseţnosti
ter učne krivulje. Drugi del bo
temeljil na podlagi podatkov, ki
jih bomo pridobili s pomočjo
metrik. Pridobili bomo tako
kvantitativne kot kvalitativne
podatke. Sledi analiza
pridobljenih podatkov.
RV 4: kakšne so razlike
med ogrodji pri merjenju
odzivnosti in hitrosti?
Eksperiment Na podlagi eksperimenta
bomo pridobili kvantitativne
podatke, jih med seboj
primerjali in prikazali v
tabelarični ter grafični obliki.
RV 5: kako je pokrita
podprtost knjiţnic
posameznega ogrodja?
Eksperiment,
sistematičen pregled
literature
Na podlagi naloge, kjer bomo
implementirali funkcionalnosti,
se bo izvedla primerjava
podprtosti.
RV 6: katero izmed naštetih
ogrodij je trenutno
največkrat uporabljeno?
Sistematičen pregled
literature
Primerjava in opisovanje,
katero ogrodje je največkrat
uporabljeno, v katerih primerih
in zakaj.
5
1.2 Struktura dela
Na začetku magistrskega dela bo predstavljen namen oziroma cilj raziskave, razlog, zakaj
je raziskava primerna oziroma potrebna ter kje oziroma v katerih primerih bi bili lahko
rezultati raziskave uporabni. Za uvodom bomo opisali posamezne jezike, ki se uporabljajo
pri razvoju spletnih aplikacij. Ker izbrana ogrodja PHP temeljijo na arhitekturnem vzorcu
MVC (angl. »model - view – controller«), bomo le-tega opisali v enem izmed poglavij.
Sledi opis najbolj znanih in uporabljenih ogrodij PHP, za tem pa podrobnejši opis izbranih
ogrodij, ki smo jih kasneje podrobneje raziskali. Pred raziskavo smo na začetku opisa
podali njihovo osnovno delovanje, opis pozitivnih in negativnih lastnosti, na podlagi katerih
se bomo laţje odločali, preden začnemo z razvojem spletnih aplikacij. Samo primerjanje
bo temeljilo na podlagi izdelanega modela, ki bo predstavljen v poglavju za opisom ogrodij
PHP. Na koncu magistrske naloge bomo opisali izvedbo eksperimenta, s katerim bomo
iskali razlike med ogrodij. Eksperiment bo temeljil na podlagi izdelanega primerjalnega
modela. Z eksperimentom bomo predstavili rezultate in ugotovitve, s katerimi bomo
prikazali oziroma predstavili spoznanja, katera smo pridobili pri raziskovanju in izdelavi
magistrskega dela. Vsi pridobljeni rezultati bodo poleg besedilne oblike predstavljeni tudi v
tabelarični in grafični obliki; na koncu sledi opis, kako bi raziskavo lahko nadaljevali.
6
2 OPIS VKLJUČENIH JEZIKOV
2.1 Programski jezik PHP
PHP oziroma PHP Hypertext Preprocessor se uporablja v odprtokodnih rešitvah, katere
se uporabljajo za razvoj spletnih rešitev, kjer je PHP lahko vgrajen tudi v HTML (angl.
»Hypertext Markup Language«). V večini primerov se PHP uporablja v ogrodjih, ki
temeljijo na arhitekturnem vzorcu MVC, s katerim se lahko povsem loči koda PHP od
ostalih programskih jezikov, kot so HTML, CSS (angl. »Cascading Style Sheets«),
JavaScript, ter JQuery, katere uporabimo na strani klienta. Zaradi uporabnosti v
odprtokodnih rešitvah se PHP pogosto uporablja, saj si določena manjša podjetja ne
morejo privoščiti dragih licenc drugih ponudnikov, kot so ogrodja podjetja Microsoft in
druga. V današnjih časih je najpogostejša uporaba PHP verzije 5.5, medtem ko se vse
bolj širi uporabnost najnovejše verzije 7.0 [4].
Za programski jezik PHP je značilna hitra učna krivulja, kar pomeni krajšo učno dobo,
hkrati pa nudi ogromno naprednih funkcionalnosti za izkušenejše programerje.
Samo izvajanje programskega jezika PHP je prvotno mišljeno na streţniški strani, kjer
lahko izvajajo različne funkcionalnosti, potrebne za delovanje aplikacije, izvajanje različnih
SQL (angl. »Structured Query Language«) stavkov, kot so na primer CRUD (angl.
»create«, »read«, »update«, »delete«) operacije, delo z različnimi dokumenti, kot so XML
in PDF. Nad podatki lahko izvajamo različne operacije, medtem ko lahko same funkcije
tudi prejmejo različne podatke s pomočjo parametrov oziroma drugih metod ter jih s
pomočjo jezika PHP predelajo in pošljejo nazaj v novi preoblikovani obliki, na kar se le-ti
prikaţejo v pogledu. Najenostavnejši in najrazumljivejši način za tovrstno izvajanje
doseţemo z arhitekturnim vzorcem MVC. PHP ima podporo za različne protokole, kot so
IMAP, SMTP, POP3, HTTP in COM. V primeru, če za izvajanje naših funkcionalnosti
potrebujemo kateri koli drugi protokol, se interakcija lahko naknadno omogoči.
Programski jezik PHP se lahko uporablja na treh glavnih področjih. Prvo je ţe omenjeno
programiranje na strani streţnika, kot drugo je programiranje v ukazni vrstici (angl.
»Command line scripting«), ki je primarno mišljen za izvajanje nalog, kot je »cron« (npr.
Linux) ali tipa, kot je »Urnik nalog« (angl. »Task Schedule«) (npr. Windows). Vse, kar je
potrebno za izvajanje v ukazni vrstici, je PHP razčlenjevalnik (angl. »parser«). Vse, kar
zapišemo v ukazni vrstici, lahko izvedemo brez streţnika ali brskalnika. Ti ukazi so lahko
prav tako primerni za izvajanje preprostih procesov. Kot tretji način, ki pa ni najbolj
primeren, je pisanje namiznih aplikacij z grafičnim uporabniškim vmesnikom, kjer je
potrebnega kar nekaj predznanja [5], [6].
7
2.2 Označevalni jezik HTML5
HTML oziroma HyperText Markup Language je računalniški jezik, ki omogoča kreiranje
spletnih strani, ki so kasneje dostopne kateremukoli uporabniku, povezanemu na internet.
Je eden izmed glavnih jezikov, na podlagi katerih sestavimo končno spletno stran. Poleg
tega je relativno enostaven za učenje, po drugi strani pa je močan, saj za ustvarjanje nudi
različne elemente, s katerimi laţje prilagajamo spletne strani. Tako kot za vse druge
programske jezike tudi tukaj velja, da se v kodi pojavljajo razne kodne besede, sintakse in
pravila uporabe, ki jih moramo upoštevati za pravilno delovanje.
Razvoj HTML jezika se je začel leta 1990. Nato je jezik v petih letih šel skozi kar nekaj
revizij, na podlagi katerih je prišlo do različnih razširitev. Leta 1995 je izšla verzija 3.0, dve
leti kasneje verzija 3.2, za katero je kmalu sledila verzija HTML 4. Kasneje se je
organizacija W3C (angl. »World Wide Web Consortium«) odločila, da bo ustavila razvoj
HTML in se osredotočila na razvoj jezikov XML ter XHTML. Sam programski jezik HTML5
je bil s strani W3C uradno objavljen oktobra leta 2014, pri čemer ni vključeval samo
delovanja HTML 4, ampak tudi XHTML 1 in DOM.
Z uporabo programskega jezika HTML 5 je prišlo do kar nekaj novosti, in sicer:
nova pravila razvrščanja, ki so usmerjena k fleksibilnemu razčlenjevanju in
zdruţljivosti;
moţnost uporabe »inline« SVG in MathML kot elementa;
vključeni so novi elementi:
o article, aside, audio, bdi, canvas, command, data, datalist, details, embed,
figcaption, figure, footer, header, keygen, mark, meter, nav, output,
progress, rp, rt, ruby, section, source, summary, time, track, video, wbr;
forme vsebujejo nove kontrole:
o dates and times, email, url, search, number, range, tel, col;
novi atributi:
o charset (on meta), async (on script);
globalni atributi, ki so lahko uporabljeni na kateremkoli elementu:
o id, tabindex, hidden, data-*;
določene atribute se je odstranilo v celoti:
o acronym, applet, basefont, big, center, dir, font, frame, frameset, isindex,
noframes, strike, tt [7], [8].
8
2.3 Kaskadne stilske predloge CSS3
Cascading Style Sheets (CSS) ali kaskadne stilske predloge se uporabljajo za oblikovanje
posameznih elementov, ki so lahko napisani v različnih označevalnih jezikih, kot je na
primer HTML, XHTML, XML, itd. Skupaj s HTML, JavaScript, JQuery. Tudi CSS spada
med tehnologije, s katerimi se ustvarja vizualno privlačne spletne strani in uporabniške
vmesnike za spletne ter mobilne aplikacije.
Glavni namen programskega jezika CSS je ločiti vsebino dokumenta od predstavitve
dokumenta, vključno z vidiki, kot so postavitev, barve, senčenja, oblikovanja, pisave,
animacije, filtri, media (uporaba pri različnih velikostih zaslona), spreminjanje kazalca
(angl. »Pointer«), upravljanje funkcij drsnika (angl. »slide function«) in še mnogo drugih
stvari. Z uporabo ločenih dokumentov pridobimo izboljšano dostopnost do vsebin,
zagotovimo večjo proţnost, varnost in nadzor [9].
S pomočjo različnih selektorjev, ki se uporabljajo pri CSS, lahko zmanjšamo ponavljanje
določene vsebine. Prav tako se z njimi izognemo gnezdenemu oblikovanju (angl. »inline
style«), ki v dobri praksi ni priporočljiva. Kot primer lahko naredimo razred (».«), id (»#«),
element, atribut, kateremu določimo določene lastnosti, kot so na primer barva pisave,
rob, senčenje ipd., nato ta razred vključimo na element, nad katerim bi radi uveljavili
nastavljene vrednosti.
Poleg zgoraj naštetih moţnosti CSS ponuja tudi pseudo elemente in pseudo razrede,
katere vključimo na glavni element. Najpogosteje uporabljena pseudo elementa sta
»before« in »after«, ki sluţita za vstavljanje pred in po vsebini elementa, medtem ko se
uporablja precej večji izbor pseudo razredov, kot so »active«, »checked«, »disabled«,
»focus«, »hover«, »link«, »visited«, »required« itd.
Ena izmed najpomembnejših lastnosti, ki se uporablja s kombinacijo HTML5, je uporaba
oblikovanja za različne zaslone. V današnjih časih se spletne strani oziroma druge
aplikacije ne uporabljajo zgolj na osebnih računalnikih, ampak tudi na drugih napravah,
kot so telefoni, tablice, interaktivne table in podobno. S pomočjo CSS lahko za vsako
velikost zaslona natančno določimo prikaz postavitve strani ter jo prilagodimo za
najučinkovitejšo in enostavno uporabo na napravi. Prav tako CSS omogoča spremembe
grafičnega oblikovanja dokumenta v samo nekaj vrsticah, s čimer prihranimo čas, ki bi ga
porabili za spremembo oznak v dokumentih.
Delovanje CSS je zapisano po določenih pravilih. To pomeni, da se vsaka nastavitev
oziroma zapisana lastnost prikaţe glede na uteţ oziroma prioriteto, ki je določena na
podlagi vključevanja. Vse nastavitve se lahko prepisujejo, medtem ko se glede na
prioriteto prikaţe najpomembnejša. Uporabimo lahko tri vrste vključevanja CSS
oblikovanja, in sicer:
9
kot zunanja slogovna predloga, kjer imamo posebej dokument, kjer so zapisane
vse lastnosti. Ta dokument nato vključimo v glavi dokumenta:
o sklic dokumenta v glavi;
o ;
kot notranja slogovna predloga, kjer vse lastnosti zapišemo v glavo dokumenta:
o vključevanje v glavo dokumenta s pomočjo oznak;
o ;
tretja moţnost je vključevanje lastnosti v vrstici znotraj oznake (»inline css«), kjer
uporabimo style= »«.
Pri CSS 3 so dodali kar nekaj novih modelov, s katerimi še laţje in učinkovitejše urejamo
uporabniške vmesnike različnih spletnih strani ter aplikacij. Med novosti štejejo nove
oblike selektorjev, box modelov, ozadja, besedilne učinke, 2D in 3D transformacije,
animacije itd. [10].
2.4 Strukturirani povpraševalni jezik MySql
MySql je strukturirani povpraševalni jezik, s katerim upravljamo relacijske podatkovne
baze. Kratica »SQL« pomeni angl. »Structured Query Language«. Povpraševalni jezik
MySql je napisan v programskem jeziku C in C++, podprt pa je na številnih platformah.
Podpora za uporabo jezika se lahko pridobiva iz uradnega priročnika. Prav tako je na voljo
brezplačna moţnost na različnih internetnih kanalih in forumih. Poleg MySql obstajajo tudi
drugi povpraševalni jeziki, kot so Microsoftov MS SQL Server, Postgre SQL, SQLite itd.
MySql je odprtokodni sistem. Zato velja, da je dostopen kateremukoli uporabniku. V
primeru, da bi radi prilagodili delovanje, lahko poučimo kodo in le-to prilagodimo tako, da
nam bolj ustreza. Velja za enega najbolj uporabljenih povpraševalnih jezikov za dostop do
podatkovnih baz.
Delovanje povpraševalnega jezika deluje po principu tabel, v katerih so shranjeni podatki.
Model je sestavljen iz objektov, kot so tabele, pogledi, vrstice, stolpci, medtem ko se lahko
med tabelami določi relacija (1 : 1, 1 : M, M : N).
Najpogostejše operacije pri komunikaciji s podatkovno bazo so CRUD operacije (angl.
»create«, »read«, »update«, »delete«) [11].
10
3 OPIS ARHITEKTURNEGA VZORCA MVC
MVC (angl. Model-View-Controller) ali arhitekturni vzorec »model – pogled - kontroler« se
uporablja pri razvijanju spletnih strani in aplikacij. S pomočjo tega principa lahko
programsko kodo razdelimo na tri dele, s čimer pridobimo večjo preglednost nad kodo ter
laţje vzdrţevanje, medtem ko se logika, ki se izvaja v ozadju, povsem loči od
uporabnikovega pogleda.
Kot je prikazano na zgornji sliki (Slika 3.1), je arhitekturni vzorec MVC sestavljen iz treh
delov, in sicer iz modela, pogleda ter kontrolerja (angl. »model, view, controller«). Kot
najpomembnejše je potrebno omeniti, da so vse funkcije, ki so ustvarjene v kontrolerju,
klicane preko »routes« datoteke, kjer se preko url povezave določi klic kontrolerja oziroma
funkcije v njem. Pogled se uporablja pri prikazovanju uporabniškega vmesnika, kot so na
primer gumbi na aplikaciji, pogledi na spletnih straneh, grafi, slike, različni napisi in vse
ostalo, kar se lahko uporabi za bolj nazorno predstavitev ter laţjo uporabnost sistema.
Model pridobi določene zahteve, ki mu jih pošlje kontroler, na kar se izvajajo različni
povpraševalni stavki za dostop do podatkovne baze. Najpogosteje uporabljene so CRUD
(»create«, »read«, »update«, »delete«) operacije, s katerimi pridobivamo različne podatke
iz podatkovne baze, ki jih nato vrnemo v kontroler oziroma jih prikaţemo v pogledu. V
modelu se nad vsemi podatki izvaja logika, v kateri so všteta vsa pravila delovanja
aplikacije. To logiko lahko prav tako uporabimo v kontrolerju, s čimer izvajamo vse
funkcionalnosti na spletni strani oziroma aplikaciji. Odvisno od same strukture aplikacije
lahko s pomočjo kontrolerja pridobimo podatke, ki jih pošlje model. Te podatke uredimo,
izvedemo različne funkcije nad njimi ter jih pošljemo pogledu, s katerim jih predstavimo
uporabniku [12], [13].
Slika 3.1: Predstavitev principa MVC.
11
Arhitektura MVC se uporablja v različnih programskih okoljih, ki prav tako temeljijo na
različnih programskih jezikih. Prvotno je bil princip MVC razvit za namizno računalništvo,
na kar je izšlo kar nekaj komercialnih in nekomercialnih ogrodij. Na podlagi te arhitekture
se je implementacija oziroma izvajanje kode razdelilo na dve strani, in sicer na odjemalca
ter streţnika. Vsa logika oziroma pravila za izvajanje se v praksi pišejo na strani streţnika,
s čimer lahko bolje poskrbimo za varnost, medtem ko danes obstajajo različne tehnologije
za izvajanje na strani odjemalca, kot so AJAX, JavaScript, AngularJS itd., pri katerih se
lahko logika izvajanja razdeli tako, da se izvaja na obeh straneh. V tem primeru moramo
biti še posebej pozorni na varnost, saj podatkom na strani odjemalca ne smemo zaupati
[14].
12
4 OPIS OGRODIJ PHP
Za razvoj spletnih strani in aplikacij je danes na voljo ogromno različnih ogrodij PHP, ki se
razlikujejo po strukturi jedra; velika razlika se pojavi v delovanju, hitrosti, varnosti, podpori
različnih funkcionalnosti in trendu uporabnosti, kateri se skozi leta močno spreminja [15],
[16].
V začetku raziskave smo poiskali ogrodja PHP, za katera velja, da so najbolj uporabljena
pri razvoju spletnih aplikacij [17], [18], [16], [3], [19]. Poleg manjših raziskav smo
pregledali tudi raziskave drugih avtorjev, pri katerih smo bolje spoznali različna ogrodja. V
raziskavi [20] smo pregledali lastnosti ogrodij CodeIgniter, CakePHP, Seagul,
ZendFramework in Symfony, medtem ko smo v raziskavi [21] pregledali lastnosti ogrodja
Laravel. V raziskavi [22] najdemo opis ogrodij CakePHP in CodeIgniter ter razlike, katere
nastanejo pri toku podatkov v sistemu. V članku [23] je opis primerjave zmogljivosti ogrodij
CodeIgniter in Laravel. Na spletnem naslovu [24] in [25] smo si ogledali trend ogrodij, s
čimer smo si laţje predstavljali uporabo ogrodij v zadnjem obdobju.
Ogodja PHP:
Laravel;
CodeIgniter;
CakePHP;
Symfony;
Yii 2;
ZendFramework;
Phalcon;
Nette;
Slim;
FuelPHP;
Aura.
13
V spodnjem grafu (Graf 4.1) je prikazan primer uporabe ogrodij PHP, katerih meritve so
bile izmerjene s strani GitHub-a. Graf prikazuje uporabo za leto 2015, in sicer za mesec
februar, medtem ko moramo upoštevati, da se statistični podatki skozi čas spreminjajo
[17].
Cilj raziskave je bilo posamična ogrodja bolje spoznati. Ker je bilo le-teh veliko, smo
ustvarili kriterije, po katerih smo izbor zoţili na šest ogrodij. V kriterije smo vključili, da
mora biti ogrodje danes še vedno zelo aktualno in da se za ogrodje še vedno iščejo
izboljšave ter nadgradnje za izboljšano delovanje. Naslednji kriterij predstavljata hitrost in
varnost ogrodja, saj sta ključna dejavnika za kvalitetno zaključeno aplikacijo. Razvoj
končnih aplikacij je lahko zelo različno usmerjen, saj se le-te zelo razlikujejo po
obseţnosti, namenu in funkcionalnostih. Iz tega lahko posledično sklepamo, da pride pri
razvoju do različnih teţavnostnih nivojev. Zato smo v kriterije vključili kompleksnost,
katero lahko ločimo na kompleksnost kode in učno krivuljo razvijalca. Pri kompleksnosti
lahko pomagajo ţe hitro podane rešitve. Zaradi tega smo v raziskavo vključili podporo
različnih funkcionalnosti, kot so na primer mail, avtentikacija, avtorizacija, obvestila (sms,
mail), validacija, delo s podatkovno bazo in podobno. Na koncu smo pregledali trend
ogrodij, ki je bil zelo pomemben za začetnike. Namreč, bolje se je učiti ogrodje, za katero
vemo, da je danes aktualno; na podlagi le-tega nam bo naučeno znanje prej prav prišlo.
S pomočjo zgoraj naštetih kriterijev smo v raziskavo vključili naslednja ogrodja:
Laravel;
CodeIgniter;
CakePHP;
ZendFramework;
Symfony;
Yii2.
Graf 4.1: Pregled ogrodij PHP.
14
4.1 Laravel
Laravel je ogrodje, namenjeno razvoju spletnih strani oziroma spletnih aplikacij. Razvito je
bilo s strani Taylora Otwella, in sicer v podjetju, kjer je glavna prioriteta, da pri razvoju
ogrodja Laravel neprestano iščejo nove inovativnejše rešitve, s katerimi bi izboljšali
delovanje ogrodja. V podjetju so usmerjeni predvsem v razmišljanje razvijalcev, njihovo
izkušnjo ob programiranju ter poenostavljanje rešitev, s čimer se varnost funkcionalnosti
ne slabša.
Ogrodje velja za eno najuporabnejših, skupaj s Symphony2, Zend, Yii2 ter z ostalimi.
Samo delovanje je zelo podobno ogrodju CodeIgniter, največja razlika se pojavi v sintaksi.
Prav tako kot CodeIgniter za arhitekturo uporablja princip. Funkcionalnosti, ki jih nudi
ogrodje Laravel, opisujejo ključne točke oziroma lastnosti, zakaj sploh uporabljati ogrodje.
Prva beta verzija ogrodja Laravel je izšla 9. junija 2011, v istem mesecu pa je izšla prva
verzija Laravel z imenom Laravel 1, na kar se je skozi leta ogrodje izboljševalo in
razvijalo, s čimer je 23. avgusta 2016 izšla verzija 5.3. Na sliki (Slika 4.1) je predstavljen
LOGO ogrodja Laravel [26], [21], [27], [28].
Ena izmed glavnih sprememb, ki so jih vključili v razvoju Laravel, je ponudba glavnih
funkcionalnosti, ki se najpogosteje uporabljajo na projektih. Ene izmed teh funkcionalnosti
so avtentikacija, usmerjanje oziroma »routing«, seje, predpomnenje oziroma »caching«,
delo s podatkovno bazo s pomočjo modelov itd. Z zdruţenjem le-teh so razvijalcem
prihranili veliko dela, saj s pomočjo določenih kratkih postopkov oziroma ukazov hitro
ustvarijo določeno funkcionalnost. Poleg tega je sintaksa za določene funkcionalnosti
privzeto varno ustvarjena, na kar se pri končnem produktu pokaţe boljša kvaliteta izdelka.
V primeru, da podjetje uporablja na različnih projektih samo eno ogrodje, v tem primeru
Laravel, bodo vse določene funkcionalnosti na vseh projektih enako implementirane [29],
[30].
Slika 4.1: Ogrodje Laravel.
15
4.2 CodeIgniter
V viru [2] in [3] je na različnih grafih prikazano, da ogrodje CodeIgniter velja za eno
najmočnejših ogrodij PHP, saj uporablja zelo preprosto in enostavno strukturo, medtem ko
nudi razvijanje tako enostavnih kot zapletenih funkcionalnosti za aplikacije. Zgrajeno je
bilo predvsem za razvijalce, ki za razvoj potrebujejo preprosto in enostavno ogrodje.
Večina ogrodij za razvijanje spletnih aplikacij za delovanje potrebuje podatkovno bazo.
Prav tako tudi to ogrodje omogoča povezovanje z najpogostejšim strukturiranim
povpraševalnim jezikom MySql. CodeIgniter uporablja princip MVC, pri čemer je edini
izmed teh obvezen samo kontroler, medtem ko sta model in pogled opcijska; seveda pa je
priporočljivo uporabljati celotno arhitekturo zaradi varnosti, kvalitete kode in lepšega
pogleda nad strukturo. Ogrodje je izšlo 28. februarja 2006. Danes pa ne pripada podjetju,
ki ga je ustvarilo, saj je leta 2014 podjetje EllisLab dodelilo lastništvo »British Columbia«
inštitutu za tehnologijo, ki naj bi samo ogrodje prestavili v ţiv laboratorij, na podlagi
katerega bi se razvijala povsem nova generacija razvijalcev [31], [32].
Za ogrodje CodeIgniter je značilna zelo visoka hitrost, saj sta ţe privzeta struktura in
celotno delovanje narejena zelo preprosto, na kar v ozadju ne izvaja nepotrebnih oziroma
obseţnejših opravil. K sami hitrosti veliko prispeva velikost celotnega direktorija, ki z vsem
skupaj znaša le 6MB ob prenosu. Ena izmed glavnih lastnosti, zakaj je pritegnilo ogromno
razvijalcev, je, da je učna krivulja zelo pozitivna, saj se lahko zelo hitro naučimo
uporabljati ogrodje. To pomeni, da se s tem prihrani ogromno časa. Poleg učne krivulje
velik vpliv predstavlja tudi čas obstajanja ogrodja, saj je bilo ogrodje zelo dolgo časa edino
močno in stabilno ogrodje, s katerim smo lahko uspešno ter učinkovito razvijali spletne
rešitve. Seveda je danes teh ogrodij več. Kljub temu je uporaba CodeIgniterja še v veliki
meri prisotna. Pri sami uporabi na začetku ni potrebno prav veliko konfiguracij, za laţjo
uporabnost pa sta na voljo odlična dokumentacija in podpora, s katero si lahko
pomagamo pri različnih problemih [22], [20].
Slika 4.2: Ogrodje CodeIgniter.
16
4.3 CakePHP
CakePHP je brezplačno ogrodje za razvoj spletnih strani oziroma aplikacij, ki temelji na
podlagi programskega jezika PHP. Z okvirjem se ob programiranju ustvarja temeljna
struktura, za katero je značilno laţje branje oziroma razumevanje, posledično tudi laţje in
boljše vzdrţevanje. Tako kot večina znanih ogrodij PHP, tudi to deluje po principu MVC,
razvoj ogrodja pa je temeljil na delovanju Roby on Rails.
Ogrodje je bilo razvito s strani podjetja Cake Software Foundation. Prva verzija za razvoj
je bila izdana maja 2006 pod licenco MIT. Glavni cilj podjetja je, da programerjem
omogočajo strukturiran in hiter način razvoja, brez da bi izgubili proţnost [33], [34].
Za ogrodje je značilno, da ima ogromno skupnost, katera lahko veliko pripomore pri
razvoju rešitev. Veliko vlogo igra jedro ogrodja, ki je strukturno zelo dobro pripravljeno. To
pomeni, da si prenesemo CakePHP direktorij in lahko začnemo programirati naše glavne
funkcionalnosti brez kakšnih velikih konfiguracij. Vse osnovne stvari, kot so avtentikacija,
emaili, varnost, seje, validacije in podobno so ţe vključene v ogrodje. Ena izmed
najpomembnejših lastnosti ogrodja je, da je še danes zelo aktivno in napreduje v razvoju,
veliko raziskav ter testiranj je usmerjenih v izboljševanje jedra, na podlagi katerega deluje
celotno ogrodje. Pri samem razvijanju z ogrodjem CakePHP je vredno omeniti tudi, da na
začetku zahteva nekoliko več časa za učenje, saj je zanj značilno kar nekaj
kompleksnosti, ogrodje pa samo po sebi vsebuje veliko teţnosti, katera vpliva na hitrost
končnih izdelkov. Kljub daljšemu učenju na začetku se tako kot pri ostalih ogrodjih tudi
tukaj kmalu pokaţejo glavne prednosti ogrodja [20], [22].
Slika 4.3: Ogrodje CakePHP.
17
4.4 Zend Framework
Zend Framework je odprtokodno objektno orientirano ogrodje, ki je namenjeno razvoju
spletnih strani ali aplikacij. Deluje v programskem jeziku PHP. Sama sestava je zgrajena
tako, da lahko posamezne dele uporabljamo kot knjiţnice oziroma kot dele, ki jih lahko
uporabljamo samostojno. Poleg tega omogoča strukturo po principu MVC, s katero lahko
kreiramo vzorec, na podlagi katerega se sestoji končni izdelek.
Cilj ogrodja Zend je poenostavitev spletnega razvoja, medtem ko se ohranja objektno
orientiran razvoj z najboljšimi praksami. Glavni sponzor pri razvoju ogrodja je »Zend
Company«. Poleg tega so k dodatnim funkcionalnostim prispevala tudi druga podjetja, kot
so Google, Microsoft in StrikeIron, katera so močno pripomogla pri razvoju vmesnikov do
spletnih storitev. Prva izdaja ogrodja je bila izvedena 3. marca 2006, in sicer pod BSD
licenco [35], [36], [37].
Ogrodje spada v skupino kompleksnejših ogrodij, saj potrebujemo kar nekaj časa za
učenje uporabnosti ogrodja. V drugem pogledu je ena izmed pozitivnih strani ogrodja
sama kvaliteta kode, ki je dodobra testirana, s čimer se pridobi ogromno na zanesljivosti,
kot sta hitrost in varnost, pri kateri se uporablja bcrypt za shranjevanje gesel in AES-256
pri šifriranju. Poleg tega ima ogrodje izjemno veliko podprtost knjiţnic, s katerimi omogoča
ogromno dodatnih funkcionalnosti, kot so avtentikacija, »captcha«, »caching«, »barcode«
za pretvarjanje slik, PDF dokumentov, kriptografijo, »escape« funkcije, s katerimi varno
prikazujemo HTML, JS, CSS in URL-je, modul za delo z datotekami in podobno, ob tem
pa nudi dobro dokumentacijo in veliko podporno skupino (angl. »support«). Kot je ţe
zgoraj omenjeno, lahko funkcionalnosti ogrodja uporabljamo kot dele ali z drugimi
besedami rečeno, samo ogrodje ne preusmerja na uporabo MVC principa tako močno kot
druga ogrodja PHP, saj lahko majhne projekte izpeljemo brez njega. Kljub temu je MVC
princip priporočljiv, saj se včasih manjši projekti razvijejo v večje, na kar imamo pri dobri
strukturi večji nadzor nad kodo. Ogrodje je še danes v stanju razvoja oziroma izboljšav,
ogromno raziskav pa je usmerjenih predvsem na zanesljivost ter strukturo kode [38], [39].
Slika 4.4: Ogrodje ZendFramework.
18
4.5 Yii2
Yii2 je odprtokodno objektno orientirano ogrodje, ki deluje po principu MVC. Ime »Yii« se
izgovarja kot »ji«, kar bi naj v kitajščini pomenilo »preprosto in evolucijsko«. Kot akronim
bi lahko uporabili angleški izraz »Yes it is!«. Ogrodje je namenjeno razvoju spletnih
aplikacij in spletnih strani. Prav tako kot Zend Framework uporablja licenco BSD in je še
danes aktivno.
Ogrodje je bila ideja Quianga Xuea, ki je začel projekt Yii 1. januarja 2008. Pred tem je ţe
ustvaril projekt Prado, na podlagi katerega je s pomočjo izkušenj izšlo ogrodje Yii. Za
Prado sta bila najbolj značilna kompleksnost in ogromno učnega časa za pridobitev
ustreznega znanja za uporabo ogrodja, medtem ko se je razvoj pri Yii usmeril predvsem
na bolj enostavno uporabo, varnost in hitrost. Po skoraj letu dni razvoja je decembra 2008
izšla prva verzija Yii. Glede na druga ogrodja, ki temeljijo na PHP, je to ogrodje takoj
pritegnilo ogromno razvijalcev, saj se je s svojo učinkovitostjo lahko kosalo z drugimi
ogrodji. Oktobra 2014 je izšla popolnoma nova različica »Yii 2«, pri kateri so hoteli ohraniti
prvotno enostavnost in razširljivost, dodali so nove lastnosti in novejše tehnologije, s
katerimi so razvijalcem predstavili dodatno spodbudo za uporabo tega ogrodja [40], [41].
Značilnost Yii brezplačnega ogrodja je, da spodbuja čisto in lepo obliko kode ter hiter
razvoj. Primeren je za razvoj apijev, osnovnih ali kompleksnejših aplikacij, sam razvoj pa
je potekal na zelo prefinjen način v smeri, da se bo z ogrodjem razvijalo predvsem
kompleksnejše stvari. V vsakem primeru je zagotovljen nadzor ne glede na velikost
končne rešitve. Za samo ogrodje so značilne razširljivost, preprosta namestitev, kot pa je
ţe zgoraj omenjeno, temelji na poenostavitvi. Kot dober primer bi bila v tem primeru
varnost, ki je učinkovita in lahka za uporabo. Zgoraj omenjen izraz »Yes it is« odgovarja
na tri osnovna vprašanja, in sicer ali je ogrodje varno, strokovno in ali je primerno za naš
projekt. Vredno je omeniti tudi, da je za uporabo primerno imeti veliko znanja, saj se pri
kompleksnejših funkcionalnostih hitro najdejo teţave, pri katerih je potrebno razumeti
strukturo in delovanje ogrodja [42].
Slika 4.5: Ogrodje Yii2.
19
4.6 Symfony
Symfony je brezplačno ogrodje, ki temelji na programskem jeziku PHP, katero je bilo
izdano pod licenco MIT s strani podjetja SensioLabs. Sami začetki segajo v leto 2005,
natančneje 18. oktobra, ko je začela delovati spletna stran symfony-project.com. Ogrodje
cilja na razvoj trdnih spletnih aplikacij, nad katerimi imajo razvijalci popoln nadzor nad
celotno konfiguracijo vse od imeniške strukture in vse do tujih knjiţnic. V paketu je
vključeno tudi ogrodje, s katerim si razvijalci lahko pomagajo pri vzdrţevanju, testiranju,
odpravljanju napak in dokumentiranju projekta. Razvoj ogrodja je usmerjen predvsem na
odpravljanje ponavljanja razvoja istih funkcionalnosti oziroma zdruţevanju določenih
funkcionalnosti v enoto, katero bo mogoče kasneje vključiti v projekte, na kar se lahko
prihrani veliko časa, zmanjša se kompleksnost, vzdrţevanje pa je s tem še veliko laţje
[43], [44].
Ogrodje podpira princip MVC. Poleg programskega jezika PHP se lahko koda piše tudi v
drugih različnih programskih jezikih, kot so YAML, XML itd. To je ena izmed večjih
lastnosti, s katerimi se ogrodje Symfony razlikuje od ostalih ogrodij. Sama struktura se na
podlagi dodanih moţnosti pisanja kode nekoliko razlikuje od ostalih ogrodij. Posledično je
ogrodje na začetku kompleksnejše in zanj potrebujemo nekoliko več časa, da ga povsem
osvojimo. Dobra stran kompleksnejše in specifične strukture ogrodja je, da s tem pride
veliko dodatnih funkcionalnosti, ki jih lahko uporabimo pri razvoju končnega izdelka. Z
verzijo 2.0 so ogrodju dodali boljšo fleksibilnost, medtem ko za prvo verzijo velja, da je bila
bolj okorna in ne tako prilagodljiva. Prav tako so v verziji 2.0 izboljšali hitrost s pomočjo
predpomnenja. Ogrodje uporablja ORM (angl. »object-relational mapping«) oziroma
objektno relacijsko preslikavo, katera sluţi za to, da lahko tabele v podatkovni bazi
preslikamo v objekte, ki predstavljajo virtualno podatkovno bazo, nad katero izvajamo
funkcije v implementaciji projekta. Pri učenju si lahko pomagamo z dokumentacijo. Poleg
tega je za ogrodje značilna dobra skupnost, pri kateri lahko sodelujemo v različnih klepetih
(angl. Chats«), skupinah ipd [45], [46].
Slika 4.6: Ogrodje Symfony.
20
5 DEFINIRANJE MODELA ZA ANALIZO PROGRAMSKEGA OGRODJA PHP
V raziskavi ţelimo na podlagi lastnosti najti najprimernejšo ogrodje PHP za določeno
rešitev. Pred primerjavo ogrodij moramo določiti, katere lastnosti je potrebno vključiti v
raziskavo. Lastnosti, ki jih bomo raziskali, bodo imele različno teţnost, ki bo odvisna od
cilja oziroma končne naloge projekta.
V primeru, da za končni izdelek potrebujemo preprosto predstavitveno stran, ki ne bo
potrebovala pretirane varnosti in kjer hitrost ne bo imela velikega vpliva, se bomo ţeleli
izogniti kompleksnosti. Zaradi tega bomo izbrali ogrodje, ki se ga lahko hitro naučimo.
Povsem drugače bi postavili uteţi, če bi šlo pri končnem izdelku za večjo spletno trgovino
oziroma projekt, kjer se izvajajo bančne transakcije ter ostale velike funkcionalnosti. V tem
primeru bi imela varnost velik vpliv; prav tako se pričakuje, da bo hitrost imela velik pomen
pri izpolnjevanju kvalitete končnega izdelka.
Ob pregledu zgoraj naštetih ogrodij smo spoznali, da najboljšega ogrodja ni, saj ima
vsako izmed naštetih tako pozitivne kot negativne lastnosti, medtem ko je izbira odvisna
tako od končnega cilja ter kakovosti le-tega, velik vpliv se lahko nanaša tudi na
predznanje razvijalca.
Za sestavo modela smo opravili sistematični pregled literature, kjer smo razbrali, katere
spremenljivke predstavljajo ključni pomen pri izbiri najprimernejšega ogrodja [20], [47],
[48]. Na podlagi ţe obstoječih raziskav smo raziskovalne spremenljivke uvrstili v
kategorije, na podlagi katerih smo ustvarili model za analizo ogrodij (Slika 5.1).
Raziskavo smo razdelili na tri dele, in sicer:
zanesljivost;
teţavnost;
priljubljenost.
Zanesljivost ogrodij bomo ocenjevali na podlagi dveh kategorij, in sicer hitrost ter varnost,
kjer bomo pri hitrosti merili specifikacije, kot so:
število zahtev v sekundi (angl. »Request per second«);
hitrost prenosa (angl. »Transfer rate«);
čas na posamezno zahtevo (angl. »Time per request«);
število vseh zahtev (angl. »Complete requests«);
medtem ko bomo pri varnosti upoštevali:
»Cross site scripting - XSS«, ki se uporablja kot vsiljena zlonamerna koda;
»Cross site request forgery - CSRF«, ki se uporablja na formah;
»SQL-injection«, ki se uporablja za napade nad podatki v podatkovni bazi.
21
Teţavnost bomo merili na podlagi kompleksnosti, kamor spada teţavnost učenja in
kompleksnost kode (število datotek, število razredov, število vrstic, preglednost,
vzdrţevanje itd.). Drugi del teţavnosti bo merjen na podlagi podpore s knjiţnicami, s
pomočjo katerih laţje in učinkovitejše implementiramo določene funkcionalnosti
(avtentikacija, email, internacionalizacija, upravljanje podatkovne baze itd.).
Tretji del raziskave predstavlja priljubljenost, katero smo ločili na trend in skupnost. Na
podlagi trenda bomo videli, katero ogrodje se danes največ uporablja. V primeru, da bi se
rad razvijalec na novo naučil razvijanja v določenem ogrodju, je dobro vedeti, katero
ogrodje je danes najbolj uporabljeno, saj je večja moţnost, da bo lahko naučeno znanje
uporabljal v prihodnje. Kot druga lastnost, ki spada pod priljubljenost, je skupnost (angl.
»Community«), katera nosi veliko vlogo pri učenju oziroma, ko pride do določenega
problema pri razvoju. Namreč v primeru, da samega problema ne moremo rešiti s
pomočjo dokumentacije, se lahko veliko odgovorov najde na forumih oziroma drugih virih.
Le-teh se pojavlja veliko, če je ogrodje zelo uporabljeno, saj tako nastane ogromno
različnih problemov in rešitev zanje. V tem primeru je tudi velika moţnost, da je nekdo ţe
imel enak problem, s čimer hitreje pridemo do rešitve. Zaradi tega nikakor ne smemo
zanemariti pomena skupnosti.
5.1 Zaloge vrednosti
Kot je prikazano v tabeli (Tabela 5.1), smo za vsako lastnost določili zaloge vrednosti, s
katerimi bomo laţje predstavili pridobljene rezultate. Pričakovane vrednosti za hitrost
smo razbrali na podlagi pridobljenih rezultatov v spletnem članku [49], kjer smo lahko
ocenili, kakšne rezultate lahko pričakujemo in kakšna je primerna hitrost za nemoteče
delovanje. Zalogo vrednosti za hitrost smo razdelili na 5 ocenjevalnih lastnosti, med
katerimi je vsaka od lastnosti vredna 10 točk. Točke za posamezno lastnost se bodo
določile glede na vrednosti, prikazane v tabeli (Tabela 6.1). Skupek točk iz vseh
ocenjevalnih lastnosti tako znaša 50 točk. Ocenjevale se bodo naslednje lastnosti:
število končnih zahtevkov (angl. »Complete request«);
celoten prenos v bajtih (angl. »Total transferred«);
število zahtev v sekundi (angl. »Request per second«);
čas na posamezno zahtevo (angl. »Time per request«);
hitrost prenosa (angl. »Transfer rate«).
22
Lestvica zaloge vrednosti za varnost je ocenjena s pomočjo podanih rešitev (vključenih
ali zunanje knjiţnice), na podlagi katerih se lahko doseţe čim bolj varno končno rešitev.
Na podlagi rešitev se bodo podale ocene glede na razmerje pokritosti ţe vključenih rešitev
in rešitev s pomočjo različnih zunanjih knjiţnic, s katerimi doseţemo pričakovano zaščito
pred določenimi napadi. V raziskavo smo vključili tri napade za vsako ogrodje, na kar smo
pregledali posamezne rešitve za vsako ogrodje posebej.
Ocenjevanje kompleksnosti smo razdelili na tri ocenjevalne lastnosti, med katerimi lahko
pri vsaki ogrodje doseţe največjo oceno 10 točk. To pomeni, da je maksimalno moţno
število doseţenih točk 30. Točke za posamezno lastnost se bodo podale na podlagi
rezultatov, prikazanih v tabeli (Tabela 7.2). Lastnosti, ki jih bomo vključili pri ocenjevanju
kompleksnosti, so:
vzdrţevanje;
vrednost LCOM;
relativna kompleksnost strukture.
Podpora funkcionalnosti se bo ocenjevala na podlagi načina implementacije posameznih
funkcionalnosti. Ocena podpore se bo podala na podlagi razmerja števila vključenih
rešitev v ogrodje in vključenih rešitev s pomočjo knjiţnic, vtičnikov ter drugih zunanjih
vključitev. Vseh izbranih funkcionalnosti je 12, medtem ko se bo rezultat na posamezno
ogrodje prikazal v obliki odstotkov glede na pokritost privzeto vključenih funkcionalnosti.
Trend ogrodij bomo ocenili na podlagi interesa uporabe in iskanja zaposlitev v zadnjem
obrobju, medtem ko bomo skupnost ogrodij ocenili na podlagi člankov, dokumentacij,
forumov ter blogov, kjer bo ocena podana po zalogi vrednosti od 1 do 10.
23
Tabela 5.1: Spremenljivke, merske lestvice in zaloge vrednosti
Spremenljivka Merska lestvica
Zaloga vrednosti
Neodvisne spremenljivke
Ogrodje PHP Nominalna
Laravel, CodeIgniter,
ZendFramework, Yii2,
Symfony, CakePHP
Odvisne spremenljivke
Zanesljivost
Hitrost Ordinalna ali
intervalna
Seštevek točk po 5 ocenjevalnih kriterijih
hitrosti. (min 0, max 50)
Varnost Ordinalna ali
intervalna
Privzeto vključene rešitve za varnost pred izbranimi
napadi: (mix 0, max 3)
Teţavnost
Kompleksnost Ordinalna ali
intervalna
Seštevek točk po 3 ocenjevalnih kriterijih
kompleksnosti (min 0, max 30)
Podpora knjiţnic
(nudenje rešitev)
Ordinalna ali intervalna
Privzeto vključene funkcionalnosti: (min 0, max 12)
Priljubljenost
Trend Ordinalna ali
intervalna
Iskanje posameznih ogrodij glede na čas:
(min 0, max 100)
Skupnost Ordinalna ali
intervalna
10 - odlično, 8 - zelo dobro,
6 - dobro, 4 - slabo,
1 - zelo slabo
24
5.2 Model za analizo programskega ogrodja
Slika 5.1: Model za analizo programskega ogrodja PHP.
25
6 ANALIZA OGRODIJ
6.1 Zanesljivost
Zanesljivost ogrodij smo ocenili na podlagi hitrosti in varnosti, kateri predstavljata veliko
teţnost pri ocenjevanju učinkovitosti aplikacij.
6.1.1 Hitrost
Hitrost je eden izmed največjih faktorjev, ki jih je potrebno upoštevati pri izbiri ogrodja
PHP. Do največjih razlik pride pri večjih rešitvah, kjer je hitrost ključnega pomena.
Na spodnjih dveh slikah (Slika 6.1, Slika 6.2) je prikazan primer testiranja hitrosti ogrodja
Laravel. Pri testiranju smo uporabili programsko opremo Apache verzije 2.4.17, pri kateri
smo uporabili ukaz:
»ab –t 10 –c 10«.
Kratica ab pomeni »Apache Benchmarking tool«;
kratica -t pomeni testiranje;
prvo število 10 pomeni deset sekundno testiranje;
drugo število 10 pomeni raven vzporednosti oziroma angl. “concurrency level”.
Slika 6.1: Prikaz primera pridobljenih rezultatov z ogrodjem Apache Benchmark.
26
V tabeli (Tabela 6.1) so prikazani rezultati testiranja hitrosti posameznega ogrodja. Iz
testiranja smo v tabeli prikazali naslednje podatke:
število končnih zahtevkov (angl. »Complete request«);
celoten prenos v bajtih (angl. »Total transferred«);
celoten prenos HTML v bajtih (angl. »HTML transferred«);
število zahtev v sekundi (angl. »Request per second«);
čas na posamezen zahtevek (angl. »Time per request«);
hitrost prenosa (angl. »Transfer rate«).
Tabela 6.1: Rezultati testiranja hitrosti ogrodij PHP
Laravel
5.3. CodeIgniter
3.1. CakePHP
Zend Framework 1.
Yii2 Symfony
3.1.
Število vseh zahtev
467 3587 11 331 802 413
Celoten prenos (bytes)
1832590 7608027 172880 2009170 14521702 2047654
Celoten prenos v
HTML (bytes)
1382887 6818887 167680 1936350 14197690 1927058
Povprečno število zahtev
v sekundi 46,54 358,64 1 33,06 80,08 41,21
Čas na posamezno
zahtevo 214,886 27,883 9887,399 302,495 124,87 242,679
Hitrost prenosa
178, 34 742,85 15,52 195,96 1416,07 199,51
Slika 6.2: Prikaz primera 2. dela rezultatov z ogrodjem Apache Benchmark.
27
S testi hitrosti za izbrana ogrodja PHP smo prikazali grafe, na katerih so laţje vidne
razlike oziroma posamezna odstopanja. V spodnjem grafu (Graf 6.1) je prikazana razlika
po končanih zahtevkih (angl. »complete request«), kjer se je za najboljše ogrodje izkazalo
ogrodje CodeIgniter.
Na naslednjem grafu (Graf 6.2) je prikazan celoten prenos v bitih za posamezno ogrodje
ter celoten prenos HTML za posamezno ogrodje.
Graf 6.2: Prikaz rezultatov hitrosti – prenos podatkov.
Graf 6.1: Prikaz rezultatov hitrosti – celotno število zahtev.
28
Naslednji graf (Graf 6.3) prikazuje število zahtev v sekundi (angl. »Request per second«),
kjer je razvidno, da je najboljše rezultate izvedlo ogrodje CodeIgniter.
Kot je razvidno ţe iz zgornjih grafov, ogrodje CakePHP, kar se tiče hitrosti, prikazuje zelo
slabe rezultate. Da bi si laţje predstavljali, kakšno je dejansko odstopanje ogrodja
CakePHP od ostalih ogrodij, smo na spodnjem grafu (Graf 6.4) prikazali čas na zahtevek
oziroma »Time per request«.
Graf 6.3: Prikaz rezultatov hitrosti – število zahtev v sekundi.
Graf 6.4: Prikaz rezultatov hitrosti – čas na zahtevo.
29
Iz spodnjega grafa (Graf 6.5) lahko vidimo hitrost prenosa posameznega ogrodja. Najbolje
se je izkazalo ogrodje Yii2, za njim s prav tako odličnim rezultatom CodeIgniter. Za tem
sta s pribliţno istim prenosom sledili ogrodji Zend Framework in Symfony.
Na podlagi zgoraj opisanih rezultatov smo na koncu magistrskega dela v poglavju
»Rezultati in ugotovitve eksperimenta« (7) predstavili skupen rezultat hitrosti, kjer smo vse
zgoraj omenjene rezultate zdruţili na skupni imenovalec. Tako smo v tabeli (Tabela 7.1)
zdruţili vse pridobljene rezultate za hitrost, nato pa zdruţene podatke uvrstili po kategoriji
točk (1–10), na podlagi katerih smo izrisali graf (Graf 7.1). Na grafu je razvidno, katera
izmed ogrodij so pri hitrosti pokazala boljše rezultate.
Nad podatki »število vseh zahtev«, »hitrost prenosa« in »celoten prenos« smo izvedli
deskriptivno statistiko s stopnjo zaupanja 95 %, na kar smo prejeli rezultate, prikazane v
nadaljevanju.
Število vseh zahtev:
o najmanjša vrednost: 11;
o največja vrednost: 3587;
o razlika med maksimalno in minimalno vrednostjo: 3576;
o srednja vrednost: 935;
o mediana: 440;
o standardna deviacija: 1323;
hitrost prenosa:
o najmanjša vrednost: 15;
o največja vrednost: 1416;
Graf 6.5: Prikaz rezultatov hitrosti – hitrost prenosa.
30
o razlika med maksimalno in minimalno vrednostjo: 1400;
o srednja vrednost: 457;
o mediana: 197;
o standardna deviacija: 530;
celoten prenos:
o najmanjša vrednost: 172880;
o največja vrednost: 14521702;
o razlika med maksimalno in minimalno vrednostjo: 14348822;
o srednja vrednost: 4698670;
o mediana: 2028412;
o standardna deviacija: 5439022.
Iz deskriptivne statistike lahko razberemo, da je bilo pri številu vseh zahtev CodeIgniter
edino ogrodje, ki je imelo število vseh zahtev večje od srednje vrednosti. Pri faktorjih
»hitrost prenosa« in »celoten prenos« pa je poleg ogrodja CodeIgniter tudi ogrodje Yii2
doseglo rezultat, višji od srednje vrednosti.
31
6.1.2 Varnost
Spletne aplikacije predstavljajo vir skoraj vseh varnostnih ranljivosti, poleg tega se skoraj
polovica napadov izvaja prav v spletnih okoliščinah.
Kompleksnost ogrodja oziroma kode poveča moţnost varnostnih napadov, saj je
kompleksno kodo teţje razumeti, vzdrţevati in testirati, na kar se pojavi več varnostnih
lukenj ter napak, ki jih je posledično teţje odkriti. S tega vidika lahko sklepamo, da
kompleksnejše in večje rešitve vsebujejo več varnostnih lukenj od preprostejših aplikacij.
Kljub temu vedno temu ni tako, saj prinašajo precej vpliva sama analiza, načrtovanje,
razvoj ter testiranja kode. Vsaka večja aplikacija je bila na začetku majhna. Če se v
samem začetku razvoja varnost postavi na prvo mesto, pri čemer se razvoj aplikacije
primerno testira in so vključeni primerni pregledi kode, se lahko kljub širjenju aplikacije še
vedno ohrani ista kvaliteta kode ter isti varnostni nivo.
Iz sistematičnega pregleda literature smo našli 10 najbolj znanih napadov v spletnih
aplikacijah, in sicer:
napad s spreminjanjem poizvedb SQL (angl. »SQL-injection«);
napad z vsiljeno kodo (angl. »cross site scripting«);
napadi pri avtentikaciji in upravljanje s sejami;
ne-varne reference na objekte;
ponovne zahteve na formah (angl. »cross site request forgery«);
napake pri konfiguracijah varnosti;
ne-varno shranjevanje gesel (slabo šifriranje);
nepravilno onemogočanje uporabe URL naslovov;
premalo varnosti na transportnem nivoju;
»ne-validirani« prehodi oziroma preusmeritve (tako naprej kot nazaj) [50].
Pri varnosti se je potrebno zavedati, da pri samem razvoju potrebujemo dovolj izkušenj,
saj ogrodje lahko nudi učinkovito varnost, kljub temu pa se lahko napiše “ne-varna” koda,
s katero lahko pride do teţav.
Iz zgornjega seznama, kjer so našteti napadi v spletnih aplikacijah, smo v naši raziskavi
izbrali nevarnosti, na katere je pri implementaciji rešitev potrebno biti še posebej pozoren.
Večino naštetih nevarnosti je mogoče odpraviti predvsem z upoštevanjem splošnih
nasvetov in navodil pri razvoju, medtem ko je za določene potrebno imeti kar nekaj
izkušenj ter predznanj, saj hitreje pride do napake, posledice pa so lahko bistveno večje.
Posledično smo se v naši raziskavi osredotočili na napade tipa »Cross site scripting«,
»cross site request forgery« in »SQL-injection«, za katere velja, da so eni izmed
najpogostejših, poleg tega pa se lahko z njimi povzroči veliko škode.
32
Napad z vsiljeno kodo (angl. »Cross site scripting«) je eden izmed najpogostejših
napadov, ki se uporablja v spletnih aplikacijah. Deluje po principu, da zlonamerneţ
prikaţe zlonamerno kodo na zaupanja vredni spletni aplikaciji, preko katere se le-ta
izvede. Tovrstni napadi so moţni povsod, kjer lahko uporabnik vnaša kakršnekoli podatke,
ki se kasneje prikaţejo oziroma uporabijo brez preverjanja, validacije ali »encodinga«. Kot
primer lahko vzamemo okence za iskanje (angl. »search«). Brskalnik bo takšno kodo videl
kot varno. Zato jo bo tudi izvedel, na kar bo omogočen dostop do sej, piškotkov, ţetonov
(angl. »tokens«) in ostalih zaupnih podatkov. S pomočjo teh skript se lahko celo prepiše
obstoječo HTML kodo. [51] [52]
Kot primer napada bi bil, če bi se uporabnik v registracijski formi (Slika 6.3) registriral kot:
Seveda bi v tem primeru sproţili samo pogovorno okno s sporočilom »Zlonamerna koda«,
medtem ko je moţnosti za varnostna tveganja veliko več.
Posledice napada se gibljejo od manjših nevarnosti in vse do visokih varnostnih tveganj,
seveda pa je vse to odvisno od občutljivosti podatkov na strani ter od tega, koliko je bilo
vloţenega truda pri preprečevanju tovrstnih napadov.
Kot rešitev uporabimo funkcijo »escape«, s katero vse, kar prikaţemo na uporabnikovem
zaslonu, pretvorimo v tekst. S tem preprečimo, da bi zlonamerneţ poslal v pogled (angl.
»view«) zlonamerno kodo, kot je na primer gumb, na katerega kliknemo in s tem sproţimo
izvedbo zlonamerne kode.
Uporablja se z oznakami »escape« t.j. »{{}}«. Najpogosteje uporabljene predloge (angl.
»template engine«) in knjiţnice, kot so »Twig«, »Blade«, »Vue.js« in še mnogo drugih
imajo tovrstno funkcijo ţe vključeno, medtem ko mora razvijalec poskrbeti, da jo
uporabimo povsod, kjer je moţnost napada mogoča.
V primeru funkcije »escape« bi se uporabniku normalno prikazalo ime v tekstu, s katerim
se je registriral, kot je prikazano na spodnji sliki (Slika 6.4) [50] [53].
Slika 6.4: Prikaz delovanja »escape« funkcije.
Slika 6.3: Vnos zlonamernih podatkov ob registraciji.
33
Napad ponovnih zahtev na formah (angl. »Cross site request forgery«) je ena izmed
moţnosti, s katero uporabnika prisilimo izvesti določene neţelene funkcije oziroma
dejanja na spletnih aplikacijah, kjer so trenutno overjeni oziroma prijavljeni. Napadi CSRF
so osredotočeni predvsem na spreminjanje podatkov in ne na pridobivanje oziroma krajo,
saj napadalec nima moţnosti vpogleda odgovora (angl. »response«) ponarejene zahteve.
Nekateri od naštetih primerov, kot so spreminjanje e-poštnega naslova, kraja denarja ter
ostalih sredstev lahko pripeljejo do velike škode. Zato je izjemno pomembno, da se pri
samem razvoju zavedamo nevarnosti in da jo znamo tudi preprečiti [54].
Tovrstni napadi se preprečujejo z ţetoni CSRF (angl. »tokens«), ki se ustvarijo, in skupaj
s podatki, izpolnjenimi v formi, pošljejo naprej. Kot pomemben podatek je potrebno
omeniti, da se vrednosti ţetonov ustvarjajo povsem naključno in jih ni mogoče predvideti.
Prvi ţeton se pošlje preko piškotkov (angl. »cookie«), drugi ţeton pa preko skritega polja v
formi. Ob izvedbi se morajo ţetoni ob primerjavi z dodatno vrednostjo, shranjeno v
uporabnikovi seji, usklajevati. V primeru, da sta vrednosti isti, se bo forma normalno
izvedla; v nasprotnem primeru, če se vrednosti ne usklajujejo ali če vrednost ţetona
manjka, se izvedba forme prepreči [55].
V primeru, da ogrodje nudi ustvarjanje forme, je priporočljivo, da vzamemo tovrstno
rešitev, saj le-ta ţe podpira preprečevanje napadov CSRF. V nasprotnem primeru, pri
ustvarjanju svoje forme v HTML, moramo za preprečevanje tovrstnih napadov poskrbeti
sami! Eden od načinov, kako sami vključimo ţetone CSRF v formi, je prikazan na-
spodnjem primeru (Odsek kode 1) [56].
Odsek kode 1: Vključevanje ţetonov CSRF
{!! csrf_field()!!}
Napad s spreminjanjem poizvedb SQL (angl. »SQL-injection«) je eden izmed tipičnih
pristopov zlonamerneţev, ki deluje na podlagi prirejanja stavkov SQL s pomočjo
vsiljevanja zlonamerne kode v uporabljene podatke.
Kot dober primer lahko vzamemo iskanje uporabnika po imenu v tabeli »users«. V tem
primeru bi bil stavek SQL zapisan tako, kot je prikazano na spodnjem primeru (Odsek
kode 2). »Vladimir« je vstavljena vrednost v okno za iskanje [57].
Odsek kode 2: Iskanje uporabnika po imenu
SELECT u.name, u.surname FROM users u WHERE u.name =. $searchingValue; //Iz sledečega lahko sklepamo, da bi povpaševanje po imenu izgledalo tako: SELECT u.name, u.surname FROM users u WHERE u.name = 'Vladimir';
34
Iz tega lahko sklepamo, da bi lahko sledilo vstavljanje imena, kot je 'Vladimir OR 1=1', pri
čemer bi pomenilo, da vsaka vrstica ustreza pogojem.
Precej slabše bi bilo, če bi podatek zlonamerneţ spremenil v »'Vladimir; DROP TABLE
users', pri čemer bi izbrisal celo tabelo uporabnikov. Takšne stvari je obvezno potrebno
preprečiti v vseh stavkih SQL. Tovrstne stvari se preprečijo tako, da se v stavku SQL
zapiše, katere vrednosti so na katerem mestu pričakovane ter jih naknadno vstavimo.
Obvezno pa se moramo izogibati lepljenju besedilnih ukazov (angl. »stringov«) za
kreiranje stavkov SQL.
Poleg učinkovitosti, ki jih nudijo ogrodja, lahko tudi sami povečamo varnost, in sicer z
različnimi metodami. Ena izmed znanih metod preprečevanja napada tipa »spreminjanje
poizvedb SQL« je bela lista (angl. »white list«) oziroma seznam vrednosti, ki se lahko
prenese v stavek SQL. Na primer v spustnem meniju imamo sortiranje po abecednem
vrstnem redu od A do Z in obratno. Selekciji imata ID-ja 0 in 1. Ko uporabnik izbere vrsto
sortiranja, se na podlagi izbranega ID-ja v SQL vstavi »ASC« ali »DESC«, kot je
prikazano na spodnjem primeru (Odsek kode 3) in sliki (Slika 6.5). Enako velja za primer,
kamor lahko uporabnik sam vnese, koliko vrstic ţeli izpisati. V primeru, da izbere 20 vrstic
na stran, to število ne vstavimo takoj v stavek SQL, ampak ga najprej pretvorimo v
celoštevilčni tip (angl. »integer«); nato se prepričamo, da je vnesena vrednost res število.
Ena izmed najpogostejših napak je lepljenje besedilnih ukazov (»lepljenje stringov«). Le-
tega se je potrebno izogibati, da bi dosegli kar se da večjo varnost v spletni aplikaciji [58].
Odsek kode 3: Izbira vrste sortiranja na podlagi podanega id-ja
if($id_order == 0) $order = "ASC"; else if ($id_order == 1) $order == "DESC"; 'SELECT u.name FROM users u WHERE u.name = "Vladimir" ORDER BY ' . $order;
Slika 6.5: SQL injection-Preprečevanje napada (sortiranje po id-ju).
35
Določena ogrodja ne nudijo posameznih komponent za preprečevanje tovrstnih napadov.
V takšnih primerih lahko še vedno za varnost poskrbimo sami, le zavedati se moramo,
kakšni so najpogostejši, najnevarnejši ter najenostavnejši napadi, ki se lahko uporabijo v
naši aplikaciji in kako se pred njimi zaščitimo. Kot dober primer zaščite si lahko
predstavljamo:
v vnosna polja ne dopuščamo vnosa HTML oblike besedila oziroma dopuščamo
vnos samo alfa-numeričnih znakov;
vključimo zunanje knjiţnice PHP za varen prikaz HTML vrednosti;
pred izvedbo »add(), find(), beforeSave()« funkcij stavkov SQL vedno preverimo
vnosna polja ter jih pretvorimo v »pričakovane vrednosti, če je le-to mogoče;
vključevanje drugih knjiţnic, ki preprečujejo tovrstne napade (npr. HTML Purifier,
Doctine ORM).
36
6.1.2.1 Podpora za varnost v ogrodju Laravel
V ogrodju Laravel je vključen model »Elouqent ORM« (object-relational mapping), ki
omogoča, da izvedba stavka SQL poteka preko povezave tabela->objekt(model). Kljub
preprečenemu napadu tipa »spreminjanje poizvedb SQL« (angl. »SQL-injection«)
moramo sami poskrbeti za podatke, ki jih vnašamo v podatkovno bazo! Na spodnjem
primeru (Odsek kode 4) je prikaz uporabe modela »Elouqent«.
Odsek kode 4: Uporaba »Elouquent« modela za izvedbo SQL stavkov v ogrodju Laravel
$Objave = DB::table('Objava') ->leftJoin('Slika', 'Objava.ID', '=', 'Slika.TK_Objava_ID') ->select('Objava.ID', 'Objava.Naslov') ->get();
Napad z vsiljeno kodo (angl. »Cross site scripting«) oziroma prikazovanje podatkov s
pomočjo funkcije »escape« se omogoči z odsekom kode, prikazanim spodaj (Odsek kode
5), kjer je razvidno, da se uporabijo značke »{{ .. }}« ali pri konstruiranju form z »{!! … !!}.
Odsek kode 5: Uporaba »escape« funkcije za preprečevanje XSS napadov v ogrodju Laravel
{{!! Some text to show.. !!}};
Pri kreiranju form v ogrodju Laravel se lahko uporabi izraz {!! Csrf_field()!!}, kot je
prikazano na spodnjem primeru (Odsek kode 6), s čimer preprečimo napad »ponovne
zahteve na formah« (angl. »cross site request forgery«).
Odsek kode 6: Uporaba polja CSRF za