Noorte turvalisus digitaalses meediaruumis

Selle aasta kevadel on Tallinna Tehnikaülikooli magistriõppes õpetatava aine “Sotsiaalne tarkvara ja võrgukogukonnad” käigus koostatud rühmatöö tulemusena valminud ülevaade noorte turvalisusest digitaalses meediaruumis. Analüüsitakse noorte tegevusi võrgus, võrgu ja reaalse maailma omavahelist seotust. Samuti uuritakse põgusalt reaalse ja virtuaalse maailma identiteetide erinevusi. Vaadeldakse digitaalse maailma ohtusid ning seda, kuidas end ohtude eest kaitsta. Töö viimases osas tuuakse välja põlvkondadevahelisest erinevusest tingitud muutunud turvalisuse käsitluse.

Rühmatöö autorid on Eve Agur, Melvin Alliksaar, Kaia Kulla, Alar Mägi ja Ivari Horm.

Sisukaart

Kõik varem erinevate risk.ee lehtede all olevad õppematerjalid on nüüd siia kokku koondatud. Siinne study.risk.ee leht sisaldab nüüdseks nii vana Plone-portaali materjale, artikleid kunagi loodud it.risk.ee lehelt ning varasemast study2.risk.ee saidilt. Viimane on vaikimisi ka siia ümber suunatud.

Selle lehe ülaosast leiate valdkonnad, mille alla kogu ülejäänud info jagatud on:

Sõltuvalt entusiasmist püüan vahel üht ja teist siia juurde lisada või uuendada.

Mootorivahetus

Senini oli Study lehte serveerinud Plone sisuhaldustarkvara. Paraku puudub sellel programmil haldaja, kes FreeBSD operatsioonisüsteemi jaoks tarkvarauuendusi väljastaks, mistõttu viimane Plone versioon FreeBSD-le on eelajalooline ning mitmedki turvauuendused puuduvad siiani.
Lisaks on Plone kirjutatud Pythoni programmeerimiskeeles, mis minule kui seda keelt mittetundavale inimesele teeb süsteemimuudatuste tegemise ja lehe kohandamise keeruliseks. Samuti vajas Plone oma tööks Zope tarkvara, mis kippus aeglaseks jääma ning lehekülgede kuvamine oli koormav nii külastajale kui serverile.
Kõike eelnevat arvestades sai kogu leht ringi kolitud WordPressi tarkvarale. WordPressi uuendamine toimub aktiivselt, samuti on see kirjutatud PHP keeles, mille muutmine minule oluliselt mugavam ja lihtsam on.
Ümber on tõstetud kogu sisu, säilitades nii palju kui vähegi võimalik vana lehekülje struktuuri ja kujundust. Igale lehele on lisatud ka seal olnud failid, kuid failide laadimise lingid on WordPressi ja Plone erineva ülesehituse tõttu muutunud ning kõik vanad otselingid konkreetsetele failidele paraku enam ei tööta. Ei pea seda väga suureks kaotuseks sest tegelikult oleks siiski korrektne viidata sisuleheküljele, mitte otse PDF-failidele.
Samuti on siia lehele kokku tõstetud vahepeal http://it.risk.ee all olnud sisu ning see domeen on ka kustutatud.
Olen teadlik, et paljud materjalid on lehel vananenud, kuid kahjuks pole leidnud ei aega ega ka motivatsiooni nende uuendamiseks. Sellegipoolest jätsin kogu info endisel kujul alles, et muudelt lehtedelt tulevad viited katki ei läheks. Ehk ka uuendused kunagi saabuvad.

Kodune ülesanne

Proovige lahedada ülesanne kiirenduse valemis puuduvate väärtuste leidmise kohta:

http://study.risk.ee/prog/ylesanded/kiirendus/

Ülesande teeb keerulisemaks see, et lubatakse sisestada kolm muutujat neljast: a, v, v0 või t ning puuduv tuleb välja arvutada. Muutujad sisestatakse jällegi aadressiribalt.
Ilmselt koosneb kogu PHP kood sektsioonidest, millest igaüks tegeleb ühe konkreetse variandi väljaarvutamisega. Kõigi juhtude jaoks tuleb koostada vastavad valemid, mida koodis kasutada (ehk siis avaldada kiirenduse valemist parasjagu tundmatuna esinev komponent).
Kui muutujat ei ole aadressiribal olemas, siis tuleks käivitada see osa koodist, mis tegeleks just antud juhule vastava võrrandi lahendamisega. Lisaks tuleks enne lahendamist kontrollida, kas kõik ülejäänud muutujad on ikkagi sisestatud või mitte ning on numbrilisel kujul. Numbrilise kuju kontrollimiseks saab kasutada funktsiooni is_numeric(). Viimane väljastab TRUE, kui muutuja on numbriline, vastasel korral FALSE. Manuaalist leiab selle funktsiooni kirjelduse peatükist Variable handling -> Variable handling Functions:

http://ee.php.net/manual/en/ref.var.php

Viimase valikuna tuleks kontrollida, kas kõik neli parameetrit on sisestatud. Kui on, siis tuleb nad asendada algvalemisse ning kontrollida võrduse kehtimist ja väljastada vastav teade tulemuse kohta. Ka siis tuleb kontrollida, et andmed oleksid numbrilisel kujul, sest kõik eelnevad kontrollid olid varasemate if-lausete sees ning seetõttu pole neid täidetud, sest ükski if-lauses olev tingimus pole realiseerunud.
Ülevaatlikult võiks skript välja näha nii:

if(!isset($a)) {
	if(is_numeric($t)&&is_numeric($v0)&&is_numeric($v)) {
		//Arvutada välja a väärtus
		print "Kiirendus a=$a";
	}
	else {
		print "Arvutada pole võimalik, lähteandmed on ebakorrektsed";
	}
	return;
}
if(!isset($t)) {
	if(is_numeric() .... ) {
		//Arvutada välja t väärtus
		print "Aeg t=$t";
	}
	else {
		print "Arvutda pole võimalik, lähteandmed on ebakorrektsed";
	}
	return;
}
if (!isset($v)) {
	//Kontrollida teisi parameetreid ning arvutada välja v väärtus
	return;
}
if (!isset($v0)) {
	//Kontrollida teisi parameetreid ning arvutada välja v0 väärtus
	return;
}
//Kõik argumendid on sisestatud, kontrollime võrduse õigsust
if(is_numeric($a) .... ) {
	//Kontrollime ja teatame tulemuse
}
else {
	print "Arvutada pole võimalik, lähteandmed on ebakorrektsed";
}

Kasutage korrektseid muutujaid (ma võtsin lühiduse huvides suvalised) ning samuti tuleb if-lausete tingimused lõpuni kirjutada ning kommentaarides märgitud arvutused ja väljastamised teha!
Jälgige koodi korrektset kirjutust (taandeid, loogeliste sulgude asukohta jms.)!
Mõelge välja, kuidas oleks veateadet mõistlikum näidata. Ei ole hea idee kirjutada lähtekoodis ühte ja sama teksti korduvalt.

Tunniülesanne 2: daatumi väljastamine

Tekitada PHP skript, mis käivitamisel näitaks ekraanil käseolva hetke kuupäeva ning kellaaega.
Kuupäev ja kellaaeg peavad olema kujul:

19. veebruar 2010 15:30:14

Kuupäeva ja kellaaja kuvamiseks on PHP-s olemas funktsioon nimega date(). Selle kasutamise kohta tuleb lugeda manuaalist jaotisest Date and Time Related Extensions -> Date/Time Functions.

http://www.php.net/manual/en/refs.calendar.php

