• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Newsscript Login

Macloc

Elstar
Registriert
15.03.07
Beiträge
73
Guten Abend,
ich habe ein simples Newsscript um einige funktionen erweitert. Bis jetzt hat auch alles super geklappt. Nun möchte ich noch den Benutzerlogin des Scriptes sicherer machen.
Momentan wird das Passwort an die URL übergeben um sich einzulogen bzw. um funktionen wie zum Beispiel bearbeiten, neu erstellen usw. verwendet werden können.

D.h. dass das Passwort im Klartext in der URL steht. Das möchte ich unterbinden!
Nur leider schaffe ich es nicht. Mir wäre eine methode mir md5 am liebsten.
Kann mir jemand helfen? Wäre echt super!!!

Code:
<?php require("config.php"); ?>

<?php echo $title; ?>
     
<?php
  //load configuration
  
  
  //connect to database
  @mysql_connect($db_server,$db_user,$db_password) or die("Database server connection failed. Check variables \$db_server, \$db_user and \$db_password in config.php");
  @mysql_select_db($db_name) or die("Selecting database failed. Check variable \$db_name in config.php");
  
?>

<?php
  $pwd = $_GET["pwd"];

  //simple login
  if(isset($pwd) && ($pwd == $passwd)){
  $edit = $_GET["edit"];
  $del = $_GET["del"]; 
    
     
    //submit changes
    if(isset($_POST["edit_submit"])){
      $news = str_replace("\n","<br>",$_POST["news"]);
      $header2 = str_replace("\n","<br>",$_POST["header"]);
      
      @mysql_query("UPDATE $db_table SET date=".mktime($_POST["date_hour"],$_POST["date_minute"],0,$_POST["date_month"],$_POST["date_day"],$_POST["date_year"]).",news='$news',header='$header2',links='{$_POST["links"]}' WHERE id={$_POST["edit"]};");
      
      
      //error occurred
      if(@mysql_error()){
        ?><p>Bearbeitung schlug fehl: <?php echo @mysql_error(); ?></p>
      <p><a href="javascript:history.back();">Zurück.</a></p><?php
      //successful
      }else{
        ?><p>Eintrag wurde erstellt. <a href="newsa.php?pwd=<?php echo $pwd; ?>">Hier weiter.</a></p><?php
      }
    //edit an entry
    }else if(isset($edit)){
      $row = @mysql_fetch_array(@mysql_query("SELECT * FROM $db_table WHERE id=$edit;"));
      $news = str_replace("<br>","\n",$row["news"]);
      $header2 = str_replace("<br>","\n",$row["header"]);

?>
<form action="newsa.php?pwd=<?php echo $pwd; ?>" method="post">
  <input type="hidden" name="edit" value="<?php echo $edit; ?>">
  <table border="0" cellpadding="2" cellspacing="2">
    <tr>
      <td>Date:</td>
      <td>
        <?php
          $d = date("d",$row["date"]);
          $m = date("m",$row["date"]);
          $y = date("Y",$row["date"]);
          $h = date("H",$row["date"]);
          $s = date("i",$row["date"]);
        ?>
        <select name="date_month">
          <?php
            for($i=1;$i<=12;$i++){ 
              ?><option value="<?php echo $i; ?>"<?php if($i==$m){ ?> selected<?php } ?>><?php echo $i; ?></option><?php
            }
          ?>
        </select>
        <select name="date_day">
          <?php
            for($i=1;$i<=31;$i++){ 
              ?><option value="<?php echo $i; ?>"<?php if($i==$d){ ?> selected<?php } ?>><?php echo $i; ?></option><?php
            }
          ?>
        </select>
        <select name="date_year">
          <?php
            for($i=2000;$i<=$y+10;$i++){ 
              ?><option value="<?php echo $i; ?>"<?php if($i==$y){ ?> selected<?php } ?>><?php echo $i; ?></option><?php
            }
          ?>
        </select>
        -
        <select name="date_hour">
          <?php
            for($i=0;$i<=23;$i++){ 
              ?><option value="<?php echo $i; ?>"<?php if($i==$h){ ?> selected<?php } ?>><?php echo $i; ?></option><?php
            }
          ?>
        </select>
    :
    <select name="date_minute">
          <?php
            for($i=0;$i<=59;$i++){ 
              ?><option value="<?php echo $i; ?>"<?php if($i==$s){ ?> selected<?php } ?>><?php echo $i; ?></option><?php
            }
          ?>
        </select>
      </td>
    </tr>
    <tr>
      <td valign="top">&Uuml;berschrift:</td>
      <td><textarea name="header" cols="40" rows="1"><?php echo $header2; ?></textarea></td>
    </tr>  
    <tr>   
      <td valign="top">News:</td>
      <td><textarea name="news" cols="40" rows="10"><?php echo $news; ?></textarea></td>
    </tr>
    <tr>
      <td valign="top">Links:<br>(comma separated)</td>
      <td><textarea name="links" cols="40" rows="3"><?php echo $row["links"]; ?></textarea></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td><input type="submit" name="edit_submit" value="Speichern"></td>
    </tr>
  </table>
</form>
<?php
    //delete an entry
    }else if(isset($del)){
      @mysql_query("DELETE FROM $db_table WHERE id=$del;");
      
      //error occurred
      if(@mysql_error()){
        ?><p>Löschen schlug fehl: <?php echo @mysql_error(); ?></p>
    <p><a href="javascript:history.back();">Zurück</a></p><?php
      //successful
      }else{
        ?><p>Eintrag wurde gelöscht. <a href="newsa.php?pwd=<?php echo $pwd; ?>">Hier weiter.</a></p><?php
      }
    //insert an entry
    }else if(isset($_POST["new_submit"])){
      $news = str_replace("\n","<br>",$_POST["news"]);
      $header2 = str_replace("\n","<br>",$_POST["header"]);
      
      @mysql_query("INSERT INTO $db_table (date,news,header,links) VALUES(".mktime($_POST["date_hour"],$_POST["date_minute"],0,$_POST["date_month"],$_POST["date_day"],$_POST["date_year"]).",'$news','$header2','{$_POST["links"]}');");
      
      //error occurred
      if(@mysql_error()){
        ?><p>Eintrag erstellen fehlgeschlagen: <?php echo @mysql_error(); ?></p>
    <p><a href="javascript:history.back();">Zurück</a></p><?php
      //successful
      }else{
        ?><p>Eintrag wurde erstellt. <a href="newsa.php?pwd=<?php echo $pwd; ?>">Hier weiter.</a></p><?php
      }
    //new entry
    }else if(isset($_GET["new"])){
?>
<form action="newsa.php?pwd=<?php echo $pwd; ?>" method="post">
  <table border="0" cellpadding="2" cellspacing="2">
    <tr>
      <td>Date:</td>
      <td>
        <?php
          $d = date("d");
          $m = date("m");
          $y = date("Y");
          $h = date("H");
          $s = date("i");
        ?>
        <select name="date_month">
          <?php
            for($i=1;$i<=12;$i++){ 
              ?><option value="<?php echo $i; ?>"<?php if($i==$m){ ?> selected<?php } ?>><?php echo $i; ?></option><?php
            }
          ?>
        </select>
        <select name="date_day">
          <?php
            for($i=1;$i<=31;$i++){ 
              ?><option value="<?php echo $i; ?>"<?php if($i==$d){ ?> selected<?php } ?>><?php echo $i; ?></option><?php
            }
          ?>
        </select>
        <select name="date_year">
          <?php
            for($i=2000;$i<=$y+10;$i++){ 
              ?><option value="<?php echo $i; ?>"<?php if($i==$y){ ?> selected<?php } ?>><?php echo $i; ?></option><?php
            }
          ?>
        </select>
        -
        <select name="date_hour">
          <?php
            for($i=0;$i<=23;$i++){ 
              ?><option value="<?php echo $i; ?>"<?php if($i==$h){ ?> selected<?php } ?>><?php echo $i; ?></option><?php
            }
          ?>
        </select>
    :
    <select name="date_minute">
          <?php
            for($i=0;$i<=59;$i++){ 
              ?><option value="<?php echo $i; ?>"<?php if($i==$s){ ?> selected<?php } ?>><?php echo $i; ?></option><?php
            }
          ?>
        </select>
      </td>
    </tr>
    <tr>
      <td valign="top">&Uuml;berschrift:</td>
      <td><textarea name="header" cols="40" rows="1"><?php echo $header2; ?></textarea></td>
    </tr>  
    <tr>
      <td valign="top">News:</td>
      <td><textarea name="news" cols="40" rows="10"></textarea></td>
    </tr>
    <tr>
      <td valign="top">Links:<br>(comma separated)</td>
      <td><textarea name="links" cols="40" rows="3"></textarea></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td><input type="submit" name="new_submit" value="Speichern"></td>
    </tr>
  </table>
</form>
<?php
    //print news list
    }else{
      //get all entries
      $result = @mysql_query("SELECT * FROM $db_table ORDER BY date DESC;");
      $colored = true;


      ?><p><a href="newsa.php?pwd=<?php echo $pwd; ?>&new">Neue News</a> | <a href="newsa.php">Logout</a></p><br />
      <table border="0" cellpadding="3" cellspacing="0" width="100%"><?php
      
      //print entries
      while($row=@mysql_fetch_array($result)){
        $row["news"] = strip_tags($row["news"]);

          ?><tr<?php if($colored){ ?> style="background-color:#eee;"<?php } ?>>
            <td valign="top"><strong><?php echo $row["id"]; ?></strong></td>
            <td valign="top"><?php echo date("m/d/Y - H:i",$row["date"]); ?></td>
            <td valign="top"><?php echo (strlen($row["header"])>200 ? (substr($row["header"],0,20)."...") : $row["header"]); ?></td>
            <td valign="top"><?php echo (strlen($row["news"])>200 ? (substr($row["news"],0,20)."...") : $row["news"]); ?></td>
            <td valign="top" width="50"><?php echo ($row["links"] != "" ? count(explode(",",$row["links"])) : 0); ?> link(s)</td>
            <td><a href="newsa.php?pwd=<?php echo $pwd; ?>&edit=<?php echo $row["id"]; ?>">Bearbeiten</a></td>
            <td><a href="newsa.php?pwd=<?php echo $pwd; ?>&del=<?php echo $row["id"]; ?>">Löschen</a></td>
          </tr><?php

        $colored = !$colored;
      }

      ?></table><?php
    }
  }else{
    //print login form
    echo $login;
  }
  //print link to news
  ?>
  
  <p align="left"><a href="index.php">News</a></p>
  
  
  <?php  
  //close database connection
  @mysql_close();

  ?>
