jormo Skrevet 4. januar 2013 Del 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...? Lenke til kommentar
War Skrevet 4. januar 2013 Del Skrevet 4. januar 2013 Er målet ditt å unngå SQL-Injection? Lenke til kommentar
Tom_ Skrevet 4. januar 2013 Del Skrevet 4. januar 2013 Dette hadde vært lettere å hjelpe deg om du kunne vist koden din Lenke til kommentar
jormo Skrevet 5. januar 2013 Forfatter Del 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']; Lenke til kommentar
j-- Skrevet 5. januar 2013 Del 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 Lenke til kommentar
jormo Skrevet 5. januar 2013 Forfatter Del 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? Lenke til kommentar
jormo Skrevet 5. januar 2013 Forfatter Del Skrevet 5. januar 2013 PHP Manualen sier: Characters encoded are NUL (ASCII 0), \n, \r, \, ', ", and Control-Z. Lenke til kommentar
Tom_ Skrevet 5. januar 2013 Del 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 Lenke til kommentar
TheClown Skrevet 7. januar 2013 Del 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. Lenke til kommentar
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å