Manuaalis on ära kirjeldatud tabelina tähised, millega saab juhtida date()-funktsiooni tööd ja paluda tal väljastada sobivad andmed (kuupäev, kuu, minutid, sekundid jne).
Proovige ülesanne lahendada nii, et kasutate ainult ühte print-käsku ja seote tekstid omavahel kokku, kasutades operaatorit . (punkt):

  1. Kuupäeva osas tuleks funktsiooni date() käivitada iga osa (kuupäev, kuu ja aasta) jaoks eraldi ning ühendada need tekstid omavahel. Alguses võiks kuu nimetuse väljastada numbrilisel kujul, et pärast saaks selle teisendada eestikeelseks kuu nimetuseks.
  2. Kellaaja võiks kokku kirjutada ühte date()-funktsiooni, mitte nii, et tunnid, minutid ja sekundid on kõik eraldi date()-väljakutsed.
  3. Kui kuupäev ja kellaaeg on saadud kujule “19. 2 2010 15:30:14”, tuleks enne kuupäeva trükkimist tekitada massiiv kuude eestikeelsete nimetustega ning seejärel asendada print-käsus kuu väljastamine massiivi vastava elemendi väljatrükkimisega. Ärge unustage, et kuude numbrid hakkavad ühest, aga massiivis algab kuude kui elementide loetelu nullist!

Näide, kuidas tulemus koodis välja nägema hakata võiks:

$kuud = array("jaanuar","veebruar","märts","aprill","mai","juuni","juuli",....);
print date("__").". ".$kuud[date(__)]." ".date(__) ....;

Pöörake tähelepanu print-käsus punktide ja jutumärkide kasutamisele ning püüdke nende kasutamise loogikast aru saada.
Kood ise ei ole lõplik, seda tuleb täiendada ning date()-funktsioonides olevad lüngad ära täita ja kuude massiivist andmete kättesaamine korda teha (praegu väljastatakse vigane tulemus).

Tunniülesanne: ruutvõrrand

Luua PHP skript, mis aadressiribale sisestatud väärtuste a, b ja c alusel arvutaks välja ruutvõrrandi ax2+bx+c=0 lahendid x1 ja x2
Ülesande lahendamisel tuleb kindlasti kontrollida, et kordaja a ei oleks null ning kordaja b ja vabaliige c oleksid ikkagi sisestatud. Kui need tingimused pole täidetud, peab skript oma töö katkestama ja väljastama veateate.
Lisaks tuleb kontrollida ka seda, et diskriminant D ei oleks negatiivne. Kui see aga nii on, tuleb väljastada teade, et ruutvõrrandil puuduvad lahendid ning skripti töö tuleb katkestada.
Kui aga D on võrdne nulliga, tuleb väljastada ainult üks lahend ning juurde märkida, et ruutvõrrandi lahendid kattuvad.
Proovige ülesanne tekitada selliselt, et ühtegi arvutust poleks vaja mitu korda teostada. Näiteks võiks lahendusjärjekord välja näha nii:

  1. Kontrollime a vastavust tingimustele. Kui tingimus pole täidetud, katkestame töö.
  2. Kontrollime b vastavust tingimustele. Kui tingimus pole täidetud, katkestame töö.
  3. Kontrollime c vastavust tingimustele. Kui tingimus pole täidetud, katkestame töö.
  4. Arvutame välja diskriminandi D väärtuse.
  5. Kui D<0, väljastame teate, et lahendid puuduvad ja katksestame skripti töö.
  6. Leiame ruutjuure D väärtusest. Lihtsuse mõttes võib tulemuse uuesti muutujasse D tagasi salvestada.
  7. Arvutame välja ühe ruutvõrrandi lahendi.
  8. Kontrollime, kas D võrdub nulliga (ruutjuur nullist on null, seega juurimine kontrolli ei sega). Kui D=0, siis trükime eelmises punktis arvutatud lahendi välja koos teatega, et ruutvõrrandi lahendid kattuvad ning lõpetame skripti töö (kuna lahendid kattuvad, siis pole mõtet teist lahendit arvutada).
  9. Kui oleme skripti täitmisega siia punkti jõudnud, siis järelikult D!=0, mis tähendab, et võrrandil on kaks lahendit. Üks neist oli arvutatud välja juba punktis 7. Arvutame nüüd välja ka teise lahendi.
  10. Trükime mõlemad lahendid ekraanile.

