Probleme mit "Sicherheits"-script :(

Kalma

Erfahrenes Mitglied
hey,

ich habe eine Passwort ändern Funktion geschrieben, die folgenden Felder enthält:

Altes Passwort:
Neues Passwort:
Neues Passwort: (wiederholen)

Die Funktion soll prüfen, ob das alte Passwort richtig ist, und ob die neuen genau sind.

Nur, das noch nicht richtig. man kann einfach ein falsches "altes" passwort eingeben, und der ändert das pw trotzdem:

PHP:
<?php
	//posten
	$passworta		 = $_POST['passworta'];
	$passwort1		 = $_POST['passwort1'];
	$passwort2		 = $_POST['passwort2'];	
	$passwort3		 = md5($passwort2);
	
	$PW = mysql_query("SELECT * FROM user WHERE `id`=".$_SESSION["user_id"]."");
	$p	= mysql_fetch_array($PW);
	
	if ($p['passwort'] != $passworta)
		{
			header ("location: ?section=profil&p=sicherheit&pw=1");
		}
	if ($passwort1 != $passwort2)
		{
			header ("location: ?section=profil&p=sicherheit&pw1=1");
		}
	else
		{
			
			$Query = "UPDATE
									user
								SET
									`passwort`='$passwort3'
								WHERE
									`id`=".$_SESSION["user_id"]."";
			
			if (mysql_db_query($DBName, $Query, $Link))
				{
					header ("location: ?section=profil&p=sicherheit&send=1");
				}
			else
				{
					header ("location: ?section=profil&p=sicherheit&sendf=1");
				}
		}
?>

Könnt ihr mir helfen?

P.s.: Das Problem habe ich bei sämtlichen Scripten auch :(


David
 
header() sorgt nicht abrupt dafuer, dass die Seite gewechselt wird. Das Script wird erst vollstaendig ausgefuehrt.
Setz nach jedem header() einfach ein exit, dadurch wird das Script dann an der Stelle abgebrochen, und es sollte laufen wie Du es willst.
 
Wie meinst du das mit dem exit();

So?:

PHP:
header ("location: ?section=profil&p=sicherheit&send=1"); 
exit ();

David

//edit

Hey,


weiß jetzt wie dus meinst^^:

PHP:
	if ($name == "")
		{
			header ("location: ?section=kontakt&name=1");
			exit();
		}
	if ($betreff == "")
		{
			header ("location: ?section=kontakt&betreff=1");
			exit();
		}
	if ($nachricht == "")
		{
			header ("location: ?section=kontakt&nachricht=1");
			exit();
		}
	if (($email != "") AND (!ereg("@", $email)))
		{
			header ("location: ?section=kontakt&name=1");
			exit();
		}

jetzt ist aber folgendes problem:
ich gebe einen namen ein, klicke auf "feedback senden" und er sagt, bitte gib einen Namen ein, obwohl ich den doch eingegeben hab.

Und, wie bekomme ich es hin, dass das Script alle Fehlermeldungen ausgibt, zum Beispiel so:
Wenn kein name und kein betreff eingegeben ist:

du hast keine Namen eingegeben
du hast keinen Betreff eingegeben


MfG
David
 
Als Beispiel mal der Insert-Part meines News-Scripts.
PHP:
if (isset($_POST['insert']))
	{
		if ((!empty($_POST['title'])) && (!empty($_POST['text'])))
			{
				mysql_query("insert into `news` (`title`,`text`,`newsdate`,`userid`) values ('".quote_string($_POST['title'])."','".quote_string($_POST['text'])."','".time()."','".$_SESSION['id']."')",$db);
				$changes[$changesection].='News has been inserted into database<br>';
			}
		else
			{
				$changes[$changesection].='News could not be inserted into database<br>';
				if (empty($_POST['title']))
					{
						$changes[$changesection].='Title missing<br>';
					}
				if (empty($_POST['text']))
					{
						$changes[$changesection].='Text missing<br>';
					}
				$changes[$changesection].='<hr>';
			}
	}
Dazu ein paar kleine Anmerkungen:
  1. Was in $changes[$changesection] geschrieben wird wird spaeter im Template eingetragen und damit ausgegeben. An der Stelle passieren bei Dir also die Ausgaben.
  2. quote_string() ist eine kleine Funktion welche die Magic-Quotes-Einstellung prueft und Strings entsprechend escaped.
 
PHP:
if (empty($name) || empty($betreff)) 
   {
     echo 'der Name oder der Betreff fehlt';
     // weiterer code ...
     // eine header() - Anweisung ist NACH einer echo - Anweisung nicht mehr möglich,
     // es sei denn es wird mit Variablen gearbeitet
  }
else
  {
    echo $name .' <- Name : Betreff -> '. $betreff;
  }

Du kannst zwar mehrere if() Anweisungen mit exit() verbinden, aber vielleicht schaust du dir mal die elseif() Anweisung an. Bzw. auch switch()
 
Hey,

danke schonmal für die Antworten. :)

Nur, geht das mit der Abfrage denn nu auch bei mir? mit meinem Script?

jetzt ist aber folgendes problem:
ich gebe einen namen ein, klicke auf "feedback senden" und er sagt, bitte gib einen Namen ein, obwohl ich den doch eingegeben hab.

danke
 
Klar, Du kannst im Grunde meinen Codeschnipsel hernehmen und meine Variablen durch Deine ersetzen. Hier und da noch ein wenig anpassen (z.B. quote_string() rausschmeissen) und gut ist.
 
Hey,

ich habe mir jetzt überlegt, dein Script umzuformulieren und zu benutzen :)

