1. #1
    Avatar von Snees
    Registriert seit
    18.11.2011
    Beiträge
    1.001
    Thanked 590 Times in 319 Posts

    Standard Ein einfaches "System"

    Hier eine kleine Übungsarbeit in PHP von mir,
    der Code ist nicht wirklich sauber und nicht gegen Injections abgesichert.

    Die Variablen werden per GET übergeben, weil ich vor hatte die Scripte aus einem Programm heraus aufzurufen und dort bevorzuge ich die GET-Methode.

    Das System ist noch lange nicht ausgereift.

    Documentation.txt
    PHP-Code:
    # Documentation of system #
        
        
    userroot
    _____________
        password
    :
    ____________________
        database
    system
    _________________________
        tables
    userdatalog
        _____________________
            columns
    :
            
    ________
            userdata
    :
                
    id
                username
                password
                ip
                date
            ____________
            log
    :
                
    logtext
                ip
                date
        _____________________

    files
    :
    ________________
        log
    .php
        query
    .php
        insert
    .php
        login
    .php
        connection
    .php
        settings
    .php
        archive
    .php

    How to 
    use:
    ___________

    [1]     settings.php editieren
    [2]        system.sql importieren
    [3]        alle dateien hochladen

    _______________________
    Erklärung zu query
    .php:
    _______________________    

    query
    .php?a=all Alle Benutzernamen in der Datenbank werden ausgegeben.
    query.php?a=details&user=USERNAME Alle Details zu dem Benutzer USERNAME werden ausgegeben.
    query.php?a=log Der komplette Log wird ausgegeben.

    _________________________________________

    (CCopyright 2012 http://schmitz-dev.net
    _________________________________________ 
    archive.php
    PHP-Code:
    <?php

    include('connection.php');
    include(
    'settings.php');

        
    $abfrage "SELECT version,link,datum FROM archive";
            
    $ergebnis mysql_query($abfrage);
            while(
    $row mysql_fetch_object($ergebnis))
            {
                echo 
    "Version: $row->version ; Datum: $row->datum ; Downloadlink: $row->link <br>";
            }

    ?>
    connection.php
    PHP-Code:
    <?php

    include 'settings.php';

    $verbindung mysql_connect ("$host",
    "$database_user""$database_password")
    or die (
    "keine Verbindung möglich.
     Benutzername oder Passwort sind falsch"
    );

    mysql_select_db("$database")
    or die (
    "Die Datenbank existiert nicht.");

    ?>
    insert.php
    PHP-Code:
    <?php

    include 'settings.php';
    include 
    'connection.php';
    include 
    'log.php';

        
    $security_key "123456789";
        
    $k $_GET["k"];
        
        
    $username $_GET["username"];
        
    $password $_GET["password"];
        
    $salt "ds89dj89jf789sdzfs8d7f6s8df";
        
    $md5_password md5("".$password."".$salt."");
        
    $ip $_SERVER["REMOTE_ADDR"];
        
    $timestamp time();
        
    $date date("d.m.Y - H:i"$timestamp);

        
        if (
    $k == $security_key)
            {
            
    $eintrag "INSERT INTO userdata
            (username, password, ip, date)
            VALUES
            ('
    $username', '$md5_password', '$ip', '$date')";
        
            
    $eintragen mysql_query($eintrag);
        
            if(
    $eintragen == true)
                {
                echo 
    "Eintrag war erfolgreich";
                
    # Log #
                
    logging_on_reg($username$ip$date);
                }
            else
                {
                echo 
    "Fehler beim Speichern <br>".mysql_error();
            }
        }
        else
        {
            echo 
    "Der Key ist falsch.";
        }
        
        
    ?>
    log.php
    PHP-Code:
    <?php

    include 'settings.php';
    include 
    'connection.php';

    function 
    logging_on_reg($username$date$ip)
    {
        
    $logtext "Der Benutzer ".$username." hat sich registriert.";
        
    $eintrag "INSERT INTO log
            (logtext, ip, date)
            VALUES
            ('
    $logtext', '$ip', '$date')";
        
            
    $eintragen mysql_query($eintrag);
        
    }

    function 
    logging_on_login($username$date$ip)
    {
        
    $logtext "Der Benutzer ".$username." hat sich eingeloggt.";
        
    $eintrag "INSERT INTO log
            (logtext, ip, date)
            VALUES
            ('
    $logtext', '$ip', '$date')";
        
            
    $eintragen mysql_query($eintrag);
        
    }

    function 
    logging_on_fail_login($username$date$ip)
    {
        
    $logtext "Der Benutzer ".$username." hat versucht sich einzuloggen, aber das falsche Passwort eingegeben.";
        
    $eintrag "INSERT INTO log
            (logtext, ip, date)
            VALUES
            ('
    $logtext', '$ip', '$date')";
        
            
    $eintragen mysql_query($eintrag);
    }
    ?>
    login.php
    PHP-Code:
    <?php

    include 'settings.php';
    include 
    'connection.php';
    include 
    'log.php';

        
    $username $_GET["username"];
        
    $password $_GET["password"];
        
    $ip $_SERVER["REMOTE_ADDR"];
        
    $timestamp time();
        
    $date date("d.m.Y - H:i"$timestamp);
        
            
    $abfrage "SELECT username, password FROM userdata WHERE username LIKE '$username'";
            
    $ergebnis mysql_query($abfrage);
            while(
    $row mysql_fetch_object($ergebnis))
            {
                
    $pass "$row->password";
                if (
    $pass == $password)
                {
                    echo 
    "Das Passwort ist richtig.";
                    
    logging_on_login($username$date$ip);
                }
                else
                {
                    echo 
    "Das Passwort ist falsch.";
                    
    logging_on_fail_login($username$date$ip);
                }
            }

    ?>
    query.php
    PHP-Code:
    <?php

    include 'settings.php';
    include 
    'connection.php';
    include 
    'log.php';

        
    $action $_GET["a"];
        
        if (
    $action == "all")
            {
                
    # Alle Benutzer werden ausgegeben. #
                
    $abfrage "SELECT username FROM userdata";
                
    $ergebnis mysql_query($abfrage);
                while(
    $row mysql_fetch_object($ergebnis))
                {
                    echo 
    "$row->username <br>";
                }
            }
        else if (
    $action == "details")
            {
                
    # Nur ein bestimmter Benutzer wird mit allen Angaben ausgegeben. #
                
    $user $_GET["user"];
                
    $abfrage "SELECT username, password, ip, date, id FROM userdata";
                
    $ergebnis mysql_query($abfrage);
                while(
    $row mysql_fetch_object($ergebnis))
                {
                    echo 
    "ID: $row->id ; Benutzername: $row->username ; Passwort $row->password ; IP: $row->ip ; Datum: $row->date";
                }
            }
        else if (
    $action == "log")
            {
                
    # Der komplette Log wird ausgegeben. #
                
    $abfrage "SELECT logtext, date, ip FROM log";
                
    $ergebnis mysql_query($abfrage);
                while(
    $row mysql_fetch_object($ergebnis))
                {
                    echo 
    "Datum: $row->date Log: $row->logtext von IP: $row->ip <br>";
                }
            }
        else
            {
                
    # Keine action wird angegeben, gebe Liste der Befehle aus. #
            
    }
    ?>
    settings.php
    PHP-Code:
    <?php

        $host 
    "localhost";
        
    $database_user "root";
        
    $database_password "";
        
    $database "system";

    ?>
    system.sql
    PHP-Code:
    -- phpMyAdmin SQL Dump
    -- version 3.4.5
    -- http://www.phpmyadmin.net
    --
    -- 
    Hostlocalhost
    -- Erstellungszeit23. Feb 2012 um 13:22
    -- Server Version5.5.16
    -- PHP-Version5.3.8

    SET SQL_MODE
    ="NO_AUTO_VALUE_ON_ZERO";
    SET time_zone "+00:00";


    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8 */;

    --
    -- 
    Datenbank: `system`
    --

    -- --------------------------------------------------------

    --
    -- 
    Tabellenstruktur für Tabelle `archive`
    --

    CREATE TABLE IF NOT EXISTS `archive` (
      `
    versionvarchar(20NOT NULL,
      `
    linktext NOT NULL,
      `
    datumvarchar(12NOT NULL
    ENGINE=InnoDB DEFAULT CHARSET=latin1;

    --
    -- 
    Daten für Tabelle `archive`
    --

    INSERT INTO `archive` (`version`, `link`, `datum`) VALUES
    ('0.0.2''http://localhost/system/system-build-0.0.2.rar''23.02.2012');

    -- --------------------------------------------------------

    --
    -- 
    Tabellenstruktur für Tabelle `log`
    --

    CREATE TABLE IF NOT EXISTS `log` (
      `
    logtexttext NOT NULL,
      `
    ipvarchar(20NOT NULL,
      `
    datevarchar(20NOT NULL
    ENGINE=InnoDB DEFAULT CHARSET=latin1;

    --
    -- 
    Daten für Tabelle `log`
    --

    INSERT INTO `log` (`logtext`, `ip`, `date`) VALUES
    ('Der Benutzer test_user hat sich registriert.''::1''22.02.2012 - 18:25'),
    (
    'Der Benutzer test_user hat sich eingeloggt.''::1''22.02.2012 - 18:39'),
    (
    'Der Benutzer test_user hat sich eingeloggt.''::1''22.02.2012 - 18:39'),
    (
    'Der Benutzer test_user hat sich eingeloggt.''::1''22.02.2012 - 18:40'),
    (
    'Der Benutzer test_user hat versucht sich einzuloggen, aber das falsche Passwort eingegeben.''::1''22.02.2012 - 18:40'),
    (
    'Der Benutzer test_user hat sich eingeloggt.''::1''22.02.2012 - 18:42'),
    (
    'Der Benutzer test_user hat versucht sich einzuloggen, aber das falsche Passwort eingegeben.''::1''22.02.2012 - 18:42'),
    (
    'Der Benutzer test_user hat sich eingeloggt.''::1''22.02.2012 - 18:43');

    -- --------------------------------------------------------

    --
    -- 
    Tabellenstruktur für Tabelle `userdata`
    --

    CREATE TABLE IF NOT EXISTS `userdata` (
      `
    idint(10unsigned NOT NULL AUTO_INCREMENT,
      `
    usernamevarchar(24NOT NULL,
      `
    passwordvarchar(24NOT NULL,
      `
    ipvarchar(20NOT NULL,
      `
    datevarchar(20NOT NULL,
      
    PRIMARY KEY (`id`)
    ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=;

    --
    -- 
    Daten für Tabelle `userdata`
    --

    INSERT INTO `userdata` (`id`, `username`, `password`, `ip`, `date`) VALUES
    (1'test_user''1927df6e309b3d5ae30e0318''::1''22.02.2012 - 18:02');

    /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
    /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
    /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */
    Ich bin noch ein Anfänger, aber vielleicht kann ja der ein oder andere etwas mit dem Code anfangen.

    LG

  2. #2
    Avatar von Sky.NET
    Registriert seit
    26.11.2011
    Beiträge
    2.462
    Thanked 2.717 Times in 1.286 Posts
    Blog Entries
    7

    Standard Ein einfaches "System"

    Hübsch gemacht, leider ist das Schnee von Gestern, es gibt mittlerweile MySQLi (das i steht NICHT für Injection), was man unter PHP5 auch verwenden sollte, weil damit Objektrelationale Zugriffe auf die Datenbank gemacht werden können.
    Ein gutes Tutorial (was ich auch durchgearbeitet habe) ist das hier:
    Einführung in die MySQLi-Erweiterung von PHP 5 - MySQL vs MySQLi

    Desweiteren nennt man das was du da programmiert hast ein 'UMS' = User-Managment-System und nicht einfach nur 'System' (is keine Kritik, vielleicht wusstest du das ja nicht, man kann ja nicht Alles wissen).

    Ein Gratis-Beispiel mit Code zum nachschauen und Studieren findest du hier:
    Admidio - Die kostenlose Online-Mitgliederverwaltung für Vereine, Gruppen und Organisationen

    Die gravierendste Sache ist allerdings, dass dein System da total unsicher ist, jeder Anfänger kann sich die Datenbank unter den Nagel reißen, du hast Injections ohne Ende drin. Ich würde mich an deiner Stelle auch nochmal mit dem Thema MySQL+PHP+Sicherheit auseinandersetzen, bevor du Dinge releast, die extrem unsicher sind.
    Ich rate hiermit auch Jedem ab, dieses Projekt irgendwo in einer Produktivumgebung einzusetzen wo fremde Personen Zugriff drauf haben, es sei denn ihr wollt euren Server sowieso verschenken.

    Ansonsten möchte ich noch hinzufügen, dass du mehr objektorientiert programmieren solltest, mit Klassen, die du später wiederverwenden kannst, ist das Leben nämlich viel einfacher. Nur Funktionen zu verwenden halte ich nicht für sehr schlau. Ausserdem lässt das noch zusätzlichen Spielraum für Programmierfehler und damit Sicherheitslücken.

    Gutes Projekt, Gute Idee, bisher ganz gut umgesetzt (bis auf die obigen Kritikpunkte natürlich), weiter so .
    Java:
    Spoiler:

    Lustige Quotes:
    Spoiler:
    Zitat Zitat von Hydra Beitrag anzeigen
    Hier (in Deutschland) kann man keine andere tolle Aktivitäten machen, als zu chillen, shoppen, saufen und Partys feiern xD Ich habe nichts gegen ab und zu mal saufen und Partys feiern, aber das ist doch nicht wirklich das wahre Leben o_o
    Wieso das Internet für die meisten Leute gefährlich ist:
    Zitat Zitat von Silent Beitrag anzeigen
    Ich weiß ja nicht was der Sinn dahinter steckt es heißt immer "security reasons".

  3. #3
    Avatar von Snees
    Registriert seit
    18.11.2011
    Beiträge
    1.001
    Thanked 590 Times in 319 Posts

    Standard Ein einfaches "System"

    Danke Tobi, ich werde mir die Quellen mal ansehen und schauen was ich verbessern kann bzw. anders machen kann.
    Das Projekt ist unsicher, das ist mir auch klar, aber das habe ich auch extra am Anfang gesagt
    Mit Klassen wollte ich mich in der nächsten Zeit auseinandersetzen. Im Sommer fange ich eine Ausbildung zum FiA in einer Firma an, die Shopsoftware mit einem Warenwirtschaftssystem entwickelt, da werde ich bestimmt auch noch einiges lernen
    LG



    /e kleines Update:


    Ich benutze eine neue Tabelle: tab_ums
    ID ist der Primärschlüssel. Einen Sekundärschlüssel gibt es momentan nicht, da ich noch keine weitere Tabelle benutze und so auch keine Beziehung erstellen muss/kann.

    Die Tabelle sieht so aus:

    Klicke auf die Grafik für eine größere Ansicht 

Name:	tabelle6gkkx.png 
Hits:	188 
Größe:	68,3 KB 
ID:	7419


    ums.sql:
    PHP-Code:
    -- phpMyAdmin SQL Dump
    -- version 3.4.5
    -- http://www.phpmyadmin.net
    --
    -- 
    Hostlocalhost
    -- Erstellungszeit28. Feb 2012 um 15:52
    -- Server Version5.5.16
    -- PHP-Version5.3.8

    SET SQL_MODE
    ="NO_AUTO_VALUE_ON_ZERO";
    SET time_zone "+00:00";


    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8 */;

    --
    -- 
    Datenbank: `ums`
    --

    -- --------------------------------------------------------

    --
    -- 
    Tabellenstruktur für Tabelle `tab_ums`
    --

    CREATE TABLE IF NOT EXISTS `tab_ums` (
      `
    idint(11NOT NULL AUTO_INCREMENT,
      `
    usernametext NOT NULL,
      `
    passwordtext NOT NULL,
      `
    ranktext NOT NULL,
      `
    loginsint(11NOT NULL,
      `
    lastiptext NOT NULL,
      `
    regiptext NOT NULL,
      `
    regdatetext NOT NULL,
      
    PRIMARY KEY (`id`)
    ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=;

    /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
    /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
    /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */
    reg.php:
    PHP-Code:
    <?php

    include('connection.php');

    // Es werden keine Fehlermeldungen angezeigt.
    //error_reporting(0);

            // Der Sicherheitskey, damit das Script nicht von einem Unbefugten benutzt werden kann.
            
    $key '8s9dj8jfds789fzasd98fzd68sfhasdf890j';
        
        
    // Der Key muss eingegeben werden, damit das Script benutzt werden kann
        
    $k mysql_real_escape_string($_GET["k"]);
        
        
    // Der Benutzername, der erstellt werden soll.
        
    $username mysql_real_escape_string($_GET["username"]);
        
        
    // Das Passwort wird im Klartext übergeben, allerdings als MD5 gespeichert.
            
    $password mysql_real_escape_string($_GET["password"]);
        
    $md5_password md5($password);
        
        
    // Der Userrang
        
    $rank mysql_real_escape_string($_GET["rank"]);
        
        
    // Die IP-Adresse, von der das Script aufgerufen wird
        
    $ip $_SERVER["REMOTE_ADDR"];
        
        
    // Timestamp, daraus wird die Uhrzeit und das Datum erstellt.
            
    $timestamp time();
        
    $datum date("d.m.Y - H:i"$timestamp);
        
        
    // Überprüfung ob der eingegebene Key richtig ist
        
    If ($k == $key)
            
    // Falls ja:
            
    {
                
    // Key ist richtig.
                // Eintrag erstellen
                
    $eintrag "INSERT INTO tab_ums
                            (username, password, rank, regip, regdate)
                            VALUES
                            ('
    $username', '$md5_password', '$rank', '$ip', '$datum')";
                
    // und eintragen
                
    $eintragen mysql_query ($eintrag);
                
                    If (
    $eintragen == true)
                        
    // Wenn der Eintrag erfolgreich war:
                        
    {
                            echo 
    'Eintrag erfolgreich.';
                        }
                    else
                        
    // und wenn nicht:
                        
    {
                            echo 
    'Es ist ein Fehler aufgetreten. <br>'.mysql_error;
                            exit(
    0);
                        }
            }
        else
            
    // Falls nein:
            
    {
                
    // Key ist nicht richtig.
                
    echo 'Der Key ist nicht richtig.';
                exit(
    0);
            }
            
    ?>
    Aufruf:
    PHP-Code:
    http://localhost/ums/reg.php?k=8s9dj8jfds789fzasd98fzd68sfhasdf890j&username=Nico&password=hallo&rank=Admin 
    Dürfte schon etwas sicherer sein, allerdings sollte man es trotzdem nicht benutzen, ich muss noch schauen, was ich noch verändern muss, damit es sicherer wird.
    Beim nächsten Update werde ich versuchen MySQLi zu verwenden.
    LG

Ähnliche Themen

  1. Antworten: 1
    Letzter Beitrag: 29.12.2013, 14:31
  2. [Vorschlag] "Erledigt" und "Gelöst"-Status für Frage-Threads
    Von Sky.NET im Forum Feedback
    Antworten: 1
    Letzter Beitrag: 16.04.2013, 16:44
  3. Antworten: 2
    Letzter Beitrag: 29.09.2012, 15:24
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.