1 / 18

Webprogrammering

Webprogrammering. MySQL og PHP Sikkerhet. I dag. Noen sikkerhetsaspekter Kryptering av passord Innlogging / sjekk SQL injection Gjennomgang av kode Jobbe med oblig 2 Prosjektet er lagt ut Ingen egen ukeoppgave. Bruk av passord. Bør kryptere passordet i databasen

juan
Download Presentation

Webprogrammering

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Webprogrammering MySQL og PHP Sikkerhet

  2. I dag • Noen sikkerhetsaspekter • 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. Legge inn passordet: Sjekke passordet: PASSWORD(”Hei og hopp1”); PASSWORD(”Hei og hopp”); *21A9A0A6D7968C641B451D49BE4F502562CE070D If() • *633583B61FDBB58177D561105AED377DA821A0CE 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 charhexhash • Kan bruke den generelle hash-funksjonen i PHP for å lage lengre hash’er • Hash(”algoritme”, ”string”); • Algoritme kan være f.eks • sha256 : 64 charhex • sha512 :128 charhex

  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 5.2.6 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 > 23 - - 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) • Ikkesatspå at Magic Quotes ersatt • Sjekkmed get_magic_quotes_gpc() • Bruk fnutter også ved tall!

  18. SQL injection Ref: www.xckd.com

More Related