WWW-ohjelmointi ANTTI SAND TIETA12

Samankaltaiset tiedostot
OSI ja Protokollapino

3 Verkkopalveluarkkitehtuuri

T Hypermediadokumentin laatiminen. Sisältö. Tavoitteet. Mitä on www-ohjelmointi? Arkkitehtuuri (yleisesti) Interaktiivisuuden keinot

Luento 5. Timo Savola. 28. huhtikuuta 2006

ELM GROUP 04. Teemu Laakso Henrik Talarmo

Kuljetus- ja sovelluskerroksen tietoturvaratkaisut. Transport Layer Security (TLS) TLS:n suojaama sähköposti

Suuli api dokumentaatio

Paavo Räisänen. WampServer palvelimen asennus ja käyttö Eclipsen kanssa, sekä ensimmäinen FTP yhteys.

Erittäin nopea tapa saada kehitysympäristö php:lle pystyyn Voidaan asentaa muistitikulle

Taustaa. CGI-ohjelmointi

Tekninen rajapintakuvaus

Kanta PHR:n Sandboxympäristöt. Eeva Turkka

Järjestelmäarkkitehtuuri (TK081702)

3 Verkkopalveluarkkitehtuuri

Action Request System

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

1.3 Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

Digitaalisen median tekniikat, k2004 HY/TKTL, palvelinohjelmointi_1 21/04/2004. Harri Laine 1. Palvelinohjelmointi. Staattinen www-sivu

Ohjelmoinnin perusteet Y Python

Se mistä tilasta aloitetaan, merkitään tyhjästä tulevalla nuolella. Yllä olevassa esimerkissä aloitustila on A.

WWW-ohjelmointi ANTTI SAND TIETA12

Tietokantasovellus (4 op) - Web-sovellukset ja niiden toteutus

Kääntäjän virheilmoituksia

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

Palvelinpuolen ohjelmointi

Ohjelmoinnin perusteet, syksy 2006

ETÄTERMINAALIYHTEYS SELAIMELLA

Harjoitustyö: virtuaalikone

Digitaalisen median tekniikat. Palvelinohjelmointi Harri Laine 1

Digitaalisen median tekniikat. Palvelinohjelmointi

Harri Laine 1. Digitaalisen median tekniikat, s2007 HY/TKTL, palvelinohjelmointi_1. Palvelinohjelmointi

Contact Form 7 -lomakkeen yhdistäminen Timeline Manageriin

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

WWW-PALVELUN KÄYTTÖÖNOTTO LOUNEA OY

Ohjelmoinnin perusteet Y Python

1. Omat operaatiot 1.1

Kylänetti projektin sivustojen käyttöohjeita Dokumentin versio 2.10 Historia : 1.0, 1.2, 1.6 Tero Liljamo / Deserthouse, päivitetty 25.8.

Sukupuu -ohjelma. Ossi Väre ( ) Joni Virtanen ( )

WWW-sivut HTML-kielellä esitettyä hypertekstiaineistoa

10 Nykyaikainen WWW-arkkitehtuuri

Harjoitustyö 3: Verkkosivujen toiminnallisuus (JavaScript)

Ohjelmoin*kielet ja - paradigmat 5op. Markus Norrena

Harjoitus 2 (viikko 45)

9 Edistynyt PHP-ohjelmointi

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Mainonnanhallinta Käyttöopastus. Tekniikka. Olli Erjanti Mediareaktori

Onecapital Invoicer XML API

Ylläpitodokumentti Labra

Järjestelmän syötteet ja tulosteet Kohahdus Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

VERKKOSOVELLUSTEN OHJELMOINTI, JOHDATUS PHP:HEN

Toisessa viikkoharjoituksessa on tavoitteena tutustua JUnit:lla testaukseen Eclipse-ympäristössä.

AS C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin

3 Verkkopalveluarkkitehtuuri

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

Uuden Peda.netin käyttöönotto

Ohjelmoinnin perusteet Y Python

24h Admin V / 24h_Admin_v100.pdf 1/9

Harjoituksen aiheena on tietokantapalvelimen asentaminen ja testaaminen. Asennetaan MySQL-tietokanta. Hieman linkkejä:

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

5. HelloWorld-ohjelma 5.1

Älysopimusten kehittäminen. Sopimus suuntautunut ohjelmointi

K U U L A L A A K E R I LUOTTAMUKSELLINEN 1(6)

SQL Buddy JAMK Labranet Wiki

Written by Administrator Saturday, 28 August :51 - Last Updated Tuesday, 22 February :45

Ohjelmoinnin peruskurssien laaja oppimäärä

