jormo Skrevet 4. januar 2013 Skrevet 4. januar 2013 Hei! Jeg prøver å kjøre mysqli_real_escape_string() på alle mine $_POST variabler. Jeg mener at den skal sette \ foran alle uønskede tegn som f.eks '. Stemmer ikke det? Uansett så viker det ikke, men det som egentlig virker rarere på meg er at om jeg setter ' inn i min tekst så ødelegger det ingenting for MySQL spørringen min... jeg kan sette både en to og mange ' og de blir fint lagret i databasen, og de blir fint hentet utigjen i html-formen for redigering. Noen som vet hvor jeg evt. tar feil...?
Tom_ Skrevet 4. januar 2013 Skrevet 4. januar 2013 Dette hadde vært lettere å hjelpe deg om du kunne vist koden din
jormo Skrevet 5. januar 2013 Forfatter Skrevet 5. januar 2013 Systemet skal kun brukes av tre-fire alle trygge personer, så det er ikke så stor fare for ondsinnet kode, men på en måte så er nok svaret alikevel ja i og med at man kan ved et uhell taste inn ' et eller annet sted og ødelegge SQL-koden. Hensikten er å sende data trygt til database, og hente den trygt ut igjen, og at den blir holdt uendret for brukers del. function sikre_tekst($tilkobling, $tekst) { //$tekst = htmlspecialchars($tekst); $tekst = mysqli_real_escape_string($tilkobling, $tekst); return $tekst; } Denne sløyfen vet jeg hva gjør, men kan noen bare klargjøre hva => betyr? Det menes med at $v vil endre seg i takt og være identisk med $k, gjør det ikke? foreach ($_POST as $k=>$v) { $_POST[$k] = sikre_tekst($tilkobling, $v); } $sporring = "UPDATE min_db SET navn='".$_POST['navn']."',adresse='".$_POST['adresse']."',postnummer=".$_POST['postnummer'].",tlf='".$_POST['tlf']."',dato_frist='".$_POST['dato-frist']."',type_anlegg='".$_POST['type_anlegg']."',feil_type='".$_POST['feiltype']."',merknader='".$_POST['merknader']."',materialer='".$_POST['materialer']."',kilometer=".$_POST['km'].",timer=".$_POST['timer'].",dato_ferdig='".$_POST['ferdig_dato']."',spenning=".$_POST['volt'].",fullfort=$fullfort,kart='".$_POST['kart']."' WHERE oppdragnr=".$_POST['nr'];
j-- Skrevet 5. januar 2013 Skrevet 5. januar 2013 mysqli_real_escape_string(); sikrer mot SQL injections. Mer om SQL injections her: http://en.wikipedia.org/wiki/SQL_injection => brukes for å kunne bruke både key og value i foreach-løkka di. Eksempelkode: <?php $array = array( "foo" => "bar", "bar" => "foo", ); foreach($array as $key => $value){ echo $key . ': ' . $value . "\n"; } ?> Vil gi deg: foo: bar bar: foo
jormo Skrevet 5. januar 2013 Forfatter Skrevet 5. januar 2013 Hei, og takk for svar! Men, hva gjør den funskjonen med tekstvariabelen i praksis da? Skal man ikke kunne se på inndata at det har blitt lagt til noen tegn?
jormo Skrevet 5. januar 2013 Forfatter Skrevet 5. januar 2013 PHP Manualen sier: Characters encoded are NUL (ASCII 0), \n, \r, \, ', ", and Control-Z.
Tom_ Skrevet 5. januar 2013 Skrevet 5. januar 2013 $link = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname); $string = "'s"; echo "før: ".$string; $string = mysqli_real_escape_string($link, $string); echo "<br />etter: ".$string; // Output: // før: 's // etter: \'s
TheClown Skrevet 7. januar 2013 Skrevet 7. januar 2013 Bare stol på at det funker, fordi det gjør det. Og for å komme med et eksempel på en SQL Injection: SELECT * FROM user WHERE name='$name' Om jeg skriver inn i $name: '; DROP TABLE user; Så kan du tenke deg selv hva som skjer.
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå