Thomas. Skrevet 12. februar 2009 Del Skrevet 12. februar 2009 if(!preg_match("/[^a-zA-Z0-9]/", $bruker)) { die(); exit(); } Hva er feil? Jeg skal ha: a-z || A-Z || 0-9. Siden dauer uansett hva jeg skriver inn i input Så er det noe feil med regexen? Lenke til kommentar
OIS Skrevet 12. februar 2009 Del Skrevet 12. februar 2009 if(!preg_match("/[^a-zA-Z0-9]/", $bruker)) { die(); exit(); } Hva er feil? Jeg skal ha: a-z || A-Z || 0-9. Siden dauer uansett hva jeg skriver inn i input Så er det noe feil med regexen? [^ betyr ikke match følgende tegn Lenke til kommentar
Thomas. Skrevet 13. februar 2009 Forfatter Del Skrevet 13. februar 2009 if(preg_match("/[_$'\" .,:;-]/", $bruker)) { Trenger jeg mer tegn, for å hindre sql-injection? Lenke til kommentar
OIS Skrevet 13. februar 2009 Del Skrevet 13. februar 2009 if(preg_match("/[_$'\" .,:;-]/", $bruker)) { Trenger jeg mer tegn, for å hindre sql-injection? Du trenger mysql_real_escape_string eller PDO prepared statements. Lenke til kommentar
Thomas. Skrevet 13. februar 2009 Forfatter Del Skrevet 13. februar 2009 if(preg_match("/[_ \" .,:;-]/", $bruker)) { Trenger jeg mer tegn, for å hindre sql-injection? Du trenger mysql_real_escape_string eller PDO prepared statements. Vis du har tid, så hadde det vært fint om du viste i en spørring i koden min - hvor du bruker PDO. <?php if(isset($_POST['logginnf'])) { error_reporting(E_ALL); $bruker = mysql_real_escape_string($_POST['brukerlogginn']); $pass = mysql_real_escape_string(md5($_POST['passlogginn'])); $sql_q = mysql_query("SELECT * FROM brukere WHERE nick = '$bruker'"); $sql = mysql_fetch_array($sql_q); if(empty($bruker) || empty($pass)) { header("Location: ./"); } else { if(preg_match("/[_$'\" .,:;-/]/", $bruker)) { echo "Ugyldig brukernavn. Kan kun inneholde bokstavene a-z."; } else { if(strlen($bruker) > 19) { echo "For langt!"; } else { /*if($bruker != "admin") { echo "innloggingen er stengt! pga bug"; die(); } else {*/ if(mysql_num_rows($sql_q) < 1) { print '<br><span class="error">Brukernavn/passord er feil!</span>'; } else if($sql['pass'] != $pass) { print '<br><span class="error">Brukernavn/passord er feil!</span>'; } else if($sql['liv'] == 0) { header("Location: drep1.php"); } else if($sql['liv'] == -1) { header("Location: drep2.php?nick=$bruker"); } else { session_start(); $_SESSION['id'] = $sql['id']; mysql_query("INSERT INTO _iplogg VALUES('', '".$_SESSION['id']."', '".$_SERVER['REMOTE_ADDR']."', NOW())"); mysql_query("UPDATE brukere SET online = unix_timestamp() WHERE id = '".$_SESSION['id']."'"); $dato = date("d/m/y || H:i:s"); mysql_query("UPDATE brukere SET sistInnlogget = '$dato' WHERE id = '".$_SESSION['id']."'"); header("Location: /"); } } } } /* } */ } ?> Lenke til kommentar
Thomas. Skrevet 13. februar 2009 Forfatter Del Skrevet 13. februar 2009 Dette fungerer jo ikke: $sql_connect = $dbh -> prepare ("SELECT * FROM brukere WHERE nick = '?'"); if ( $sql_connect -> execute ( array ( $bruker ) ) ) { while($sql = $sql_connect -> fetch ( ) ) { $id1 = $sql['id']; $passd = $sql['pass']; $liv1 = $sql['liv']; } } Notice: Undefined variable: passd in C:\premium\mafiasos.com\public_html\index.php on line 98 Lenke til kommentar
OIS Skrevet 13. februar 2009 Del Skrevet 13. februar 2009 (endret) "SELECT * FROM brukere WHERE nick = ?" Endret 13. februar 2009 av OIS Lenke til kommentar
Thomas. Skrevet 13. februar 2009 Forfatter Del Skrevet 13. februar 2009 "SELECT * FROM brukere WHERE nick = ?" Hvorfor er prepared-staements så sikkert mot sql-injection? Lenke til kommentar
OIS Skrevet 13. februar 2009 Del Skrevet 13. februar 2009 "SELECT * FROM brukere WHERE nick = ?" Hvorfor er prepared-staements så sikkert mot sql-injection? Du kan lese manualen. The parameters to prepared statements don't need to be quoted; the driver handles it for you. If your application exclusively uses prepared statements, you can be sure that no SQL injection will occur. (However, if you're still building up other parts of the query based on untrusted input, you're still at risk). Lenke til kommentar
Jonas Skrevet 13. februar 2009 Del Skrevet 13. februar 2009 (endret) Hvorfor i all verden vil du validere og sjekke for injections etter at du har escapet med mysql_real_escape_string? Du skal vite at tegnene man vanligvis assosierer med injections fortsatt er der, men de er bare escapet. Og det er nok, du trenger ikke å sjekke noe videre etter det. Endret 13. februar 2009 av Jonas Lenke til kommentar
Warz Skrevet 14. februar 2009 Del Skrevet 14. februar 2009 Ja, du trenger bare å ha en sjekk for om det som er skrevet inn stemmer, for eksempel om det er et ord, osv... også trenger du mysql_real_escape_string. Husk at hvis servern din har magic quotes så må du først "stripslashes" før du kan gjøre en mysql_real_escape_string 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å