Trimble Feedback Mobile app ja rajapinnat Kuvaus

Julkinen. Suomen Pankin ja Finanssivalvonnan suojattu sähköposti: ulkoisen käyttäjän ohje

REST rajapintana mobiilikehityksessä

Ohjelmoinnin perusteet Y Python

Yleinen ohjeistus Windows tehtävään.

ASCII-taidetta. Intro: Python

Mainosankkuri.fi-palvelun käyttöohjeita

Julkinen. Suomen Pankin ja Finanssivalvonnan suojattu sähköposti: ulkoisen käyttäjän ohje

OPPITUNTI 3 Ensimmäinen skripti

Ilmonet ja rajapinnat Pääkaupunkiseudun kansalais- ja työväenopistojen kurssit

4. Lausekielinen ohjelmointi 4.1

Tiedonsiirto- ja rajapintastandardit

OPPITUNTI 20 Tilan tallentaminen istuntofunktioilla

MITÄ JAVASCRIPT ON?...3

kansainvälistäminen ja paikallistaminen Zopessa Plonen käännöstyö Asko Soukka, Jyväskylän yliopisto

Written by Administrator Monday, 05 September :14 - Last Updated Thursday, 23 February :36

Ohjelmoinnin perusteet Y Python

WWW-ohjelmointi ANTTI SAND TIETA12

Vaalikone.fi API Presidentinvaalit 2012

Muuttujien määrittely