in der config.php steht das Passwort als Klartext.
Siehe:

Code:
...
...
...
  $passwd = "xxx";

$login = <<<EOT
          <form action="newsa.php" method="get">
            Password: <input name="pwd" type="password"> <input type="submit" value="Login">
          </form>
          <?php      
EOT;
Wäre spitze wenn mir jemand helfen würde!

Grüße, Qap
 

creative7even

Jerseymac
Registriert
23.02.05
Beiträge
454
hi!

der Ansatz, das Passwort in der URL mitzuschleifen - ob als MD5 oder Plain ist nicht zu empfehlen. Ich würde den Einsatz von Sessions empfehlen - php.net - sessions

Nebenbei könnte man noch die Queries gegen Injections absichern - php.net - mysql_real_escape_string

die Beispiele geben Aufschluss über die Verwendung der Funktionen - auch finden sich in den User-Posts hilfreiche Snippets (also ruhig mal querlesen).

lg
 

Macloc

Elstar
Registriert
15.03.07
Beiträge
73
Guten Abend,
das hatte ich auch schon gefunde. Ich wusste nur leider nicht wie ich das korrekt einbauen muss...
Muss ich dort viel ändern?

Ich hatte in der config.php eine Variable $hash:"HIER_WAR_DER_HASH";

Für den Login hatte ich in der *.php Datei die Zeile if(isset($pwd) && ($pwd == $passwd)){
mit folgendem ausgetauscht:


...
....
...
if (md5(($_POST["pwd"])==$hash)
{
...
... Hier war der Rest des Quellcodes :)
...
}
?>

Das hatte leider nicht funktioniert, ich bekamm einen Prase error. Verstand aber nicht warum.

Muss ich die Session um die einzelnen funktionen machen?

Gruß, Macloc
 

karolherbst

Danziger Kant
Registriert
11.05.07
Beiträge
3.878
Code:
if (md5($_POST["pwd"])==$hash)

Klammer nicht vergessen ;) oder keine Klammern zu viel setzen...
 

