Thema: Ein einfaches "System"
- 
	27.02.2012, 21:31 #1 Ein einfaches "System" 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
 archive.phpPHP-Code:# Documentation of system #
 
 user: root
 _____________
 password:
 ____________________
 database: system
 _________________________
 tables: userdata, log
 _____________________
 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.
 _________________________________________
 (C) Copyright 2012 http://schmitz-dev.net
 _________________________________________
 
 connection.phpPHP-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>";
 }
 ?>
 insert.phpPHP-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.");
 ?>
 log.phpPHP-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.";
 }
 
 
 ?>
 login.phpPHP-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);
 }
 ?>
 query.phpPHP-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);
 }
 }
 ?>
 settings.phpPHP-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. #
 }
 ?>
 system.sqlPHP-Code:<?php
 $host = "localhost";
 $database_user = "root";
 $database_password = "";
 $database = "system";
 ?>
 Ich bin noch ein Anfänger, aber vielleicht kann ja der ein oder andere etwas mit dem Code anfangen.PHP-Code:-- phpMyAdmin SQL Dump
 -- version 3.4.5
 -- http://www.phpmyadmin.net
 --
 -- Host: localhost
 -- Erstellungszeit: 23. Feb 2012 um 13:22
 -- Server Version: 5.5.16
 -- PHP-Version: 5.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` (
 `version` varchar(20) NOT NULL,
 `link` text NOT NULL,
 `datum` varchar(12) NOT 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` (
 `logtext` text NOT NULL,
 `ip` varchar(20) NOT NULL,
 `date` varchar(20) NOT 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` (
 `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
 `username` varchar(24) NOT NULL,
 `password` varchar(24) NOT NULL,
 `ip` varchar(20) NOT NULL,
 `date` varchar(20) NOT NULL,
 PRIMARY KEY (`id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
 --
 -- 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 */;
 
 
 LG
 
- 
	27.02.2012, 23:08 #2 Ein einfaches "System" 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: .
						Java:
 Spoiler:
 Lustige Quotes:
 Spoiler:
 
- 
	28.02.2012, 13:48 #3 Ein einfaches "System" 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:
 
 
 
 
 ums.sql:
 reg.php:PHP-Code:-- phpMyAdmin SQL Dump
 -- version 3.4.5
 -- http://www.phpmyadmin.net
 --
 -- Host: localhost
 -- Erstellungszeit: 28. Feb 2012 um 15:52
 -- Server Version: 5.5.16
 -- PHP-Version: 5.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` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `username` text NOT NULL,
 `password` text NOT NULL,
 `rank` text NOT NULL,
 `logins` int(11) NOT NULL,
 `lastip` text NOT NULL,
 `regip` text NOT NULL,
 `regdate` text NOT NULL,
 PRIMARY KEY (`id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
 /*!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 */;
 
 Aufruf: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);
 }
 
 ?>
 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.PHP-Code:http://localhost/ums/reg.php?k=8s9dj8jfds789fzasd98fzd68sfhasdf890j&username=Nico&password=hallo&rank=Admin
 
 Beim nächsten Update werde ich versuchen MySQLi zu verwenden.
 LG
 
Ähnliche Themen
- 
  Unterschied zwischen "ChicaPC-Shield" und "Malwarebytes Anti-Malware"?Von Accountuser im Forum WindowsAntworten: 1Letzter Beitrag: 29.12.2013, 14:31
- 
  [Vorschlag] "Erledigt" und "Gelöst"-Status für Frage-ThreadsVon Sky.NET im Forum FeedbackAntworten: 1Letzter Beitrag: 16.04.2013, 16:44
- 
  "Wer ist online" & "Forum-Mitarbeiter" stimmen nicht übereinVon Devon im Forum SupportAntworten: 2Letzter Beitrag: 29.09.2012, 15:24
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.
 
									 
														 
														 
				
				 
			 
					
					
					
						 Zitieren
  Zitieren 
			 
 Zitat von Hydra
 Zitat von Hydra
					
