... Skrevet af Daniel Pedersen 1
Introduktion Sikkerheden i dag skal være i top, der er rigtig mange små hurtige og nemme metoder til at få adgang til ens hjemmeside. Mange er ikke ældre end 14 år, og har kun lige fundet et par SQL koder på internettet. Dette vil naturligvis få mange til at blive bange for at have en hjemmeside på internettet, men det er heldigvis så dejligt at, det er nemt at lukke af for sikkerhedshullerne. I denne guide vil jeg snakke om SQL Injection og PHP sikkerhed. Du vil lære hvordan man lukker af for kendte sikkerhedshuller og SQL Injection, jeg benytter sproget PHP til at kode i, men koder du i asp, jsp eller andet sprog, kan du også benytte den guide, dog hedder de funktioner du skal benytte noget andet. Jeg vil ikke vise hvordan man hacker, cracker eller SQL Injecter, men jeg vil snakke om hvordan man lukker af for hullerne. 2
SQL Injection SQL Injection er det mest udbredte, rigtig mange kender det, og rigtig mange benytter det. Det er en metode man kan udnytte ved at være god til sproget SQL, så man kan få oplysninger om ofrets hjemmeside database. Disse oplysninger kunne f.eks. være login til administrator eller det kunne være en person som bare ville prøve at få lidt ekstra information. SQL Injection er med andre ord at man tvinger den dynamiske kode man har udviklet sit website med, til at udføre mere SQL kode. Dette kunne f.eks. se sådan ud i PHP. Denne sql forspørgsel er ikke sikret imod SQL Injection. Her er det faktisk muligt at tvinde udskrift om andre tabeller fra ens database. Problemet her denne sektion. (marketet med orange) Get metoden er URL variabler, dog kan POST metoden også udnyttes, men det er samme måde man lukker af for dem, så derfor snakker jeg kun om GET metoden. Selve inputtet der kommer fra URL variabel article_id er ikke testet, det vil også sige at, den besøgende på hjemmesiden kan skrive hvad som helst i den variabel. Det kunne være SQL kode, som SQL Injection er. I dette tilfælde ved vi at article_id skal være et tal, så det ville være mest naturligt at tjekke om det rent faktisk er et tal der står i article_id. For at teste og være sikker på at det er et tal, skal du benytte funktionen is_numeric(). Læs denne side på php.net for at lærer alt om funktionen is_numeric(). http://dk2.php.net/manual/en/function.is-numeric.php Men.. Det er mere endnu. I det sidste tilfælge var det et tal der skulle være i vores URL variabel, men hvad nu hvis det skal være tekst. I dette tilfælde kan vi ikke benytte funktionen is_numeric(), der skal vi bruge noget lidt andet. Læs videre på næste side om SQL injections. 3
SQL Injection Som jeg snakkede om på forrige side, er der mere end lige tal der skal beskyttes. Det næste skridt er at misbruge login formularer, tekst input via URL linie osv. Alle disse og der er flere, men det nemme er at, du kan lukke sikkerhedshullerne med samme funktion. Så derfor har jeg kun nævnt et par stykker. Denne SQL sætning modtager nen URL variabel, som indeholder tekst. Her kan vi ikke benytte funktionen is_numeric() fordi dette er ikke tekst. Til disse hvor der bliver modtaget tekst fra brugeren, og det er også login formularer, søge felter og alle disse HTML formularer hvor brugeren skal angive et stykke tekst. En god og sikker metode til at lukke af for sikkerhedshullet er ved at benytte funktionen mysql_real_escape_string(). Istedet skulle din kode se sådan her ud: Dette forhindre hackere i at benytte SQL Injection på dit site, og du kan slappe af og nyde dagen. Det var lidt om SQL Injection, hvis du benytter disse 2 jeg har snakket om, er du sikret imod angrebet, som vi ikke har lyst til at opleve. 4
Fil Upload Fil upload er et sikkerhedsbrud i sig selv, derfor er det meget vigtigt at man husker disse regler: 1. Tjek altid typen på den uploadet fil 2. Sørg for at sæt en max størrelse Hvis du glemmer at tjekke for selve typen (regl nr. 1) er det muligt at uploade en PHP fil, og det er meget alvorligt. En PHP fil kan indeholde hvad som helst af kode, det er meget nemt lige at skrive et par linjer som sletter det hele, eller f.eks. giver os vores bruger og password til databasen. Der er virkelige eksempler om hacks på internettet, hvor hackeren har haft admin password i flere måneder før man fandt ud af det. Dette ville man jo nok kategorisere som en direkte børge, men det er en mulighed. Her er koden til at tjekke type og størrelse: 5
Bruger input Man skal aldrig stole på at brugerne til ens hjemmeside skriver sikkert input. Faktisk er det sådan at, man skal direkte sige at alle er hackere. Derfor er det meget vigtigt at lukke af for de nævnte sikkerhedshuller, ellers er din hjemmeside som en hullet ost. Hvorfor sker det for mig, jeg har jo intet spændende på min hjemmeside Det skal man aldrig sige, en potentiel hacker er ikke interesseret i hvad der er på dit site i de fleste tilfælde. De er mere interesseret i at blive offentliggjort, altså vise at de har hacket din hjemmeside med skrifter, billeder eller direkte at slette indhold/filer m.m. Sider som politiken.dk, Nasa og CIA har altid haft problemer med hackere, men der er lige så mange små ukendte sites som bliver hacket. Der er to slags hackere hvis man skal indsnævre det til mindst muligt. Whitehat En Whitehat hacker benytter sin viden til at hacke din hjemmeside, men ikke for at ødelægge. De vil sende dig information om hvad der er galt med dit site, og evt. koderne der kan rette dine problemer. Altså en Whitehat hacker hjælper dig, de er viceværterne på internettet. Blackhat En Blackhat hacker er dem som er ude efter at ødelægge og smadre så meget som muligt. De hacker hjemmesider for at få opmærksomhed, fordi de syntes det er sjovt at ændre og slette indhold på sites, og frem for alt, fordi det er deres passion. En Blackhat hacker er den slemme af slagsen, og vi kan kalde dem Internet Terrorister. 6
Links [Security] Writing Hacker Safe PHP Code http://technofriends.in/2010/02/25/security-writing-hacker-safe-php-code/ SQL Injection PHP.net http://dk2.php.net/manual/en/security.database.sql-injection.php 7