Macloc

Elstar
Registriert
15.03.07
Beiträge
73
Code:
if (md5($_POST["pwd"])==$hash)
Klammer nicht vergessen ;) oder keine Klammern zu viel setzen...

Oh, merci! Hatte ich garnicht gesehen. Danke.

Nun baut sich die Seite auf :).

Leider wird nach dem Login, die "neue" Seite nicht geladen.

Ich habe nun folgendes geändern.
Code:
<?php

  //connect to database
  @mysql_connect($db_server,$db_user,$db_password) or die("Database server connection failed. Check variables \$db_server, \$db_user and \$db_password in config.php");
  @mysql_select_db($db_name) or die("Selecting database failed. Check variable \$db_name in config.php");
  
  $pwd = $[B][COLOR=Red]_POST[/COLOR][/B]["pwd"]; // GET wird zu POST

  //simple login
  //if(isset($pwd) && ($pwd == $passwd)){
  
[B][COLOR=Red]  if (md5($_POST["pwd"])==$hash)
  {[/COLOR][/B]
 
  $edit = $_GET["edit"];
  $del = $_GET["del"]; 
...
...
...
 [B][COLOR=Red] }[/COLOR][/B]
in der config.php

Code:
$hash:"xxxx";

$login = <<<EOT
          <form action="newsa.php" method="[COLOR=Red][B]post[/B][/COLOR]">
            Password: <input name="pwd" type="password"> <input type="submit" value="Login">
          </form>
          <?php      
