Laste ned presentasjonen
Presentasjon lastes. Vennligst vent
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:
Liknende presentasjoner
© 2024 SlidePlayer.no Inc.
All rights reserved.