2 3 LIITE 2. Index.php 1 (10) 4 5 <?php 6 7 /*! \mainpage Artikkelihallintaohjelma 8 * 9 * \section intro_sec Introduction 10 * 11 * Tämän on

Dart. Ryhmä 38. Ville Tahvanainen. Juha Häkli

Pythonin Kertaus. Cse-a1130. Tietotekniikka Sovelluksissa. Versio 0.01b

The OWL-S are not what they seem

3.1 Mitä tarkoittaan heredoc? Milloin sitä kannattaa käyttää? Kirjoita esimerkki sen käyttämisestä.

KESKUSTANUORTEN NETTISIVUT- OHJEITA PIIRIYLLÄPITÄJÄLLE 1. KIRJAUTUMINEN

EK:n palkkatiedustelun asiointipalvelu ja SFTPtiedonsiirto. Ohje

Kieliversiointityökalu Java-ohjelmistoon. Ohje

Group 2 - Dentego PTH Korvake. Peer Testing Report

TCP/IP-protokollat ja DNS

Digitaalisen median tekniikat xhtml - jatkuu

VERKKOKÄYTTÄJÄN OPAS. Tulostuslokin tallennus verkkoon. Versio 0 FIN

Transkriptio:

WWW-ohjelmointi ANTTI SAND TIETA12

Palvelinohjelmoinnin perusteet 2

HTTP -protokolla 3 Asiakas lähettää pyynnön Palvelin lähettää vastauksen Request Response protocol Yksi transaktio = yksi pyyntö + yksi vastaus Transaktiot ovat yksittäisiä, mikään ei sido kahta transaktiota toisiinsa Ne ovat tilattomia Käytännössä monissa sovelluksissa tarvitaan kuitenkin tilaa Määritetty RFC dokumenteissa https://tools.ietf.org/html/rfc2616

RFC 2616 4 Pyynnössä on Request line Request message headers Vastauksessa on Status line Response message headers Body Body on aina vapaaehtoinen Headereissa on pakollisia ja vapaaehtoisia tietoja Pyyntöä tai vastausta ei voi olla ilman headereita

Käytännön esimerkki 5 Request GET /index.php HTTP/1.1 Host: localhost [linefeed] Response HTTP/1.1 200 OK Content-Lengt: 11 Content-Type: text/html; charset=utf8 [linefeed] Hello World STATUS CODES: 200 OK 3** Redirection 4** Client error 403 Unauthorized 404 Not found 5** Server error https://en.wikipedia.org/wiki/ List_of_HTTP_status_codes

HTTP osat 6 Vastaus koostuu kolmesta osasta: Status line (HTTP/1.1 200 OK) Headers (Content-Type: text/html, Content-Length:11) Body (Hello World) Ohjelmointikielet sallivat lähettää ensin osan bodyä ja sitten vasta headereita Tuloksena virhe headers already sent Tämä sisältää tyhjätilamerkit Joko pidät huolen, että headerit lähetetään ensin, tai paketoit vastauksen Ob_start(); koodia ; ob_end_flush();

HTTP Verbit 7 Yleisimmät verbit: GET pyydetään resurssi POST luodaan resurssi PUT/PATCH päivitetään resurssia DELETE poistetaan resurssi Verkkolomakkeiden kanssa käytännössä vain GET ja POST Jos halutaan toteuttaa RESTfull suunnittelua, voidaan lisätä ylimääräinen piilokenttä lomakkeelle, joka voi tarkemmin määrittää halutun metodin

PHP ja HTTP, Superglobaalit 8 Kuinka lukea syötettä? $_SERVER sisältää kaikki headerit Method, Uri, Protocol, $_POST HTTP POST parametrit $_GET HTTP GET parametrit $_REQUEST Kuinka vastata pyyntöön? Status line ja muut headerit voidaan määrittää header() funktiolla Kaikki mitä tiedosto tulostaa siirtyy vastauksen body:yn Useimmiten vastaus-headerit voivat olla implisiittisiä. PHP tai palvelin asettaa ne automaattisesti. Voidaan asettaa, jos pyynnön vastauksena halutaan selaimen tallentavan tiedoston Vastaus ei ole html dokumentti, vaan vaikkapa JSON objekti JavaScript -sovellukselle

GET 9 Pyydetään resurssi palvelimelta Voidaan antaa parametreja osana kyselyä (query string) Index.php?nimi=antti&ika=32 Ovat osa pyynnön osoitetta Kyseiset parametrit voidaan tallentaa vaikkapa selaimen suosikkeihin Ovat näkyvissä osoiterivillä Voidaan käsitellä PHP:ssa $_GET superglobaalin kautta:

POST 10 Ei ole osa pyynnön osoitetta Tulevat useimmiten lomakkeilta Tai vaikkapa mobiilisovellukselta, CURLista, Eivät näy selaimen osoiterivillä Ei voida lisätä kirjanmerkkeihin selaimessa Voidaan käsitellä PHP:ssa $_POST superglobaalin kautta

GET vai POST 11 GET jos rivi halutaan osaksi kyselyä Tuotteet.php?tuotenumero=1111 Selaa.php?sivu=1&jarjestys=laskeva&naytaSivulla=50 Toimipaikat.php?toimipaikka=Tampere POST jos tieto on sensitiivistä tai transaktiokohtaista Kirjautumistiedot Lomakkeen tiedot Chat.php?viesti=moikka lähettäisi saman viestin jokaisella sivunlatauksella

Muuttujat 12 syötteessä Double quotes Voidaan sisällyttää muuttujia, mutta ei taulukoita \ sallii lainausmerkin osana merkkijonoa Single quotes Ei voida sisällyttää muuttujia

Tietoturvavaroitus! 13 Älä koskaan tulosta käyttäjältä tullutta syötettä sellaisenaan! Verkossa ei tule koskaan luottaa käyttäjään.

Escape user input 14 Meillä on kaksi natiivia funktiota syötteen sanitoimiseen: htmlentities() ja htmlspecial chars(). Molemmat muokkaavat tulostettavaa syötettä tehden siitä turvallisempaa. htmlspecialchars() on varmaankin se funktio, jota käytetään 90% ajasta. Se etsii syötteestä sellaisia merkkejä, joilla on syktaktista merkitystä (esim. <, >, &) ja muuntaa ne vastaaviksi HTML entiteeteiksi. htmlentities() on kuin htmlspecialchars(), mutta paljon innokkaampi. Se etsii kaikki sellaiset merkit, joilla on HTML entiteettipari. Eli esimerkiksi skandinaavisen kirjainmerkit. TIETA12-2017 - A.S.

HTTP POST 15 POST parametrit tulevat usein lomakkeilta Isset() tarkistaa onko avainta asetettu. Sellaisen avaimen arvon hakeminen, jota ei ole asetettu, aiheuttaisi virheen.

Error, Warning, Notice 16 E_ERROR E_WARNING E_PARSE E_NOTICE Fatal run-time errors. These indicate errors that can not be recovered from, such as a memory allocation problem. Execution of the script is halted. Run-time warnings (non-fatal errors). Execution of the script is not halted. Compile-time parse errors. Parse errors should only be generated by the parser. Run-time notices. Indicate that the script encountered something that could indicate an error, but could also happen in the normal course of running a script.

Kontrollilauseet 17

Kehittämisen ajaksi virheet näkyviin 18 Jos ohjelman suorittamisen aikana tulee poikkeuksia (Exception) tai varoituksia, ne on hyvä tuoda kehittäjän tietoisuuteen Poikkeus ohjelman suorituksessa palauttaa Server Error 500 virhesivun, jonka kautta virheen syytä ei voi selvittää Mutta debug tietoja ei haluta käyttäjän nähtäville, sillä niiden kautta voi löytää haavoittuvuuksia Oletuksena koulun palvelimella kaikki virheet, poikkeukset ja varoitukset kätketty Täytyy erikseen sallia ne riveillä error_reporting(e_all); ini_set('display_errors', 1);

Kontrollilauseet 19 Ternary operator: $var = (ehto)? Tosi : epätosi; If else If else ==, >=, <=,!= &&,

Kontrollilauseet 20 Reitityksen ja sivupohjien yksinkertainen esimerkki

Taulukot 21

Taulukot 22 Taulukko on useimpien kielten perustietorakenne PHP:ssa taulukko luodaan $myarray = []; tai $myarray = array(); $myarray = [ item 1, item 2, item 3, ]; $arr = array( item 1, item 2, item 3 ); PHP:ssa taulukko on myös sekä jono, että pino Array_push(), array_pop(), array_shift(), array_unshift()

Taulukko on iteroitava 23 For($i = 0, $len = count($arr); $i < $len; $i++) { echo $arr[$i]; } Foreach($arr as $item) { echo $item; }

Taulukko voi olla assosiatiivinen 24 $people[ antti ] = 32; $people[ someoneelse ] = 65; Echo $people[ antti ]; // 32 Myös $age = array("peter"=>"35", "Ben"=>"37", "Joe"=>"43"); echo "Peter is ". $age['peter']. " years old.";

Taulukot ja 25 HTML Sama lopputulos Ylempi tapa voi olla helpompi, jos tulostuslauseke tuottaa paljon HTML -merkkejä

Array keys and values 26 Esimerkissä $key ja $value ovat geneerisiä, yleensä on parempi käyttää mahdollisimman kuvaavia muuttujannimiä. Mutta tässä esimerkissä ne kuvaavat kirjaimellisesti esitettyä asiaa. TIETA12-2017 - A.S.

Taulukot sallivat käyttäjältä paljon 27 $person = [ age => 32, hair => brown ]; $person[ name ] = Antti ; //Lisätään uusi avain $person[ age ] = 33; // Muutetaan avaimen arvoa

28 Master template esimerkki 1 Jaetaan näkymä palasiin, jolloin vältytään toistolta

29

Include vai require? 30 Molemmat komennot yrittävät liittää tiedoston sisällön pyynnön kohtaan Eroavaisuus löytyy poikkeuskäytöksestä Jos tiedostoa ei voida liittää include aiheuttaa varoituksen Jos tiedostoa ei voida liittää require aiheuttaa poikkeuksen Aikanaan pidettiin hyvänä ominaisuutena jos ohjelma pyrki suoriutumaan virheistä huolimatta (vertaa JavaScript, jossa pitää erikseen mainita use strict, jos halutaan vähemmän virheistä toipumista)

31 Tila ja tilattomuus Evästeet ja istunnot

Tila ja tilattomuus 32 HTTP protokolla on tilaton Seuraava pyyntö palvelimelle ei tiedä mitään edellisestä pyynnöstä Ongelma, koska sovelluksilla yleensä on tila Verkkokauppa ostoksia on ostoskorissa Kirjautuminen ei anneta salasanaa joka sivunlatauksen yhteydessä Selain ei lähetä itse mitään yksilöivää tunnistetta

Tilan luominen 33 Lisätään tunniste jokaiseen pyyntöön? Query string parametri index.php?session=xyz123b Lomakekenttä <input type= hidden name= session value= XYZ123B > Hyvin vaikea liittää jokaiseen pyyntöön Evästeet? Yleisin tapa luoda tila Palvelin lähettää headerin Set-Cookie Selain lähettää sen takaisin headerilla Cookie Yleensä 32 merkkinen uniikki tunniste Voidaan luoda monia evästeitä per domain Voidaan asettaa automaattisesti vanhentumaan

Tila ja istunto 34 Tilan luo uniikki tunniste, joka identifioi käyttäjän istunnon Istunto yleensä sitoo dataa käyttäjän tilaan Ostoskorissa on tuotteita Käyttäjä on kirjautunut nimellä, käyttäjällä on rooli, Jos käyttäjä poistaa evästeen Istunnon data ei postu, mutta ei ole enää käyttäjän käytettävissä Istunnon poistaminen luo tarpeen poistaa myös evästeen

Selain voi luoda tilan paikallisesti 35 Selaimet tukevat nykyään localstoragea ja sessionstoragea Näihin voidaan kirjoittaa tietoa, joka on saatavilla myöhemmin samalla sivulla, mutta vain selaimen saatavilla, jollei niitä lähetetä palvelimelle osana pyyntöä Mutta ei yleinen tapa luoda tilaa selaimen ja palvelimen välille REST API:en ei tulisi luoda tilaa Jokainen pyyntö on itsenäinen transaktio joka korkeintaan lähettää autentikointitietoa palvelimelle REST API:n päälle rakennettu selainohjelma sen sijaan voi luoda itselleen tilan paikallisesti

PHP ja evästeet 36 Eväste voidaan asettaa setcookie() metodilla Setcookie($nimi, $arvo, $vanhenemisaika, $polku) Eväste voidaan lukea $_COOKIE superglobaalista Evästeitä voi olla useita, käytetään usein käyttäjän seuraamiseen ja mainontaan Evästeen sisältö on luettavissa selaimen kehitystyökalujen kautta Käyttäjä voi poistaa evästeet selaimen kautta

37

38

PHP ja istunnot 39 Istunto (session) luo tilan ja tallentaa tietoa palvelimelle Istunto aloitetaan session_start() metodilla Luo evästeen, jossa on satunnainen uniikki arvo Luo palvelimelle tiedoston jossa sess_[uniikki_id] $_SESSION superglobaalilla voidaan asettaa ja lukea istunnon arvoja $_SESSION[ avain ] = arvo ; $arvo2 = $_SESSION[ avain ]; Istunnon eväste on vain satunnainen merkkijono, istunnon data sijaitsee palvelimella

40

41

Istunnon tiedot palvelimen päässä 42 Oletuksena istunnon tiedot tallennetaan tiedostojärjestelmään Paljon trafiikkia palvelevilla sivuilla voi olla järkevää tallentaa istunnon tiedot tietokantaan tai muistissa oleviin tietorakenteisiin (redis, memcached)

Tietoturvavaroitus! 43 Jos palvelin on huonosti määritetty, hyökkääjä voi päästä lukemaan istunnon tiedot palvelimen tiedostojärjestelmästä. Jos istunnon tiedot siirtää tietokantaan, ongelma siirtyy tietokannan luotettavuuteen. Jos käyttää shared hosting -palvelua ei voi itse vaikuttaa levyjärjestelmän turvallisuuteen paljoa, mutta tietokannan turvallisuuteen saattaa voida vaikuttaa enemmän. Jos pyörittää omaa virtuaalipalvelinta, kaikki vastuu on itsellä. Avoimessa verkossa ilman SSL/TLS:ää istunnon tunniste voidaan kaapata samassa verkossa olevan toimesta ja näin päästä järjestelmään kirjautuneena käyttäjänä. Käyttäjän tulee varoa avoimia verkkoja. Ja kehittäjän tulee käyttää TLS:ää.

Ympäristön tiedot 44 Palvelin ja selain jakavat ympäristötietoja Palvelimen IP-osoite, käyttäjän IP-osoite, käyttäjän user agent, eli yleensä selain, PHP asettaa nämä kahteen superglobaaliin $_SERVER $_ENV Phpinfo() funktio tulostaa tietoja php:n asetuksista, palvelimesta, ladatuista moduuleista, ym. Tämä on vain debuggaukseen, älä vain jätä phpinfo.php nimistä tiedostoa julkisesti ladattavaksi, koska tämä avaa hyökkääjälle liian paljon tietoja.

Sessioista ja sessioiden tallentamisesta 45 tietokantaan edistyneemmille http://culttt.com/2013/02/04/how-to-save-php-sessions-to-a-database/

PHP on tulkittava kieli 46

Ohjelmakoodin elämänkaari 47 PHP pysyy siinä muodossa, missä se kirjoitettiin, kunnes se suoritetaan Sitä ei tarvitse kääntää ajettavaksi ohjelmaksi Kun ohjelma suoritetaan, se tulkitaan Zend Opcode machine-code komennoiksi, joita Zend Engine suorittaa Tulkittavat kielet ovat luonteeltaan hitaampia suorittaa Koska Facebook tarvitsi enemmän tehoa, he kehittivät ensin PHP-to-C++ - kääntäjän Käännetty C++ -ohjelma on nopea suorittaa, mutta kääntämiseen kuluva aika kasvattaa kehittäjän feedback loop aikaa Tämän korjatakseen, he kehittivät HHVM:n, joka muuntaa PHP:n tavukoodiksi, joka JIT-tulkataan x86_64 konekoodiksi

Hyödyllistä luettavaa 48 10 most common mistakes PHP programmers make https://www.toptal.com/php/10-most-common-mistakes-php-programmersmake What are PHP Lambdas and closures? http://culttt.com/2013/03/25/what-are-php-lambdas-and-closures/

Kysymyksiä? 49