Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

Webprogrammering MySQL og PHP Sikkerhet.

Liknende presentasjoner


Presentasjon om: "Webprogrammering MySQL og PHP Sikkerhet."— Utskrift av presentasjonen:

1 Webprogrammering MySQL og PHP Sikkerhet

2 I dag Noen sikkerhetsaspekter Gjennomgang av kode Jobbe med oblig 2
Kryptering av passord Innlogging / sjekk SQL injection Gjennomgang av kode Jobbe med oblig 2 Prosjektet er lagt ut Ingen egen ukeoppgave

3 Bruk av passord Bør kryptere passordet i databasen
Bruker en såkalt hash-funksjon Lager en kryptert string av en annen string MYSQL funksjon : PASSWORD Eks : PASSWORD(”Hei og hopp”); *633583B61FDBB58177D561105AED377DA821A0CE For sjekk må passordet inn også ”hash’es”

4 Bruk av passord forts. If() Database Legge inn passordet:
Sjekke passordet: PASSWORD(”Hei og hopp1”); PASSWORD(”Hei og hopp”); *21A9A0A6D7968C641B451D49BE4F502562CE070D *633583B61FDBB58177D561105AED377DA821A0CE If() Sjekk om samme hash 40 hex-byte *633583B61FDBB58177D561105AED377DA821A0CE Database INSERT SELECT

5 Sette inn passord <?php include "sql-connect-inc.php";
$passord="Hei og hopp"; $sql = "UPDATE ansatt SET Passord = PASSWORD('$passord') WHERE Fornavn = 'Varg'"; if(mysql_query($sql)) { echo '<br/>* Passordet er lagt inn *<br/>'; } else echo mysql_error();

6 Sjekke passord <?php include "sql-connect-inc.php";
$sjekk_passord="Hei og hopp"; $sql = "SELECT * FROM ansatt WHERE (Fornavn = 'Varg') AND (Passord = PASSWORD('$sjekk_passord'))"; $resultat = mysql_query($sql); $antall = mysql_num_rows($resultat); if ($antall == 1) { echo "Passordet er korrekt"; } else echo "Passordet er ikke korrekt!";

7 Sesjonsvariabel for innlogging
<?php session_start(); include "sql-connect-inc.php"; $sjekk_passord=$_REQUEST[passord]; $sql = "SELECT * FROM ansatt WHERE (Fornavn = 'Varg') AND (Passord = PASSWORD('$sjekk_passord'))"; $resultat = mysql_query($sql); $antall = mysql_num_rows($resultat); if ($antall == 1) { $_SESSION[”loggetInn”]=true; } else $_SESSION[”loggetInn”]=false;

8 På hver side ved innlogging
<?php session_start(); If (!$_SESSION[”loggetInn”]) { echo ”Du er ikke logget på ! Trykk her for å logge på :”; echo ” <a href="loginn.php">Tilbake</a>”; die(); } // legges inn i include som legges først i alle sidene // Her kommer koden for hva som skal skje dersom man er innlogget

9 Alternative hash-funksjoner
Password funksjonen er en MySQL funksjon og har en lengde på 40 hex-tegn. Enkel å bruke når passord skal lagres i databasen Dersom hash skal lagres på fil må det brukes en php-funksjon md5(”string”); Denne har en lengde på 32 hex-tegn

10 Alternative hash-funksjoner
Men MD5 har en forholdsvis kort hash Alternativt sha1 som har en 40 char hex hash Kan bruke den generelle hash-funksjonen i PHP for å lage lengre hash’er Hash(”algoritme”, ”string”); Algoritme kan være f.eks sha256 : 64 char hex sha512 :128 char hex

11 SQL injection Sikre at ingen kan skrive inn noe skadelig kode i input-felt -- betyr kommentar i SQL Eks: SELECT * FROM Kunde WHERE navn = ’Tor’ - - her er en kommentar

12 SQL injection Eks, gitt sjekk for passord:
SELECT * FROM bruker WHERE navn = ’$_REQUEST[navn]’ AND passord = ”fd6574b”; Hva skjer dersom vi i navnefeltet skriver et kjent navn: Ola’- - _ (mellomrom tilslutt) SELECT * FROM bruker WHERE navn = ’Ola’ - - _’ Passordet har da ingen ting å si (kommentert ut)

13 SQL injection i PHP Dette kan unngås ved å legge ”escape-tegn” ved enkelt og dobbelt fnutter før select-setninger. F.eks bruk funksjonen: $navnEsc= mysql_escape_string ($_REQUEST[’navn’]); SELECT * FROM bruker WHERE navn = ’$navnEsc’ AND passord = ”fd6574b”; Resultat: Input : Ola’- - SELECT * FROM bruker WHERE navn = ’Ola\’ - -’ AND passord = ”fd6574b”;

14 Magic quotes En annen måte er å sette dette i PHP ved hjelp av ”Magic quotes”. Da blir fnutter automatisk ”escapet” med \ (dvs. ’ blir \’). Denne muligheten kom i PHP versjon 4.0.0 Versjon med Magic quotes kjøres på cube (default i php.ini). Tas vekk i versjon 6.0.0! Dvs. ikke sats på Magic quotes!

15 Magic quotes Funksjon for å sjekke om denne er satt i PHP.INI
get_magic_quotes_gpc() (returnerer true/false) Eksempel: if(!get_magic_quotes_gpc()) { $Fornavn= mysql_escape_string($_REQUEST['fornavn']); } else $Fornavn = $_REQUEST['fornavn']; echo $Fornavn;

16 Fnutter ved tall Bruk fnutter også ved tall:
Her er alder et heltall i databasen. Skriver vi inn ”23 - -” for alder får vi Bruk isteden : Da vil tallet håndteres som en string! Og det godtas av databasesystemet (konverterer til heltall) $sql = "DELETE * FROM Ansatt WHERE fornavn = '$_REQUEST[Input]' AND alder > $_REQUEST[Alder] AND passord = 'dskfgj4905'"; DELETE * FROM Ansatt WHERE fornavn = ‘Ole‘ AND alder > AND passord = = ‘dskfgj4905’ $sql = "DELETE * FROM Ansatt WHERE fornavn = '$_REQUEST[Input]' AND alder > ‘$_REQUEST[Alder]’ AND passord = 'dskfgj4905'";

17 Unngå SQL injection: Ved input bruk : mysql_escape_string();
$db->escape_string(); (MySQLi) Ikke sats på at Magic Quotes er satt Sjekk med get_magic_quotes_gpc() Bruk fnutter også ved tall!

18 SQL injection Ref:


Laste ned ppt "Webprogrammering MySQL og PHP Sikkerhet."

Liknende presentasjoner


Annonser fra Google