103
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

Navodila za pisanje diplomskih nalog UM FERI · 2017. 11. 28. · IV Model for analysis and comparison of PHP frameworks Key words: PHP framework, model for comparison of PHP frameworks,

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

  • 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