Ülesande tekst asub http://study.risk.ee/prog/ylesanded/ruutvorrand/

Kodune ülesanne

Muuta malelaua ülesandes tekkinud PHP koodi selliselt, et tsüklitesse märgitud loodavate ridade ja veergude arvu saaks määrata aadressiribalt, näiteks:
http://www.example.com/malelaud.php?ridu=10&veerge=10.

Vigane malelaud

Paarituarvuliste veergude korral töötab skript vigaselt:
http://www.example.com/malelaud.php?ridu=10&veerge=11.
Tekitatakse kõrval asuv tabel, kus iga rida algab ühe ja sama värvi ruuduga.
Mismoodi seda parandada saaks?

Muutujad aadressiribal

PHP skripti on võimalik juhtida otse aadressiribalt. Selleks tuleb veebiaadressi lõppu kirjutada märk “?” ning lisada muutujate-väärtuste paarid, mille vahele pannakse ampersand “&“:
http://www.example.com/myscript.php?a=5&b=3
Praegusel juhul käivitatakse serveris www.example.com skriptifail myscript.php ning skriptile antakse kaasa kaks parameetrit a ja b vastavate väärtustega 5 ja 3.

Muutujate kasutamine skriptis

Aadressiribalt sisestatud muutujad asuvad massiivis $_GET. Massiivide kohta lugege eelmist postitust. Tegemist on assotsiatiivse massiiviga, kus muutuja nimi on massiivi võtmeks. Seega antud juhul tekib massiivi $_GET kaks elementi $_GET[“a”] ja $_GET[“b”]. Esimese elemendi väärtus on 5, teise elemendi väärtus on 3.
print $_GET["a"];
print "<br />";
print $_GET["b"];

Ülesanne

Eelmises koduses ülesandes sai tekitatud PHP skript, mis trükib välja muutuja a väärtuse sõnalisel kujul või teate, et skript ei oska a väärtust sõnastada. Muudame skripti koodi selliselt, et vaadeldav muutuja ei asu mitte skriptifailis endas, vaid kontrollitakse aadressiribalt sisestatud muutuja arv väärtust:

if($_GET["arv"]==0)
	print "a on null<br />";
if($_GET["arv"]==1)
	print "a on üks<br />";
if( ($_GET["arv"]!=0) && ($_GET["arv"]!=1) )
	print "ma ei tea mis a on<br />";

Sellise skripti käivitamine võib toimuda näiteks järgnevalt:
http://www.example.com/skript.php?arv=1
http://www.example.com/skript.php?arv=10

phpinfo()

PHP skripti käivituskeskkonnas eksisteerivate muutujate vaatlemiseks võib tekitada eraldi faili, mis sisaldab koodi:

phpinfo();

Faili käivitamisel ning aadressiribale muutujate kirjutamisel vaadelge kuvatava infolehe lõpuosas olevat sektsiooni PHP variables, mis sisaldab tekkinud muutujate nimetusi ja väärtusi. Kõik muutujad on kasutatavad lehel näidatavate nimedega (kuid koodis peab nende ette olema kirjutatud dollarimärk).
Lisaks aadressiriba muutujatele sisaldub seal infot ka veebiserveri, käivitatava faili, faili asukoha domeeninime ja serveri ning kliendi IP aadresside kohta.

Massiivid ja tsüklid

Veel üks tsükliülesanne

Meenutage korrutustabeli loomiseks vajalikku programmikoodi ning proovige luua malelaud: 8×8 ruudustik, mille ruudud on vaheldumisi värvitud mustaks ja valgeks.
Ruudustiku loomine on algselt sarnane korrutustabeliga. Sellegipoolest tekitage 8×8 tabel uuesti, nullist, mitte copy-paste meetodil eelmisest ülesandest. Soovi korral asendage for-tsüklid näiteks while või do-while tsüklitega. Programmikoodi uuesti läbikirjutamine aitab seda kinnistada ning samas sunnib algoritmi uuesti läbi mõtlema.

Vahelduva taustavärviga ruutude tekitamiseks võikas kasutada näiteks eraldi muutujat $color, mille väärtuseks kirjutatakse värv, milline peaks ruut olema (antud juhul siis black või white). Seda sõna saab kasutada HTML-i parameetri bgcolor väärtusena:
print "<td bgcolor=$bgcolor height=50 width=50></td>";

Vahelduva taustavärviga ruutude tekitamiseks tuleb vaadelda $color väärtust käesoleval hetkel ning vastavalt sellele salvestada muutujasse uus värvuse nimetus. Ehk, kui praegu on $color väärtuseks white, siis tuleb määrata uueks väärtuseks black ja vastupidi:

if($color=="white")
	$color="black";
else
	$color="white";

Vahelduma peavad lahtrite värvused, seetõttu peab värvi vahetama iga lahtri loomise järel. Samuti tuleb jälgida, et uut rida alustataks õige värviga.

Muutujatüübid

PHP-s on kasutusel erinevad tüüpi muutujad. Tutvuge kasutatavate andmetüüpidega manuaalist

http://www.php.net/manual/en/language.types.php

Ülevaatlik tabel muutujate kohta on siin:

Muutujatüüp Nimetus Väärtused
Boolean Tõeväärtustüüp Võimalikud väärtused on true ja false
Integer Täisarvutüüp Võimalikud väärtused on täisarvude hulgast
Float Ujukomatüüp Sisaldab reaalarvulisi väärtusi
String Tekstitüüp Tekstandmete hoidmiseks. Tekstitüüpi andmed kirjutatakse jutumärkide vahele!
Massiiv Array Mitut andmeelementi sisaldav muutuja

Massiivid on muutujad, mis sisaldavad mitut andmeelementi. Elemente võib massiivi salvestada lihtsalt järjekorranumbri alusel:

$arr=array("esmaspäev","teisipäev","kolmapäev","neljapäev","reede");

Sellisel juhul on võimalik massiivi elemendi poole pöörduda järjekorranumbri alusel. Massiivi elementide järjekorranumbrid algavad nullist!

//Trükime välja kolmanda elemendi "kolmapäev" väärtuse:
print $arr[2];

Selliseid massiive nimetatakse mitteassotsiatiivseteks massiivideks. Assotsiatiivsete massiivide korral kasutatakse massiivi elementide salvestamisel võtmesõnu, mis viitavad konkreetsele elemendile massiivis.

$assoc["esmasp"]="esmaspäev";
$assoc["teisip"]="teisipäev";
$assoc["kolmap"]="kolmapäev";
$assoc["neljap"]="neljapäev";
$assoc["reede"]="reede";

Sellise massiivi elementide poole saab pöörduda elemendi nimetuste kaudu:

//Trükime välja kolmanda elemendi "kolmapäev" väärtuse:
print $assoc["kolmap"];

Assotsiatiivse massiivi elementide nimetusi nimetatakse võtmeteks (key), nendele vastavad aga elementide väärtused (value):

$assoc[key] = value;

Tunniülesanne: korrutustabel

Järgnev ülesanne sai täna läbi tehtud. Infoks neile, kes kohale tulla ei saanud või varem ära minema pidid.
On antud järgmine lähtefail:

<?php
print "<table border='1'>";
print "<tr><td>LAHTER</td></tr>";
print "</table>";
?>

Tekitada selle faili põhjal korrutustabel:

  1. Lisada koodi for-tsükkel, mis tekitab 10 tabeli rida;
  2. Tekitada tsükli sisse omakorda uus for-tsükkel, mis tekitab igasse tabeli ritta 10 lahtrit;
  3. Trükkida igasse tabeli lahtrisse välja tsüklite loendurite (s.t. rea ja veeru järjekorranumbri) väärtused;
  4. Lisada rea ja veeru järjekorranumbri korrutustehe ning väljastada see lahtris;
  5. Vajadusel korrigeerida tsüklite loendureid nii, et korrutustabeli esimese lahtris oleks tehe “1×1” ning viimases “10×10”;
  6. Tulemus peaks olema midagi sellist nagu kõrval näha on.