kostenloser Webspace werbefrei: lima-city


kleines Community script mit Sessions

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    losebettler1

    losebettler1 hat kostenlosen Webspace.

    hi,
    ich beschäftige mich jetzt seit längerem mit PHP und hab mir ein Community script gebastelt.
    nun wollte ich das (meines erachtens sehr schlanke und leicht modifizierbare) community als tutorial hier reinstellen.
    geht aber nicht mehr, die funktion wurde ja abgeschafft ...

    mich würde aber dennoch intressieren was ihr von dem script haltet und ob ihr mir noch nützliche tipps habt.

    >>>
    falls es einer ausprobieren möchte,
    1. in mysql muss eine datenbank mit namen "community" bestehen, oder in der datei "create_tables.php und db.php" anpassungen vorgenommen werden.
    2. create_table.php einmal ausführen
    3. einloggen mit username:admin & passwort: admin
    <<<



    index.php
    <?PHP
    include("config/db.php");
    session_start();
    ?>
    <head>
    <title>little Community</title>
    </head>
    <body>
    <center>
            <table style="width:800px;border-width:1px;border-style:solid;border-color:black;" cellspacing="5px">
                   <tr>
                       <td style="background:#f3f3f3;" colspan="2" style="border-width:1px;border-style:solid;border-color:black;">
                       <a href="index.php" ><font style="font-size:30px;font-family:ms comic sans,georgia,arial;">little Community</a></a>
                       </td>
                   </tr>
                   <tr>
                       <td width="100" style="border-width:1px;border-style:solid;border-color:black;">
                          <?PHP if($_SESSION['user']==""){ echo "Menü"; }else{ ?>Menü<br><br>
                          <?PHP if($_SESSION['user']=="admin"){
                              echo '<a href="index.php?location=config/admin">Admin</a><br>';
                          } ?>
                          <a href="index.php?location=logout">Ausloggen</a><br><br>
                       <?PHP
                   }
                   ?></td>
                       <td width="700" style="border-width:1px;border-style:solid;border-color:black;">
                           <?PHP if($_GET['location']==""){
                               include ("start.php");
                           }
                           else
                           {
                               include("$_GET[location].php");
                           }
                           ?>
                       </td>
                   </tr>
            </table>
    </center>
    </body>


    login.php
    <?PHP
    include("config/db.php");
    if($_GET['login']=="false"){
    echo "<b>Deine eingegebenen Daten waren falsch! Versuchs nochmal.<br><br></b>";
    }
    ?>
    <form action="login.php" method="POST">
    Username:<br>
    <input type="name" name="name" /><br>
    Passwort:<br>
    <input type="password" name="passwort" /><br><br>
    <input type="submit" name="login" value=" LOGIN " />
    </form>
    <br>
    <a href="index.php?location=login&register=true">Neuen Account anlegen?</a>
    <?PHP
    if($login==" LOGIN "){
        $md5 = md5($passwort);
    $sql = mysql_query("select * from user where user='$name' and passwort='$md5'");
    if(mysql_num_rows($sql) > 0){
        session_start();
        $data = mysql_fetch_array($sql);
        $_SESSION['user'] = $data['user'];
        header ("location:index.php");
    }
    else
    {
        header("location:index.php?location=login&login=false");
    }
    }
    
    if($registrieren==" REGISTRIEREN "){
    if($name=="" or $passwort==""){
    echo "<br>Benutzername oder Passwort fehlt.";
    }else{
        $sql = mysql_query("SELECT * from user where user='$name'");
        if(mysql_num_rows($sql) > 0){
            echo "<br>Username ist schon vergeben.";
        }else{
            $md5 = md5($passwort);
            mysql_query("INSERT INTO user (user, passwort)values('$name', '$md5')");
            echo "<br>Erfolgreich Registriert, du kannst dich nun Einloggen";
        }
        }
    
    }
    else {
    if($_GET['register']=="true"){
        ?>    <hr><br>
        <form action="index.php?location=login" method="post">
        Gewünschter Username:<br>
        <input type="name" name="name" /><br><br>
        Passwort:<br>
        <input type="password" name="passwort" /><br><br>
        <input type="submit" name="registrieren" value=" REGISTRIEREN " />
        </form>
        <?PHP
    
    }
    }
    ?>


    logout.php
    <?php
    ob_start ();
    
    session_start ();
    session_unset ();
    session_destroy ();
    
    header ("Location: index.php");
    ob_end_flush ();
    ?>


    start.php
    <?PHP
    include ("config/check.php");
    
    echo " SERVUS $_SESSION[user]";
    ?>


    config/
    admin.php
    <?PHP
    include("db.php");
    session_start();
    if($_SESSION['user']=="admin"){  ?>
    <table><tr><td>
    <a href="index.php?location=config/admin&action=user">Benutzer Bearbeiten</a>
    <td><tr><table>
    <?PHP
    if($_GET['action']=="user"){?>
    <form action="index.php?location=config/admin&action=user" method="post">
    <table>
    <tr>
        <th>Nickname</th><th>Passwort</th><th>md5</th><th>Bearbeiten</th><th>Löschen</th>
    </tr>
    <?PHP
    if($_POST['bearbeiten']=="Bearbeiten"){
          if($_POST['md5']=="ok"){
            $pass = md5($_POST['passwort']);
        }
        else
        {
            $pass = $_POST['passwort'];
        }
        
        mysql_query("UPDATE user SET user='$_POST[user]', passwort='$pass' where id='$_POST[id]'");
    
    }
    if($_POST['loeschen']=="Löschen"){
        mysql_query("DELETE from user where id='$_POST[id]'");
    }
    $sql = mysql_query("select * from user");
    while ($line = mysql_fetch_array($sql)){ ?>
    <tr>
        <td><input type="name" name="user" value="<?PHP echo $line['user'];?>" /></td>
        <td><input type="name" name="passwort" value="<?PHP echo $line['passwort'];?>" /></td>
        <td><input type="checkbox" name="md5" value="ok" />
            <input type="hidden" name="id" value="<?PHP echo $line['id'];?>" /></td>
        <td><input type="submit" name="bearbeiten" value="Bearbeiten" /></td>
        <td><input type="submit" name="loeschen" value="Löschen" ´/></td>
    </tr>
    <?PHP
    }
    ?>
    </table>
    </form>
    <?PHP
    }
    }
    else
    {
        echo "Du hast hier nichts zu suchen!";
    }
    ?>


    config/
    check.php
    <?PHP
    session_start();
    if ($_SESSION['user']==""){
      header ("Location: index.php?location=login");
    }
    ?>


    config/
    db.php
    <?PHP
    
    $dbname="community";
    
    $dbhost="localhost";
    
    $dbuser="root";
    
    $dbpass="";
    
    mysql_connect($dbhost,$dbuser,$dbpass);
    
    mysql_select_db($dbname);
    
    ?>


    config/
    create_table.php
    <?PHP
    
        include("db.php");
        
        
    mysql_query("CREATE TABLE IF NOT EXISTS `user` (
      `id` int(255) NOT NULL AUTO_INCREMENT,
      `user` varchar(255) NOT NULL,
      `passwort` varchar(255) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;");
    
    mysql_query("INSERT INTO `user` (`id`, `user`, `passwort`) VALUES
    (1, 'admin', '21232f297a57a5a743894a0e4a801fc3')");
    
    ?>
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Du übergibst an mehreren Stellen Usereingaben ungeprüft an die Datenbank. Das solltest Du schnellstens ändern, sonst ist das Skript unsicher. Stichwort: SQL-Injection.

    FF
  4. Autor dieses Themas

    losebettler1

    losebettler1 hat kostenlosen Webspace.

    mercy, davon hatte ich noch gar nie gehört ;-)

    hab mich mal in wiki belesen und bin auf
    - mysql_real_escape_string
    - intval

    gestossen.

    mysql_real_escape_string ist sehr effektiv, und würde vermutlich auch auf mein script passen,
    intval versteh ich noch nicht so richtig, wäre mir aber lieber weils weniger schreibarbeit ist ;-)

    bewirkt intval den selben schutz wie mysql_real_escape_string oder ist evlt. sogar sinnvoller? Kann mir das jemand erklären?

    Bei PHP.net hab ich mir die beiden funktionen mal angesehen und bei mysql_real_escape_string wird erklärt wie man sich ohne passwort einloggen kann. (' OR ''=') aber wen mein passwort zuvor md5 verschlüßelt wird, bevor die abfrage erfolgt ist diese sicherheitslücke ja geschloßen?!

    wo kann mir dann sql-injection den dann noch gefährlich werden?
  5. Du kannst mysql_real_escape_string nicht mit intval vergleichen. Intval ist nur für Zahlen nützlich, es sorgt dafür, dass du in einer Variable keine Buchstaben oder andere Zeichen drin stehen hast. Das mysql_real_escape_string sorgt dagegen dafür, dass gefährliche Zeichen unschädlich gemacht werden.

    Zur Sache mit dem Passwort: In diesem Fall dürftest du Recht haben, wenn du das Passwort erst md5-verschlüsselst bevor es in die Datenbank kommt, dürfte es keine Gefahr darstellen. Gefahr bietet sich jedoch bei allen anderen Feldern, wo die Eingabe des Nutzers so wie sie ist in der Datenbank abgespeichert werden soll.
  6. x*****k

    Noch was in der Datei login.php.

    $passwort und $name bitte durch $_POST['passwort'] und $_POST['name'] ersetzen.
    Allgemein solltest du in PHP immer angeben, woher der Wert der Variable kommt, ansonsten kann das böse Überraschungen geben.
    Am problematischsten ist das bei Server-Side-Includes, wobei ich sehe, dass du diese mit $_GET behandelst (ansonsten wäre man theoretisch in der Lage, jeden beliebigen Code auf deinem Server auszuführen)
  7. Autor dieses Themas

    losebettler1

    losebettler1 hat kostenlosen Webspace.

    Danke für die Antworten. Ich bin eben noch ein n00b, gerade was thema Sicherheit angeht ;-)

    ich hab die admin.php & login.php nochmal gründlich überarbeitet:

    config/
    admin.php
    <?PHP
    include("db.php");
    session_start();
    if($_SESSION['user']=="admin"){  ?>
    <table><tr><td>
    <a href="index.php?location=config/admin&action=user">Benutzer Bearbeiten</a>
    <td><tr><table>
    <?PHP
    if($_GET['action']=="user"){?>
    <form action="index.php?location=config/admin&action=user" method="post">
    <table>
    <tr>
        <th>Nickname</th><th>Passwort</th><th>md5</th><th>Bearbeiten</th><th>Löschen</th>
    </tr>
    <?PHP
    if($_POST['bearbeiten']=="Bearbeiten"){
          if($_POST['md5']=="ok"){
            $pass = md5($_POST['passwort']);
        }
        else
        {
            $pass = $_POST['passwort'];
        }
        $user = mysql_real_escape_string($_POST['user']);
        $passwort = mysql_real_escape_string($pass);
        $id = mysql_real_escape_string($_POST['id']);
        mysql_query("UPDATE user SET user='$user', passwort='$passwort' where id='$id'");
    
    }
    if($_POST['loeschen']=="Löschen"){
        $id = mysql_real_escape_string($_POST['id']);
        mysql_query("DELETE from user where id='$id'");
    }
    $sql = mysql_query("select * from user");
    while ($line = mysql_fetch_array($sql)){ ?>
    <tr>
        <td><input type="name" name="user" value="<?PHP echo $line['user'];?>" /></td>
        <td><input type="name" name="passwort" value="<?PHP echo $line['passwort'];?>" /></td>
        <td><input type="checkbox" name="md5" value="ok" />
            <input type="hidden" name="id" value="<?PHP echo $line['id'];?>" /></td>
        <td><input type="submit" name="bearbeiten" value="Bearbeiten" /></td>
        <td><input type="submit" name="loeschen" value="Löschen" ´/></td>
    </tr>
    <?PHP
    }
    ?>
    </table>
    </form>
    <?PHP
    }
    }
    else
    {
        echo "Du hast hier nichts zu suchen!";
    }
    ?>


    login.php
    <?PHP
    include("config/db.php");
    if($_GET['login']=="false"){
    echo "<b>Deine eingegebenen Daten waren falsch! Versuchs nochmal.<br><br></b>";
    }
    ?>
    <form action="login.php" method="POST">
    Username:<br>
    <input type="name" name="name" /><br>
    Passwort:<br>
    <input type="password" name="passwort" /><br><br>
    <input type="submit" name="login" value=" LOGIN " />
    </form>
    <br>
    <a href="index.php?location=login&register=true">Neuen Account anlegen?</a>
    <?PHP
    if($_POST['login']==" LOGIN "){
        $md5 = md5($_POST['passwort']);
        $name = mysql_real_escape_string($_POST['name']);
    $sql = mysql_query("select * from user where user='$name' and passwort='$md5'");
    if(mysql_num_rows($sql) > 0){
        session_start();
        $data = mysql_fetch_array($sql);
        $_SESSION['user'] = $data['user'];
        header ("location:index.php");
    }
    else
    {
        header("location:index.php?location=login&login=false");
    }
    }
    
    if($_POST['registrieren']==" REGISTRIEREN "){
    if($_POST['name']=="" or $_POST['passwort']==""){
    echo "<br>Benutzername oder Passwort fehlt.";
    }else{
        $name = mysql_real_escape_string($_POST['name']);
        $sql = mysql_query("SELECT * from user where user='$name'");
        if(mysql_num_rows($sql) > 0){
            echo "<br>Username ist schon vergeben.";
        }else{
            $md5 = md5($_POST['passwort']);
            $name = mysql_real_escape_string($_POST['name']);
            mysql_query("INSERT INTO user (user, passwort)values('$name', '$md5')");
            echo "<br>Erfolgreich Registriert, du kannst dich nun Einloggen";
        }
        }
    
    }
    else {
    if($_GET['register']=="true"){
        ?>    <hr><br>
        <form action="index.php?location=login" method="post">
        Gewünschter Username:<br>
        <input type="name" name="name" /><br><br>
        Passwort:<br>
        <input type="password" name="passwort" /><br><br>
        <input type="submit" name="registrieren" value=" REGISTRIEREN " />
        </form>
        <?PHP
    
    }
    }
    ?>


    Nun sollte das Script sicher sein?!
    Hatt jemand noch tipps wie mans besser machen könnte?

    gruß

    Beitrag zuletzt geändert: 14.12.2009 8:35:01 von losebettler1
  8. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!