PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie ich die logins speichern?



Zockervogel
10.05.2013, 15:22
Hi,
ich bin am überlegen alle Logins zu speichern. Wie mache ich das ?
Bin PHP-Anfänger, deshalb ratlos :-))

Mein Gedanke war:



CREATE TABLE IF NOT EXISTS `vms_logins` (
`nickname` varchar(255) NOT NULL,
`klammid` int(7) NOT NULL,
`ip` varchar(15) NOT NULL,
`datum` varchar(10) NOT NULL,
`zeit` varchar(8) NOT NULL,
`browser` varchar(255) NOT NULL,
KEY `nickname` (`nickname`),
KEY `klammid` (`klammid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


dann wollte ich es mit folgendem code reinspeichern:
(in Textdatei klappt das mit den "Strings")



db_query("INSERT INTO ".$db_prefix."_logins (nickname,klammid,ip,datum,zeit,browser) VALUES (".$_POST['nickname'].", ".$login_check['uid'].", ".$ip.", ".date("d.m.Y", time()).", ".date("H:i:s", time()).", '".$useragent."')");


wenn ich es so mache bleibt die Tabelle leer.
Vermutlich klar, aber warum nur ?

Hiiiiilllffeee :-)

ako
10.05.2013, 15:38
Hi,
ich bin am überlegen alle Logins zu speichern. Wie mache ich das ?
Bin PHP-Anfänger, deshalb ratlos :-))

Mein Gedanke war:



CREATE TABLE IF NOT EXISTS `vms_logins` (
`nickname` varchar(255) NOT NULL,
`klammid` int(7) NOT NULL,
`ip` varchar(15) NOT NULL,
`datum` varchar(10) NOT NULL,
`zeit` varchar(8) NOT NULL,
`browser` varchar(255) NOT NULL,
KEY `nickname` (`nickname`),
KEY `klammid` (`klammid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


dann wollte ich es mit folgendem code reinspeichern:
(in Textdatei klappt das mit den "Strings")



db_query("INSERT INTO ".$db_prefix."_logins (nickname,klammid,ip,datum,zeit,browser) VALUES (".$_POST['nickname'].", ".$login_check['uid'].", ".$ip.", ".date("d.m.Y", time()).", ".date("H:i:s", time()).", '".$useragent."')");


wenn ich es so mache bleibt die Tabelle leer.
Vermutlich klar, aber warum nur ?

Hiiiiilllffeee :-)

So wirds was


db_query("INSERT INTO ".$db_prefix."_logins (nickname,klammid,ip,datum,zeit,browser) VALUES ('".$_POST['nickname']."', '".$login_check['uid']."', '".$ip."', '".time()."', '".time()."', '".$useragent."');


datum und zeit getrennt in der DB zu hinterlegen bringt da nicht viel Sinn da die funktion time() Datum und Zeit enthält beim Auslesen der DB kann man dann date("d.m.Y, H:i:s", $vms_logins['zeit']) abrufen.

Lokutos
10.05.2013, 17:06
Womit wir die nächste Möglichkeit hätten die Seite zu übernehmen...





CREATE TABLE IF NOT EXISTS `vms_logins` (
`nickname` varchar(255) NOT NULL,
`klammid` int(1) NOT NULL,
`ip` varchar(15) NOT NULL,
`datum` datetime NOT NULL,
`browser` varchar(255) NOT NULL,
KEY `nickname` (`nickname`),
KEY `klammid` (`klammid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


db_query("INSERT INTO ".$db_prefix."_logins (nickname,klammid,ip,datum,browser) VALUES ('".mysql_real_escape_string($_POST['nickname'])."', '".abs($login_check['uid'])."', '".ip2long($ip)."', NOW() , '".base64_encode($useragent)."'");



Beim Auslesen: musst du bei der ausgabe des browsers dann den browser agend decoden:


$var['browser'] = base64_decode($var['browser']);

ako
10.05.2013, 17:57
Womit wir die nächste Möglichkeit hätten die Seite zu übernehmen...





CREATE TABLE IF NOT EXISTS `vms_logins` (
`nickname` varchar(255) NOT NULL,
`klammid` int(1) NOT NULL,
`ip` varchar(15) NOT NULL,
`datum` datetime NOT NULL,
`browser` varchar(255) NOT NULL,
KEY `nickname` (`nickname`),
KEY `klammid` (`klammid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


db_query("INSERT INTO ".$db_prefix."_logins (nickname,klammid,ip,datum,browser) VALUES ('".mysql_real_escape_string($_POST['nickname'])."', '".abs($login_check['uid'])."', '".ip2long($ip)."', NOW() , '".base64_encode($useragent)."'");



Beim Auslesen: musst du bei der ausgabe des browsers dann den browser agend decoden:


$var['browser'] = base64_decode($var['browser']);

Da gebe ich Dir Recht allerdings würde ich prüfen ob der User in der DB vms_logins steht und gegebenfalls überschreiben oder per cronlauf auf eine bestimmte Anzahl der einträge begrenzen (zeitlich zb. max.7 Tage) weil es unmengen an Daten in der DB gespeichert werden.

wenn man möchte kann man den cron so machen das:
-> Login eintrag in die DB
-> Cron prüft was Älter als zb. 7Tage her ist
-> Speicherung in user.Monat.txt Datei

Zockervogel
10.05.2013, 19:24
Womit wir die nächste Möglichkeit hätten die Seite zu übernehmen...

warum kann man damit die Seite übernehmen ?
Was ist das für eine Schwachstelle ?

Zockervogel
10.05.2013, 20:16
@Lokutos

Leider funktioniert das mit Deinem Code auch nicht.
Irgendwo werde ich wohl einen entscheidenen Denkfehler haben ?

Lokutos
10.05.2013, 22:11
@Lokutos

Leider funktioniert das mit Deinem Code auch nicht.
Irgendwo werde ich wohl einen entscheidenen Denkfehler haben ?


ne nur n kleinen php fehler...

db_query("INSERT INTO ".$db_prefix."_logins (nickname,klammid,ip,datum,browser) VALUES ('".mysql_real_escape_string($_POST['nickname'])."', '".abs($login_check['uid'])."', '".ip2long($ip)."', NOW() , '".base64_encode($useragent)."')");

Zockervogel
11.05.2013, 00:16
juhuuuhhh,
jetzt wird "was" geschrieben. Zwar noch nicht ganz das was ich möchte, aber das wird nun ne Kleinigkeit.

bleibt jetzt nur noch meine Frage, warum kann man damit eine Seite übernehmen ?

Lokutos
11.05.2013, 00:44
da wurden Post daten ohne überprüfung an die datenbank gesendet...
somit könnte ich ohne probleme die klammdaten auslesen oder das adminpasswort ändern/auslesen ...
http://de.wikipedia.org/wiki/SQL-Injection