Server Side Scripting
Formulieren & beveiliging
Vakopzet C 1 2 WC TOETS
3
4
5
6
7
8
9
Lessen Lesweek 1 (47) Lesweek 2 (48) Lesweek 3 (49) Lesweek 4 (50) Lesweek 5 (51)
Vakoverzicht en introductie
Doornemen Ch3 (40p)
Deeltoets 1, Doornemen Ch4+Ch5 (72p)
Doornemen Ch6+Ch7 (74p) [Ch 8]
Doornemen Ch9+Ch10 (60p)
Lesweek 6 (2) Lesweek 7 (3) 12+Ch15]
Lesweek 9 (5)
Deeltoets 2, Doornemen Ch11 (32p)
Doornemen Ch13+Ch14 (52p) [Ch
Deeltoets 3
Maandag voor 12:00 's middags inleveren
Aanbevolen
Vragen Chapter 3?
Controlestructuren
Beslissingsboom
If statements if( conditie ) {
# code } elseif ( conditie ) {
# code } else {
# code }
&& || ! > < >= <=
Formulieren
Versturen van informatie
Superglobal arrays $rijtje = array(0, 1, 1, 2, 3, 5, 8, 13, 21);
$_GET['naam']
$_POST['naam']
post/ get INFORMATIE
HTTP REQUEST HTTP RESPONSE
$_POST['naam'] $_GET['naam']
MySQL
PHP
Mongo
[...]
13
Formulieren POST-INFORMATIE
HTTP REQUEST HTTP RESPONSE
$_POST['status']
PHP
MySQL
/les2/voorbeelden/showVars.php
1. 2. 3. 4.
Geef wat HTML weer Toon recursief de inhoud van de $_GET array Geef wat HTML weer Toon recursief de inhoud van de $_POST array
git clone https://github.com/lbrt/ CMD-SSS-2013-2014.git
Kwetsbaarheden
Disclaimer De wellicht controversiële stof die deze werkgroep behandeld is enkel en alleen bedoeld ter educatie. Het doel van deze werkgroep is het verschaffen van dieper inzicht in processen die te maken hebben met computerbeveiliging welke leiden tot een betere beveiliging van door studenten op te leveren projecten. De projecten en handelingen van personen buiten deze werkgroep vallen buiten de verantwoordelijkheid van CMD.
README
Wat ik jullie leer mag niet misbruikt worden!
Hacker ethics
Kwetsbaarheden request forging
script injection (xss)
form-hijacking sql injection
Code injection 1. 2. 3. 4.
Mail-form-hijacking Request forging Script injection (XSS) SQL injection
Mail-form-hijacking
[email protected] CC:
[email protected],
[email protected],
[email protected]
/les2/oefeningen/mailFormHijacking/index.php
1. Een controle op \r\n ondervangt het probleem!
!preg_match("/[\r\n]/", $_POST['email'])
#=> true als \r\n niet voorkomt (door ! )
Request forging
Dit ziet er raar uit, eens kijken wat er allemaal ingevoerd kan worden...
/les2/oefeningen/requestForging/index.php
1. Hard opgeven welke pagina's op deze manier aangeroepen mogen worden
in_array($_GET['page'], $toegestanePagina)
#=> true als de pagina voorkomt in het rijtje
Script injection (en XSS)
Hé een formulier, eens kijken of we daar script in mogen stoppen...
/les2/oefeningen/scriptInjection/index.php
1. Vervang gevaarlijke door ongevaarlijke tekens
transform_HTML($_POST['tekst']);
#=> <script>alert('Muhahaaa');
SQL injection
Hé een formulier, eens kijken of we daar SQL in mogen stoppen...
/les2/oefeningen/sqlInjection/unsafe.php
Haal gebruikersinvoer altijd door mysql_real_escape_string( ) $safeData = mysql_real_escape_string($evilData); #=> $safeData is veilig om te gebruiken in mysql
/les2/oefeningen/sqlInjection/index.php
Beter nog: gebruik mysqli, prepared statements en parameter binding
Let op: je moet zelf nog steeds script-injecties afvangen.
Wat te onthouden? 1. Webapps zijn gebaseerd op formulieren Je kunt versturen via GET en POST GET is via de URL, POST via de header
– –
2. Toepassen van formulieren kent altijd veiligheidsrisico's –
• • • •
Code injection attacks:
Mail-form-hijacking Request-forging Script injection (XSS/Cross site scripting) SQL injection
3. NEEM BEVEILIGINGSMAATREGELEN! – Eindgebruikers zijn per definitie evil...
Versleuteling
Encryptie
Decryptie
2 weg encryptie • Scythale /ˈskɪtəliː/
abcdefghijklmnopqrstuvwxyz origineel efghijklmnopqrstuvwxyzabcd transpositie
ß public key encryptie
private key encryptie à
1 weg encryptie md5 à 7a016ff07fb4b3401504d6fb1f69185c sha1
à 8d21786de786cc2b81561bc2d3006c71f5f50baf crypt à safHByZzAFs6I
salt
/week2/encryptie/index.php
1. Alleen crypt gebruikt salt 2. Crypt is veilige(re) manier om passwords op te slaan 3. Geef nooit je salt weg...
Volgende week: toets 1 • 4 vragen: – 3 theorie vragen • Vb. Leg uit wat voor beveiligingsrisico's kleven aan het toepassen van web-formulieren.
– 1 programmeervraag • Vb. Bekijk het volgende stuk code en geef de HTML output die deze code genereert. Hulpmiddelen: boek PHP Solutions (papier of op ereader; geen gebruik van computer tijdens toets!)
Huiswerk
Doornemen Ch4+Ch5 (72p) 4: Lightening Your Workload with Includes 5: Bringing Forms to Life
Bronnen •
Diagramstijl: Nassi-Shneiderman Diagram (NSD)