Sikkerhet i PHP gjort lettere

juli 25th, 2010 by David Steinsland View Comments »

Når du utvikler en nettside, enten det er en applikasjon, rammeverk, bibliotek — hva som helst — er det desidert viktigste sikkerhet. Likevel er det mange som tar snarveier, og slurver seg unna. Om du vil unngå å stå med skjegget i postkassen den dagen du blir angrepet via XSS, CSRF eller SQL injections bør du følge med nå.

Hvorfor?

Du skal aldri stole på brukerne dine. Selv om det er familien eller vennene dine. Årsaken er at enkelte personer kan utnytte sårbarhetene i systemet ditt, som kan resultere i at sensitiv informasjon blir samlet, slettet eller endret. Det kan resultere i at noen tar fysisk kontroll over nettsiden din.

Hva kan man gjøre?

Ved å følge prinsippet ovenfor, må du sørge for å validere all data du skal hente inn fra brukerne. Du bør også sanitere data.

Validering: sjekke om data er av riktig type, for eksempel en ordentlig E-postadresse eller postnummer.
Sanitering: manipulasjon av data, som for eksempel å fjerne enkelte tegn/bokstaver/tall og så videre.

I PHP får vi tilgang til brukerdata via super-globalene $_GET, $_POST, $_COOKIE, $_SERVER og $_SESSION.

Her kan brukere bokstavelig talt skrive hva de vil, og det kan betyr store følger om du ikke sjekker dataene ordentlig.

Løsningen

Jeg har skrevet et bibliotek i PHP kalt “PHP Security Wrapper“. Dette biblioteket tar seg av brukerdata fra GET, POST, SERVER og COOKIE, samtidig som du får muligheten til både å validere og sanitere dem.

Biblioteket er selvfølgelig gratis, og oppdateres hyppig. Om du ønsker å lære mer om dette biblioteket kan du lese forumtråden jeg postet på Norsk Webforum, sjekke ut nettsiden og lese dokumentasjonen.

Det er ikke meningen at dette blogginnlegget skulle ta for seg hvordan du kan sikre deg mot angrep, men om du ønsker å lese videre på emnet kan du sjekke ut følgende linker:

FIFA World Cup 2010: Vinneren blir …

juni 14th, 2010 by David Steinsland View Comments »

Tyskland.

Hvem tipper du på?

Privatisteksamen i Informasjonsteknologi 1 (IT-1)

mai 5th, 2010 by David Steinsland View Comments »

Jeg har nylig vært i Bergen og fullført min privatisteksamen i Informasjonsteknologi 1, og ønsker å dele mine erfaringer med både faget og eksamen.

Bakgrunn for valget

I januar meldte jeg meg opp som privatist i faget Informasjonsteknologi 1. Dette gjorde jeg for å kunne ta IT-2 i tredjeklasse, og således slippe å velge Fysikk 2 eller Kjemi 2.

Siden jeg i år har fire programfag (3 realfag, 1 økonomifag) i tillegg til IT-1 som privatist, har jeg 38 timer i uken. Dette gjør at jeg slipper ett programfag i tredjeklasse, og trenger derfor kun å ha 2 programfag. Disse er nødt til å være fortsettende realfag. Det vil si at jeg har hatt fagene i andreklasse. Siden jeg ikke ønsket å gå videre med verken Fysikk 2 eller Kjemi 2, såg jeg en løsning som var å ta IT-1 og IT-2 som privatist. Det andre faget jeg fortsetter med er Matematikk.

Derfor vil jeg kun ha 20 timer totalt per uke i tredjeklasse (15 timer fellesfag, 5 timer matematikk), siden jeg ikke tar IT-2 på skolen.

Faget

Informasjonsteknologi-1 bygger på vår digitale verden, og tar opp emner som den digitale hverdagen, multimedier (film, lyd, bilde), Internett og databaser. Generelt sett vil faget være aktuelt for de som har en interesse om IT fra før, men også for de som ønsker å lære mer om det.

Faget er delt inn i tre kapittel: Digital samtid, Nettsteder og multimedier og Databaser.

Her vil du få en forståelse av hvordan digitalt utstyr fungerer, kommuniserer, er bygget opp; etiske regler og problemstillinger innen IT; hvordan Internettet er satt sammen, hvordan Internettsider er bygget opp og hva databaser er og hvordan de er bygget opp (for å nevne noe).

Læreboken heter IT-1, basisbok og fungerer som teoriboken for faget. Det er også flere tilleggsbøker til faget (Snarveien til …).

Programmer/hjelpemiddel

