muffe Skrevet 8. februar 2004 Del Skrevet 8. februar 2004 Har en side med et svært skjema. Verdiene i dette skjemaet skal inn i en mySQL spørring. Hvordan skjekker jeg det for ondsinnet kode? Er det mulig å skjekke HELE $_POST før det "deles" opp i mindre variabler? De tegnene som er gyldige er a-z, A-Z, æ, ø, å, Æ, Ø, Å, 0-9, samt punktum og komma. Hvordan gjøre dette enkelst mulig? $_POST deles opp i 23 mindr variabler, er det mulig å skjekke alle disse 23 i samme operasjon? Håper dere skjønte hva jeg mente. På forhånd takk. Lenke til kommentar
???????? Skrevet 8. februar 2004 Del Skrevet 8. februar 2004 (endret) $_POST $_GET $_REQUEST $_COOKIE $_SESSION $_SERVER osv. er arrays. Dvs. du kan bare bruke foreach() for å sjekke variablene. Uansett så burde du sjekke variablene med mysq_escape_string() da er den trygg å sette inn i mysql. Her en en måte du kan sjekke etter tall og bokstaver: foreach($_POST as $navn => $verdi){ if(eregi("^[a-zæøå0-9]$",$verdi)){ $OkVariabel[$navn] = $verdi; } } Da ineholder $OkVariabel kun verdier som består av bokstaver og tall. $_POST['felt1'] blir lagret i $OkVariabel['felt1'] dersom den er ok. Hvis du ikke vil validere på den måten, men bare sette verdiene inn, holder det å bruke mysql_escape_string(). F.eks.: INSERT INTO tabell (felt1, felt2...) VALUES ('".mysql_escape_string($_POST['felt1'])."', '".mysql_escape_string($_POST['felt2'])."'...) EDIT: $_POST, $_GET og $_COOKIE variablene finnes i $_REQUEST. Dvs. vet du ikke om skjemaet bruker post eller get - eller det kan variere, er det ofte enklere å bare bruke $_REQUEST. Endret 8. februar 2004 av ???????? Lenke til kommentar
muffe Skrevet 8. februar 2004 Forfatter Del Skrevet 8. februar 2004 Rent praktisk, hva gjør mysql_escape_string()? Er bare litt nysgjerrig. Lenke til kommentar
???????? Skrevet 8. februar 2004 Del Skrevet 8. februar 2004 Hørt om PHP manualen? http://no2.php.net/manual/en/function.mysq...cape-string.php Den escaper tegn som ' og " slik at en bruker ikke kan avsluttet din sql spørring og sette inn sin egen etter din. Problemet er dersom en bruker f.eks. setter inn '); og lager en egen spørring i et felt. F.eks. i feltet navn skriver en bruker: '); GRANT ALL PRIVILEGES ON ...; Og spørringen din ser slik ut: INSERT INTO tabell VALUES('".$_POST['navn']."'); Der $_POST['navn'] settes inn avsluttes din spørring, så kjøres spørringen brukeren har lagt inn - som oppretter en ny bruker i databasen. mysql_escape_string() bytter da ut ' med \' (slik at det blir et tegn og ikke avslutter spørrignen din); Lenke til kommentar
The Red Devil Skrevet 8. februar 2004 Del Skrevet 8. februar 2004 Kva er anbefalt å bruke: mysql_escape_string() eller addslashes() ? Lenke til kommentar
muffe Skrevet 8. februar 2004 Forfatter Del Skrevet 8. februar 2004 (endret) Har et login-script jeg tenkte å begynne med (få variabler osv). Men jeg får en feilmelding: Warning: Invalid argument supplied for foreach() in E:\inetpub\wwwroot\grimstad.seilforening\treningsdagbok\login.php on line 13Brukernavnet og/eller passordet er feil. Vennligst prøv igjen.PHP Warning: Invalid argument supplied for foreach() in E:\inetpub\wwwroot\grimstad.seilforening\treningsdagbok\login.php on line 13 Her er scriptet: ?php error_reporting (E_ALL ^ E_NOTICE); session_start(); foreach($_POST as $navn => $verdi){ if(eregi("^[a-zæøå0-9]$",$verdi)){ $INPUT[$navn] = $verdi; } } foreach($INPUT as $navn => $verdi){ mysql_escape_string($navn); $OKINPUT[$navn] = $verdi; } $id = $OKINPUT['id']; $password = $OKINPUT['Passwd']; include('connect.php'); $query_1 = "SELECT * FROM users WHERE id='$id' and Passwd='".md5($password)."'"; $result_1 = mysql_query($query_1) or die ("Could not execute query : $query." . mysql_error()); if (mysql_num_rows($result_1) == 0) { $query_2 = "SELECT * FROM admins WHERE id='$id' and Passwd='".md5($password)."'"; $result_2= mysql_query($query_2) or die ("Could not execute query : $query." . mysql_error()); if (mysql_num_rows($result_2) == 0) { echo('Brukernavnet og/eller passordet er feil. Vennligst prøv igjen.'); } else { $r=mysql_fetch_array($result_2); $login_username=$r['id']; $_SESSION['login_username'] = $login_username; $_SESSION['admin'] = true; Header("Location: main.php"); exit(); } } else { $r=mysql_fetch_array($result_1); $login_username=$r['id']; $_SESSION['login_username'] = $login_username; $_SESSION['admin'] = false; Header("Location: main.php"); exit(); } /* Lukker forbindelse */ mysql_close($link); ?> Har jeg forstått foreach() riktig med hennsyn til mysql_escape_string()? Kan det brukes på denne måten? På forhånd takk for alle svar. Edit: Trykkleif Edit2: Trykkleif 2 Endret 8. februar 2004 av muffe Lenke til kommentar
Torbjørn Skrevet 8. februar 2004 Del Skrevet 8. februar 2004 se på http://no2.php.net/manual/en/function.mysq...cape-string.php der står det: Description string mysql_escape_string ( string unescaped_string) mao, du må gjøre slik: $navn = mysql_escape_string($navn); Lenke til kommentar
muffe Skrevet 8. februar 2004 Forfatter Del Skrevet 8. februar 2004 Har endret litt på første del: <?php error_reporting (E_ALL ^ E_NOTICE); session_start(); foreach($_POST as $navn => $verdi){ if(eregi("^[a-zæøå0-9]$",$verdi)){ $INPUT[$navn] = $verdi; } } foreach($INPUT as $navn => $verdi){ $esc_verdi = mysql_escape_string($verdi); $OKINPUT[$navn] = $esc_verdi; } $id = $OKINPUT['id']; $password = $OKINPUT['Passwd']; Men samme feil fremdeles. Lenke til kommentar
???????? Skrevet 8. februar 2004 Del Skrevet 8. februar 2004 Dersom det er flere tegn må du ta med + "^[a-zæøå0-9]+$" Lenke til kommentar
muffe Skrevet 8. februar 2004 Forfatter Del Skrevet 8. februar 2004 Hva gjør jeg hvis jeg vil ha med punktum og komma også? Lenke til kommentar
???????? Skrevet 8. februar 2004 Del Skrevet 8. februar 2004 (endret) Da legger du det til. "^[a-zæøå0-9\.,]+$" Du kan legge til alle de tegnene du trenger, bare pass på at du må escape noen. Hvis du forsøker å legge til noen tegn som du ikke får til å fungere sett inn \ foran tegnet. Skal det være tillatt med mellomrom kan du legge til det også. Skriver litt om funksjonen her: ^ betyr at variabelen må starte med det som kommer etter eregi("^a", $variabel) // variabelen må starte med a // true: $variabel = "abc" // false: $variabel = "cba" $ betyr at den må slutte med tegnet foran eregi("a$", $variabel) // variabelen slutte med a // true: $variabel = "cba" // false: $variabel = "abc" [] brukes til å definere flere tegn sammen eregi("[abcdefghijklmnopqrstuvwxyzæøå]", $variabel) // variabelen må inneholde en bokstav som er definert ovenfor // true: $variabel = "a" // false: $variabel = "1" // Du kan forkorte det til [a-zæøå] // legg merke til at æøå burde defineres for seg selv * etter definerte tegn betyr at det må være 0 eller flere eregi("^[a-zæøå]*$", $variabel) // variabelen inneholder null eller flere bokstav som er definert ovenfor // siden ^ og $ er tatt med kan den kun inneholde en av de bokstavene // true: $variabel = "a" // false: $variabel = "1a" // legg merke til at æøå burde defineres for seg selv + brukes for å kreve at det er en eller flere eregi("^[a-zæøå]+$", $variabel) // true: $variabel = "aaaa" // false: $variabel = "" // Du kan forkorte det til [a-zæøå] // legg merke til at æøå burde defineres for seg selv ? brukes for å sjekke om det er null eller et tegn eregi("^[a-zæøå]?$", $variabel) // true: $variabel = "a" eller "" // false: $variabel = "aaaa" // Du kan forkorte det til [a-zæøå] // legg merke til at æøå burde defineres for seg selv Du kan også bruke { } for å definere et bestemt antall: eregi("^a{2}$", $variabel) - betyr at det må være "aa" NB: som nevnt tidligere er ^ og $ kun for å passe på at variablen begynner og slutter med de definerte tegnene. Skal du kun sjekke om det er to a'er bruker du "a{2}" a{5,} betyr minst fem a'er a{5,10} betry at det må være mellom 5 og 10 a'er . betyr hvilket som helts teng .{2} betyr to tegn | betyr eller a|b betyr derfor a eller b ( ) brukes for å definere hele deler (ab)+ betyr en eller flere ab True: abab False: abbb siden jeg brukte eregi (case insensitive) sjekker den både etter store og små bokstaver. Hvis du f.eks. bruker ereg må du også definere om du ønsker store eller små bokstaver. [a-zæøåA-ZÆØÅ] betyr store og små bokstaver [A-ZÆØÅ] betyr kun store bokstaver Endret 8. februar 2004 av ???????? 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å