Nur, wie baue ich da denn die header-funktion ein? So?:

PHP:
   1.
      if (isset($_POST['insert']))
   2.
          {
   3.
              if ((!empty($_POST['title'])) && (!empty($_POST['text'])))
   4.
                  {
   5.
                      mysql_query("insert into `news` (`title`,`text`,`newsdate`,`userid`) values ('".quote_string($_POST['title'])."','".quote_string($_POST['text'])."','".time()."','".$_SESSION['id']."')",$db);
   6.
                      $changes[$changesection].=header ("location: ?section=index");
   7.
                  }
   8.
              else
   9.
                  {
  10.
                      $changes[$changesection].='header ("location: ?section=index");
  11.
                      if (empty($_POST['title']))
  12.
                          {
  13.
                              $changes[$changesection].=header ("location: ?section=index");
  14.
                          }
  15.
                      if (empty($_POST['text']))
  16.
                          {
  17.
                              $changes[$changesection].= header ("location: ?section=index");
  18.
                          }
  19.
                      $changes[$changesection].=header ("location: ?section=index");
  20.
                  }
  21.
          }

Ehm, ja, also halt nur ohne die nummerierung^^


David
 
Mit dem Teil
PHP:
header('Location: ...');
exit;
ersetzt Du einfach mein Ausgabearray $changes.

Und dieser Teil:
PHP:
             else
                  {
                      $changes[$changesection].='header ("location: ?section=index");
                      if (empty($_POST['title']))
                          {
                              $changes[$changesection].=header ("location: ?section=index");
                          }
                      if (empty($_POST['text']))
                          {
                              $changes[$changesection].= header ("location: ?section=index");
                          }
                      $changes[$changesection].=header ("location: ?section=index");
                  }
macht ja auch nicht grad Sinn.
Denn dabei wird mindestens 3 mal
PHP:
header ("location: ?section=index");
ausgefuehrt.
 
macht ja auch nicht grad Sinn.
Denn dabei wird mindestens 3 mal
PHP:
header ("location: ?section=index");
ausgefuehrt.

--> Ich hatte schon vor, an das ?section=index noch fehlermeldungen und so anzuhängn ;)

Ich probier mal kurz das Script aus:

...
...
...
...
...
...

Folgende Version habe ich nun "geschrieben":
PHP:
<?php
	$name					= $_POST['name'];
	$email				= $_POST['email'];
	$homepage			= $_POST['homepage'];
	$betreff			= $_POST['betreff'];
	$nachricht		= $_POST['nachricht'];
	$tag					= date("d.m.Y");
	$uhr					= date("H:i");
	$datum				= $tag ." um ". $uhr;

  	if ((!empty($name)) && (!empty($email)) && (!empty($homepage)) && (!empty($betreff)) && (!empty($nachricht)))
			{
				$Query = "INSERT INTO
										feedback (`name`, `email`, `homepage`, `betreff`, `nachricht`, `datum`)
									VALUES
										('$name', '$email', '$homepage', '$betreff', '$nachricht', '$datum')";
			  $Result = mysql_query($Query);
			  header ("location: ?section=index&send=1");
				exit;
                  
      }
    else
      {
      	header ("location: ?section=kontakt&felder=1"); //schickt fehlermeldung
				exit;
                      
        if (empty($name))
        	{
						header ("location: ?section=kontakt&name=1"); //schickt fehlermeldung: name
						exit;
        	}
				if (empty($betreff))
        	{
						header ("location: ?section=kontakt&betreff=1"); //schickt fehlermeldung: betreff
						exit;
        	}
				if (empty($nachricht))
        	{
						header ("location: ?section=kontakt&nachricht=1"); //schickt fehlermeldung: nachricht
						exit;
        	}
      }
?>
So, wieder das Problem:
ich gebe nur "Name" ein, und er sagt, "bitte gib einen namen ein":

Hier probiert es selber:
http://www.dfmusik.de/index.php?section=kontakt



David
 
Zuletzt bearbeitet:
Zurück