EOT;

Wie sag ich dem Script das er nun, die "neue" Seiten laden soll?

Muss ich die Session, hier einbauen?
Früher habe ich das mit:
Code:
<a href="newsa.php?pwd=[COLOR=Red][B]<?php echo $pwd; ?>[/B][/COLOR][B][COLOR=SeaGreen]&edit[/COLOR][/B]=[B][COLOR=MediumTurquoise]<?php echo $row["id"]; ?>[/COLOR][/B]">Bearbeiten</a>
Hier wurde das Passwort übergeben.
Hier wirde die Variable edit übergeben.
Hier welcher SQL eintrag ausgegeben werden soll.

Grüße, Macloc
 

creative7even

Jerseymac
Registriert
23.02.05
Beiträge
454
hallo!

mit Sessions kann man Informationen an einen User "binden"...
Initialisiert wird das ganze mit session_start(void). Zu beachten gilt, dass vor dem Aufruf der Methode KEIN Output erlaubt ist (weder mit echo/print noch als plain html - auch keine Leerzeichen/Leerzeilen)!
Infos werden in das Superglobale Array $_SESSION gespeichert. Mit Hilfe dieser kann man bspw. als Flag einen User-Status auf "loggedIn" setzen.

Code:
<?php
  session_start();

  if($action == 'login') {
    // check submitted password - if OK set loggedIn-flag to true
    ...
    $_SESSION['userLoggedIn'] = true;

  } else if($action == 'logout') {
    unset($_SESSION['userLoggedIn']);
  }

  ...  

  if($_SESSION['userLoggedIn'] === true) {
    // show edit-form
    ...
  }

?>
 
  • Like
Reaktionen: Macloc

Macloc

Elstar
Registriert
15.03.07
Beiträge
73
Merci!@creative7even. Nun läuft alles!

Vielen Dank.

/Kann geschlossen werden.

Grüße, Macloc