Gå til innhold

Spørsmål om regex


Anbefalte innlegg

Videoannonse
Annonse
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

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
"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

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 av Jonas
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...