Pangaea Skrevet 11. mai 2004 Del Skrevet 11. mai 2004 (endret) Sliter litt med en mysql spørring. Har ikke helt kontroll på hvordan man skal gjøre det når man har litt vel mange single og dobbelquotes, men trodde dette burde fungere, det gjør det derimot ikke. Hva skal det stå for at php skal forstå det? $result = mysql_query("select * from user where username='"$_POST['username']"'"); Jeg får "unexpected T_VARIABLE" feilmelding. Bruker jeg fx 'Hello' funker det, men ikke når jeg bruker en variabel... PS: Håper quotene kommer tydelig fram... Endret 11. mai 2004 av Pangaea Lenke til kommentar
Ueland Skrevet 11. mai 2004 Del Skrevet 11. mai 2004 "select * from user where username='".$_POST['username']."" noter deg hvor jeg har brukt punktumene Lenke til kommentar
Pangaea Skrevet 11. mai 2004 Forfatter Del Skrevet 11. mai 2004 Takker, det fungerte "select * from user where username='".$_POST['username']."" Men jeg forstår ikke helt hvorfor, kan du forklare litt please? Hvorfor ikke singlequote rett etter 2. punktum? Er litt dårlig på dette her... Lenke til kommentar
???????? Skrevet 11. mai 2004 Del Skrevet 11. mai 2004 (endret) Aldri stol på data sendt via et skjema: "select * from user where username='".mysql_escape_string($_POST)['username']."' Du burde ta med ' etter uttrykket. Fungerer det uten? Endret 11. mai 2004 av ???????? Lenke til kommentar
Pangaea Skrevet 11. mai 2004 Forfatter Del Skrevet 11. mai 2004 Aldri stol på data sendt via et skjema:"select * from user where username='".mysql_escape_string($_POST)['username']."' Du burde ta med ' etter uttrykket. Fungerer det uten? Det fungerte uten ', men har nå "'" på slutten av uttrykket... Ang. sikkerhet fra skjema. Jeg har nå fx $username = htmlspecialchars(addslashes(strip_tags(trim($_POST['username'])))) Er det en god måte å gjøre det på, eller bør det være med mysql_escape_string i tillegg, eller bytte for noe? Lenke til kommentar
LoS Skrevet 11. mai 2004 Del Skrevet 11. mai 2004 (endret) Aldri stol på data sendt via et skjema:"select * from user where username='".mysql_escape_string($_POST)['username']."' Du burde ta med ' etter uttrykket. Fungerer det uten? Hva kan skje når man skjemaet brukes kun til SELECT funksjonen? Eller, hva kan skje når man bruker den i en INSERT funksjonen? Lurer litt på det egentlig, skjønner dette med strip_tags da Endret 11. mai 2004 av LoS Lenke til kommentar
Pangaea Skrevet 11. mai 2004 Forfatter Del Skrevet 11. mai 2004 (endret) Såvidt jeg har forstått kan en hacker gjøre stor skade uansett hva slags type SQL-kommando man holder på med. strip_tags() kan bli kluss med om taggene ikke er "skikkelige", fx "<b>blahbal</b;jfkld" Tror dette er en grei måte å gjøre det på... htmlspecialchars(mysql_escape_string(trim($string))); Men så til mitt nye problem... Har nå et ganske så langt script på nesten 200 linjer. Alt har funket bra mens jeg har utviklet det, men nå får jeg plutselig en "unexpected T_ELSE" error på linje 125. Jeg har ikke forandret noe der, men lagt til litt mer stasj lenger oppe. Jeg klarer ikke å se hva feilen er, men håper noen kan hjelpe meg litt if(validateEmail($_POST['email1']) && validateEmail($_POST['email2']) && ($_POST['email1'] == $_POST['email2'])); { $email = $_POST['email1']; /* MASSE PHP KODE */ } else <---- linje 125 { $_SESSION['err_email1'] = $err_email1; $_SESSION['err_email2'] = $err_email2; $_SESSION['email1'] = ""; $_SESSION['email2'] = ""; $_SESSION['err_country'] = $err_country; } } Håper koden ser noenlunde forståelig ut, kan poste alt om nødvendig, men blir ganske langt... Endret 11. mai 2004 av Pangaea Lenke til kommentar
???????? Skrevet 12. mai 2004 Del Skrevet 12. mai 2004 (endret) Aldri stol på data sendt via et skjema:"select * from user where username='".mysql_escape_string($_POST)['username']."' Du burde ta med ' etter uttrykket. Fungerer det uten? Hva kan skje når man skjemaet brukes kun til SELECT funksjonen? Eller, hva kan skje når man bruker den i en INSERT funksjonen? Lurer litt på det egentlig, skjønner dette med strip_tags da Problemet er hvis noen avslutter feltet med ' og så setter inn ; Da har de muligheten til å kjøre en ny spørring, som f.eks. legge til en ny bruker! Det gjelder uansett hva slags spørring du kjører. Pangaea - feilen ligger nok i den koden du har tatt bort. Let etter feil bruk/mangel på ; ) } Endret 12. mai 2004 av ???????? Lenke til kommentar
Nervetattoo Skrevet 12. mai 2004 Del Skrevet 12. mai 2004 Bare et lite tips som kan være kjekt: "select * from user where username={$_POST['username']}" Bruk av ."."." kan føre til noen feil i lukking av fnutter osv. Ved å legge variabelen inne i {} klammer blir det hele litt lettere å lese og holde styr på. Og selvfølgelig mindre kode. Lenke til kommentar
LoS Skrevet 12. mai 2004 Del Skrevet 12. mai 2004 Takk for info ????????, fikser opp i noen scripts nå Findus: bruker selv det du skriver der, men problemet med en slik form for spørring vil bli at du bare kan bruke ett ord. Hvis brukernavnet som blir søkt på f.eks er "Hei på deg" så vil den bruke "Hei" og prøve å kjøre "på" som en kommando i spørringen. Bruk det heller slik: "select * from user where username='{$_POST['username']}'" Bare for å pirke litt Lenke til kommentar
???????? Skrevet 12. mai 2004 Del Skrevet 12. mai 2004 (endret) Takk for info ????????, fikser opp i noen scripts nå Bra, det er faktisk en veldig vanlig måte å hacke scripts på. Skal du ha et lite tips til for å spare litt tid, se på denne: foreach($_POST as $var => $verdi){ $Skjema[$var] = mysql_escape_string($verdi); } Setter du inn den på siden slipper du å skrive mysql_escape_string hele tiden å heller bytte ut $_POST['variabel'] med $Skjema['variabel'] Endret 12. mai 2004 av ???????? Lenke til kommentar
LoS Skrevet 12. mai 2004 Del Skrevet 12. mai 2004 Virker bra, kan jeg legge dette i en funksjon, eller må jeg skrive: foreach($_POST as $var => $verdi){ $Skjema[$var] = mysql_escape_string($verdi); her kommer hele scriptet; } ? Hvis du forstår hva jeg mener? Lenke til kommentar
???????? Skrevet 12. mai 2004 Del Skrevet 12. mai 2004 Du trenger ikke det, bare plasser det scriptet på starten av siden så "vasker" den alle variabler fra skjemaet for det. Lenke til kommentar
LoS Skrevet 12. mai 2004 Del Skrevet 12. mai 2004 (endret) Okay, prøver på det jeg edit:nei skulle du ha sett. det funka Endret 12. mai 2004 av LoS Lenke til kommentar
Pangaea Skrevet 12. mai 2004 Forfatter Del Skrevet 12. mai 2004 Pangaea - feilen ligger nok i den koden du har tatt bort. Let etter feil bruk/mangel på ; ) } Har leitet som f i koden men finner ingenting galt. Tok også å kommenterte ut den else'n og da fungerte det uten feilmelding. Syns det er veldig rart for å være helt ærlig... Er en veldig enkel else, og jeg har mange av akkurat samme form både lenger oppe og lenger nede i scriptet (mange nested if's). else { $_SESSION['err_email1'] = $err_email1; $_SESSION['err_email2'] = $err_email2; $_SESSION['email1'] = ""; $_SESSION['email2'] = ""; $_SESSION['err_country'] = $err_country; } Kan vertfall ikke se noen feil der. Hadde det vært feil lenger oppe, burde feilen skjøvet seg lenger ned når jeg kommenterte ut ovennevnte kode, men det skjer ikke. Noen som har den minste anelse om hva som kan være feil? Lenke til kommentar
???????? Skrevet 12. mai 2004 Del Skrevet 12. mai 2004 Det du har postet av kode gjør det ca. umulig å finne feilen, for den siste } du har med avslutter ikke noen av de påbegynte delene - så enten har du glem å avslutte noe eller så har du med en else for mye. Post hele koden her så er det mulg å hjelpe deg. Lenke til kommentar
Pangaea Skrevet 12. mai 2004 Forfatter Del Skrevet 12. mai 2004 Det du har postet av kode gjør det ca. umulig å finne feilen, for den siste } du har med avslutter ikke noen av de påbegynte delene - så enten har du glem å avslutte noe eller så har du med en else for mye. Post hele koden her så er det mulg å hjelpe deg. Okay, poster hele greia, det er ganske langt da... <?php include("./include/session_vars.inc.php"); include("./include/db_conn.inc.php"); include("./include/function.inc.php"); $err_username1 = "Enter a username"; $err_username2 = "Username already taken. Try a different username."; $err_password1 = "Enter a password"; $err_password2 = "Retype the password"; $err_email1 = "Enter a valid email adress"; $err_email2 = "Retype the email adress"; $err_country = "Select a country"; //echo "Email1: ".$_POST['email1']; if(isset($_POST['submit'])) { $_SESSION['username'] = $_POST['username']; $_SESSION['password1'] = $_POST['password1']; $_SESSION['password2'] = $_POST['password2']; $_SESSION['email1'] = $_POST['email1']; $_SESSION['email2'] = $_POST['email2']; $_SESSION['firstname'] = $_POST['firstname']; $_SESSION['lastname'] = $_POST['lastname']; $_SESSION['day'] = $_POST['day']; $_SESSION['month'] = $_POST['month']; $_SESSION['year'] = $_POST['year']; $_SESSION['country_id'] = $_POST['country_id']; $_SESSION['location'] = $_POST['location']; $_SESSION['url'] = $_POST['irl']; $_SESSION['icq'] = $_POST['icq']; $_SESSION['msn'] = $_POST['msn']; $_SESSION['notes'] = $_POST['notes']; $tmp_username = htmlspecialchars(mysql_escape_string(trim($_POST['username']))); $result = mysql_query("select * from acdc_user where username='$tmp_username'"); //$result = mysql_query("select * from acdc_user where username='".$_POST['username']."'"); if(!empty($tmp_username) && (mysql_num_rows($result)<1)) { $username = $tmp_username; //trim+++ checks if(!empty($_POST['password1']) && !empty($_POST['password2']) && ($_POST['password1'] == $_POST['password2'])) { $password = md5($_POST['password1']); /*if(validateEmail($_POST['email1']) && validateEmail($_POST['email2']) && ($_POST['email1'] == $_POST['email2']));*/ if(!empty($_POST['email1']) && !empty($_POST['email2']) && ($_POST['email1'] == $_POST['email2'])); { $email = $_POST['email1']; if(is_numeric($_POST['country_id'])) { $country_id = $_POST['country_id']; $firstname = $_POST['firstname']; $lastname = $_POST['lastname']; if(!is_numeric($_POST['day'])) { $day = NULL; } else { $day = $_POST['day']; } if(!is_numeric($_POST['month'])) { $month = NULL; } else { $month = $_POST['month']; } if(!is_numeric($_POST['year'])) { $year = NULL; } else { $year = $_POST['year']; } $location = $_POST['location']; $url = $_POST['url']; $icq = $_POST['icq']; $msn = $_POST['msn']; $notes = $_POST['notes']; $user_active = 0; $user_level = 1; $query = "INSERT INTO acdc_user (username, pass, email, firstname, lastname, bday_day, bday_month, bday_year, country_id, location, url, icq, msn, notes, user_active, user_level, joined) VALUES ('$username', '$password', '$email', '$firstname', '$lastname', '$day', '$month', '$year', '$country_id', '$location', '$url', '$icq', '$msn', '$notes', '$user_active', '$user_level', now())"; echo $query; $result = mysql_query($query) or die ("Could not execute query.".mysql_error()); if (!empty($result)) { // succesfully registered user //header("location: index.php"); exit; } else { header("location: index.php?page=register"); exit(); } } else { $_SESSION['err_country'] = $err_country; } } else // <---- HER FÅR JEG FEIL { $_SESSION['err_email1'] = $err_email1; $_SESSION['err_email2'] = $err_email2; $_SESSION['email1'] = ""; $_SESSION['email2'] = ""; $_SESSION['err_country'] = $err_country; } } else { $_SESSION['err_password1'] = $err_password1; $_SESSION['err_password2'] = $err_password2; $_SESSION['password1'] = ""; $_SESSION['password2'] = ""; if(empty($_POST['email1']) || empty($_POST['email2']) || ($_POST['email1'] != $_POST['email2'])) { $_SESSION['err_email1'] = $err_email1; $_SESSION['err_email2'] = $err_email2; $_SESSION['email1'] = ""; $_SESSION['email2'] = ""; } $_SESSION['err_country'] = $err_country; } } else { if(empty($_POST['username'])) { $_SESSION['err_username'] = $err_username1; } else { $_SESSION['err_username'] = $err_username2; } if(empty($_POST['password1']) || empty($_POST['password2']) || ($_POST['password1'] != $_POST['password2'])) { $_SESSION['err_password1'] = $err_password1; $_SESSION['err_password2'] = $err_password2; $_SESSION['password1'] = ""; $_SESSION['password2'] = ""; } if(empty($_POST['email1']) || empty($_POST['email2']) || ($_POST['email1'] != $_POST['email2'])) { $_SESSION['err_email1'] = $err_email1; $_SESSION['err_email2'] = $err_email2; $_SESSION['email1'] = ""; $_SESSION['email2'] = ""; } if(!is_numeric($_POST['country_id'])) { $_SESSION['err_country'] = $err_country; } } } else { echo "Form was not properly submitted."; } header("location: index.php?page=register"); ?> Det er ikke helt ferdig og har litt midlertidige løsninger her og der, men er for det meste ferdig. Sånn ser validateEmail funksjonen ut btw... function validateEmail($email) { return eregi("^[_\.0-9a-zA-Z-]+@([0-9a-zA-Z][0-9a-zA-Z-]+\.)+[a-zA-Z]{2,6}$", $email); } Håper noen orker å se gjennom, og klarer å finne noe feil Lenke til kommentar
kakkle Skrevet 12. mai 2004 Del Skrevet 12. mai 2004 Du har en ; etter if setiningen som hører til den elsen: if(!empty($_POST['email1']) && !empty($_POST['email2']) && ($_POST['email1'] == $_POST['email2'])); Kakkle Lenke til kommentar
Pangaea Skrevet 12. mai 2004 Forfatter Del Skrevet 12. mai 2004 Ah tusen hjertelig takk :) Grubla meg grønn og blå på det no i lange tider... Ofte vanskelig å finne slike småfeil. Veldig bra første post 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å