Digitale hjelpemidler er aktuelt i ethvert fag, enten det er matematikk eller norsk. Men hvilket fag er mer åpen for slike hjelpemidler enn Informasjonsteknologi?

Som privatist har jeg benyttet følgende programmer  mens jeg har lest til eksamen:

Det kan også være lurt å bruke et program for å sette opp nettsider (jeg benyttet meg av Notepad++):

Ressurser

Eksamen

Jeg hadde eksamen ved Bergen Handelsgymnasium 16:15. På forhånd hadde jeg mailet med Eksamenskontoret i fylket og fått dem til å endre på rekkefølgen slik jeg var førstemann. Jeg hadde faktisk benyttet meg av Google Street View til å identifisere den da ukjente bygningen, slik at jeg ved et Bergensbesøk for en knapp måned siden gjenkjente bygningen ved en tilfeldighet.

Da eksaminator og sensor møtte opp, var det et kjapt opprop av de påmeldte for å se hvem som hadde møtt opp. Etterpå ble jeg spurt om å si et tall, 1 eller 2. Jeg valgte 1 som symboliserte oppgavesett nummer én. Før forberedelsesleden min fikk jeg lov til å ta et kjapt overblikk på oppgavene, for å se om det var noe som virket helt gresk for meg. Det gjorde det ikke.

Jeg gikk så inn i eget rom og fikk 30 minutter til å lese gjennom, forstå, og utføre oppgavene jeg hadde valgt. Totalt var det tre oppgaver, som representerte hvert sitt kompetanseområde.

Første oppgave handlet om Internett, hvor jeg skulle presentere starten til det vi kjenner Internett, hva som muliggjør Internett (maskinvare, teknologi, standarder) og hva muligheter Internett gir.

Andre oppgave handlet om en uerfaren webdesigner som hadde “sendt meg” en HTML-kode som jeg måtte rydde opp i. Her skulle jeg altså påpeke feil i koden, foreslå endringer samt forklare hva CSS er.

Tredje — og siste oppgave — handlet om databaser, og jeg skulle tegne opp en modell for en bedrift. Her var det snakk om en bedrift som ønsket en kvalitetsikret modell over ordrer som kunder plasserte, hvilke varer som var tilgjengelige til enhver tid og så videre. Modellen skulle tilfredsstille tredje normalform (ergo alle normalformene).

Da jeg ble kalt inn til fremføring, begynte jeg fra toppen og snakket meg nedover. Totalt sett hadde jeg 30 minutter til rådighet, hvor sensor og eksaminator kunne komme med spørsmål underveis.

Databasemodellen min tegnet jeg på papir, som jeg viste frem til de to herrene som skulle vurdere meg.

Hele fremføringen (med spørsmål) tok ca. 20 minutter, da de stilte kun ett spørsmål («Hva er forskjellen på IP-telefoni og Skype?»).

Sensoren kom med en sarkastisk kommentar på slutten, og sa jeg burde snakket litt mindre slik at de kunne stille noen spørsmål. Deretter sa han at jeg hadde fortjent karakteren 6, uten tvil.

Da er altså årets første Eksamen unnagjort!

Wamp: Sette opp egen hjemmeserver

april 26th, 2010 by David Steinsland View Comments »

Tidligere har jeg beskrevet hvordan du kan installere ffmpeg på Wamp, samt hvordan du kan opprette underdomener på Wampserver. Nå tenkte jeg å forklare hvordan du kan sette opp en liten hjemmeserver som du få tilgang til gjennom Internett.

Hva er en hjemmeserver?

Kort sagt er det et Webhotell du har på din egen PC. Du styrer alt av underdomener (forklart i egen artikkel), PHP-, Apache- og MySQL-innstillinger med mer. Veldig fleksibel løsning til utvikling, da du kan invitere andre utenfor nettverket ditt til f. eks. å teste systemet.

For å koble deg på hjemmeserveren, stilles det to krav:

  • WampServer må kjøres, og satt i Online-modus
  • Port 80 må være åpen, det vil si at du har viderekoblet denne i ruteren din til PC-ens IP-adresse.

NB: Du vil ikke bli tildelt et domenenavn (som «minside.com») da dette blir styrt av en DNS, som ofte koster penger.

Hva trenger vi?

Normalt bruker Internett port 80 til å sende og motta informasjon, men noen ISP-er har denne porten blokkert slik du ikke kan sette opp en hjemmeserver. Slapp av — det er mulig å jobbe seg rundt.

Om det skulle vise seg at porten er blokkert, må du konfigurere Apache til å følge med på (eng. «listen») en annen port. Velg gjerne 8080.

Videre i denne guiden tar jeg som utgangspunkt at du kan bruke port 80 uten problem (dette gjelder de aller, aller fleste).

Let’s get to it!

I mitt internnettverk har PC-en min (som serveren er installert på) en fast IP-adresse, 192.168.0.197. Ruteren min er en Linksys WRT54GL (som jeg for øvrig anbefaler på det sterkeste). Jeg tar ikke opp emnet om å videreføre porter i denne guide, da alle har hver sin ruter og oppsettet varierer derfor. Men ved å følge Port Forward sin enkle guide, blir det en lek å åpne porten. Sørg bare for at PC-en din er stilt inn med en statisk IP!

Når du har sørget for at porten din er åpen, vel — da er du i bunn og grunn ferdig. Om du er i tvil om du har åpnet porten skikkelig, så kan du ta deg en tur innom CanYouSeeMe og skriver inn 80 som portnummer. Du er nødt til å ha Wamp kjørende for at den skal klare å sjekke det. Om du får opp en feilmelding, er det fordi:

  • Du har gjort en feil da du åpnet porten din. Har du skrevet inn riktig IP-adresse, og haket av for “Enable” ?
  • ISP-en (Internett-tilbyderen) din blokkerer port 80, og du må derfor velge en annen port

Jeg vil råde deg til å passordbeskytte både phpMyAdmin og index.php i www-mappen. På denne måten har du kontroll over at ingen uvedkommende skal ødelegge prosjektene dine.

For å sjekke om du virkelig kan koble deg til serveren din, går du innom WhatIsMyIP og finner ut hvilken IP-adresse du har på Internett. Kopier denne inn i adressefeltet i nettleseren din, og se resultatet!

IP-en peker egentlig til ruteren din (det ytterste elementet i nettverket ditt), men ruteren vil registrere at du kommer fra Internett (port 80), og retter denne forespørselen videre til en PC på lokalnettet. Dette gjelder selvsagt kun dersom du har konfigurert ruteren din slik jeg har beskrevet.

Jeg kan skissere prosessen slik:

Om du føler det blir vanskelig å huske IP-adressen din hver gang du skal innom serveren din, kan du alltids registrere deg hos en gratis DNS-tilbyder.

Håper du fikk nytte av denne guiden! Kom gjerne med tilbakemeldinger i kommentarfeltet.

Knust skjermen på mobilen, uten å ha kontaktene på SIM-kortet?

april 15th, 2010 by David Steinsland View Comments »

Det er nå en god måned siden jeg knuste skjermen på mobilen min. Da jeg nylig orket å anskaffe meg en ny en, slår det meg: oisann, jeg har jo alle kontaktene mine på den gamle telefonen!

Jeg prøvde da først og hente ut kontaktene via Sony Ericssons PC Suite-program, ved å koble den gamle mobilen til PC-en. Programmet hentet riktignok kontaktene mine ut fra telefonen, men nektet å legge de innpå SIM-kortet mitt.

Siden den nye telefonen ikke støttet PC-suite, kunne jeg heller ikke synkronisere denne telefonen med kontaktlisten jeg hentet ut tidligere.

Hva skulle jeg gjøre?

Det første som slo meg var: jeg bør Google etter skjermbilder fra gamle-telefonen, slik at jeg kan prøve å klikke meg innpå den i blinde og få kopiert kontaktene til SIM-kortet. Dette fungerte svært dårlig. Det var ingenting å finne!

Men jeg skal ikke si Google-søket var forgjeves. Jeg fant nemlig frem til et program som heter MyPhoneExplorer, hvor det var mulighet for å hente kontakter ut fra SIM-kort. Planen min var å synkronisere telefonlisten (som jeg hadde hentet ut tidligere) med SIM-listen. Dette gikk heller ikke så bra, da du ikke kunne “flytte” kontakter imellom de ulike lagringsplassene.

Rett før jeg gav opp, fant jeg en knapp i programmet som het Load Screenshot. Med denne knappen kunne jeg altså ta skjermdump av telefonskjermen (selv om skjermen var knust). Ved å gjøre dette fikk jeg da opp alle de ulike menyvalgene, og kunne klikke meg frem med programmets eget telefontastatur. Genialt!

Det tok meg ikke lang tid før jeg fikk opp kontaktlisten med valget: “Kopier til SIM”. For hvert menyvalg jeg tok, måtte jeg trykke på “Load Screenshot”-knappen for å oppdatere skjermbildet. Etter 2 minutter, så var alt fiks-ferdig.

Dette programmet vil jeg således anbefale til absolutt alle (med en Sony Ericsson-telefon) som er i — eller kommer til å — være i samme situasjon som meg.

Programmet kan du forresten laste ned gratisprodusentens egne nettsider.