CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden |
27.05.2012, 18:57:27
|
|
Anfänger
|
|
Registriert seit: May 2012
Alter: 29
Beiträge: 4
|
|
Leere Ersetzung einer Variable
Moin zusammen
Heute habe ich das Phänomen erlebt, dass eine Variable in einem MySQL-Query nicht korrekt durch PHP ersetzt wird. Wenn man die Variable vorher ausgibt, wird die Ausgabe korrekt ausgegeben.
Beispiel:
PHP-Code:
$sql = $connection->insert("guestbook", "`date`, `name`, `email`, `active`, `ip`, `message`", "'$date', '$name', '$email', '$activation', '$ip', '".$connection->real_escape_string($message)."'");
Hier wird $message durch Nichts ("") ersetzt. Gibt man $message vorher aus, bekommt man korrekt den Inhalt von $_POST['message'] ausgegeben.
Wenn man jetzt anstatt $message $_POST['message'] nimmt, wird der Inhalt auch korrekt in die DB eingetragen.
Die Frage stellt sich, wie kann man sich das Phänomen erklären?
|
27.05.2012, 20:33:59
|
|
SELFPHP Guru
|
|
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
|
|
AW: Leere Ersetzung einer Variable
Zitat:
Zitat von Erza Scarlet
Die Frage stellt sich, wie kann man sich das Phänomen erklären?
|
Gar nicht, falls Dein Script nur aus der eine Zeile besteht...
|
27.05.2012, 21:14:39
|
|
Anfänger
|
|
Registriert seit: May 2012
Alter: 29
Beiträge: 4
|
|
AW: Leere Ersetzung einer Variable
Das Script besteht natürlich aus mehreren Zeilen aber da gibt es auch nur eine Prüfung der Userid und dann werden die Variablen deklariert.
|
27.05.2012, 21:58:04
|
|
Administrator
|
|
Registriert seit: Jul 2004
Beiträge: 3.707
|
|
AW: Leere Ersetzung einer Variable
Zitat:
Zitat von Erza Scarlet
Das Script besteht natürlich aus mehreren Zeilen aber da gibt es auch nur eine Prüfung der Userid und dann werden die Variablen deklariert.
|
Hast Du mal die Überschrift gelesen: PHP für Fortgeschrittene und Experten - Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken.
Denn dann wüßtest Du, dass $message <> $_POST['message'] ist und Du hier Hilfe erwartest, mit etwas mehr Informationen hinterm Berg vorkommen solltest.
__________________
Gruss vt1816
Erwarte nicht, dass sich jemand mehr Mühe mit der Antwort gibt als Du Dir mit der Frage.
. . . . . Feedback wäre wünschenswert
Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.
Ansosnten gilt: Hilfe ausserhalb dieses Thread (PN, WhatsApp, Skype, Mail, ICQ, etc...) nur per Barzahlung oder Vorauskasse!
Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
|
27.05.2012, 22:39:29
|
|
Anfänger
|
|
Registriert seit: May 2012
Alter: 29
Beiträge: 4
|
|
AW: Leere Ersetzung einer Variable
Zitat:
Zitat von vt1816
Hast Du mal die Überschrift gelesen: PHP für Fortgeschrittene und Experten - Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken.
|
Danke, ich kann lesen. Und da ich nicht der einzige bin, der dieses Phänomen hat, dachte ich, es sei besser im anderen Forum aufgehoben.
Zitat:
Denn dann wüßtest Du, dass $message <> $_POST['message'] ist
|
Ich weiss das.
Zitat:
und Du hier Hilfe erwartest, mit etwas mehr Informationen hinterm Berg vorkommen solltest.
|
Mit mehr als das Script kann ich dann in dem Fall nicht bieten. Ich habe Informationen da gelassen.
PHP-Code:
if($rb->user('uid') == 0) { $name = $connection->real_escape_string($_POST['name']); $email = $_POST['email']; $message = $_POST['message']; if($name == "" OR $email == "" OR $message == "") { die(header("Location: index.php?fillout=1")); } } else { $name = $rb->user('username'); $email = $rb->user('email'); $message = $_POST['message']; if($message == "") { die(header("Location: index.php?fillout=1")); } }
$date = time(); $ip = $rb->user('ip'); $activation = $rb->settings('activation');
$sql = $connection->insert("guestbook", "`date`, `name`, `email`, `active`, `ip`, `message`", "'$date', '$name', '$email', '$activation', '$ip', '".$connection->real_escape_string($message)."'");
edit: Ich hab jetzt nen Test gemacht.
Testscript:
PHP-Code:
if($rb->user('uid') == 0) { $name = $connection->real_escape_string($_POST['name']); $email = $_POST['email']; $message = $_POST['message']; if($name == "" OR $email == "" OR $message == "") { die(header("Location: index.php?fillout=1")); } } else { $name = $rb->user('username'); $email = $rb->user('email'); $message = $_POST['message']; if($message == "") { die(header("Location: index.php?fillout=1")); } }
var_dump($message); echo "<br />"; var_dump($connection->real_escape_string($message)); echo "<br />";
$date = time(); $ip = $rb->user('ip'); $activation = $rb->settings('activation');
//$sql = $connection->insert("guestbook", "`date`, `name`, `email`, `active`, `ip`, `message`", "'$date', '$name', '$email', '$activation', '$ip', '".$connection->real_escape_string($_POST['message'])."'"); $sql = $connection->insert("guestbook", "`date`, `name`, `email`, `active`, `ip`, `message`", "'$date', '$name', '$email', '$activation', '$ip', '".$message."'", 1); $sql2 = $connection->insert("guestbook", "`date`, `name`, `email`, `active`, `ip`, `message`", "'$date', '$name', '$email', '$activation', '$ip', '".$connection->real_escape_string($message)."'", 1); $sql3 = $connection->insert("guestbook", "`date`, `name`, `email`, `active`, `ip`, `message`", "'$date', '$name', '$email', '$activation', '$ip', '".$connection->real_escape_string($_POST['message'])."'", 1); var_dump($sql); echo "<br />"; var_dump($sql2); echo "<br />"; var_dump($sql3); exit;
Ergebnis:
PHP-Code:
string(16) "Argh test und so" string(16) "Argh test und so" string(176) "INSERT INTO `guestbook` (`date`, `name`, `email`, `active`, `ip`, `message`) VALUES ('1338151864', 'FalkenaugeMihawk', 'falkenauge_mihawk@hotmail.com', '1', '84.74.174.37', '')" string(176) "INSERT INTO `guestbook` (`date`, `name`, `email`, `active`, `ip`, `message`) VALUES ('1338151864', 'FalkenaugeMihawk', 'falkenauge_mihawk@hotmail.com', '1', '84.74.174.37', '')" string(192) "INSERT INTO `guestbook` (`date`, `name`, `email`, `active`, `ip`, `message`) VALUES ('1338151864', 'FalkenaugeMihawk', 'falkenauge_mihawk@hotmail.com', '1', '84.74.174.37', 'Argh test und so')"
PHP-Version: 5.3.10-1~dotdeb.1
Ich hab das Script auch auf PHP 5.4 (Windows) und PHP 5.3.10 (Unix) probiert. Das Phänomen kommt nur auf dem Server vor mit dieser komischen PHP-Version (5.3.10-1~dotdeb.1). Ich werde morgen den Serveradmin fragen, ob er mal auf 5.4 updaten kann. Dann werde ich das Testscript nochmal durchlaufen lassen.
Geändert von Erza Scarlet (27.05.2012 um 23:07:38 Uhr)
|
28.05.2012, 01:07:50
|
|
SELFPHP Guru
|
|
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
|
|
AW: Leere Ersetzung einer Variable
Zitat:
Zitat von Erza Scarlet
Mit mehr als das Script kann ich dann in dem Fall nicht bieten.
|
Falsch. Du verwendest eine eigene DB Klasse (komplett neu oder extends mysqli).
KA, was die Methode insert treibt und ob es eine methode real_escape_string gibt.
PHP-Code:
$sql = $connection->insert("guestbook", "`date`, `name`, `email`, `active`, `ip`, `message`", "'$date', '$name', '$email', '$activation', '$ip', '".$connection->real_escape_string($message)."'");
Sowas
PHP-Code:
$name = $connection->real_escape_string($_POST['name']); # OK
$email = $_POST['email']; # pfui
$message = $_POST['message']; # pfui
ist durchwachsen und bietet Möglichkeiten zur SQL Injection. Auch andere Schweinereien, wie zB. embedded Javascript, beachtest Du nicht.
PHP-Code:
if($name == "" OR $email == "" OR $message == "") {
Schon mal was von empty gehört?
PHP-Code:
die(header("Location: index.php?fillout=1"));
}
1. kein absoluter URL
2. exit nach dem Location Header fehlt.
Zitat:
PHP-Version: 5.3.10-1~dotdeb.1
|
Debilian (debian) und Farblos (ubuntu) sind Schrott, den Du auch durch externe Quellpakete nicht aufwerten kannst.
|
28.05.2012, 13:29:29
|
|
Anfänger
|
|
Registriert seit: May 2012
Alter: 29
Beiträge: 4
|
|
AW: Leere Ersetzung einer Variable
Zitat:
Zitat von meikel
Falsch. Du verwendest eine eigene DB Klasse (komplett neu oder extends mysqli).
KA, was die Methode insert treibt und ob es eine methode real_escape_string gibt.
PHP-Code:
$sql = $connection->insert("guestbook", "`date`, `name`, `email`, `active`, `ip`, `message`", "'$date', '$name', '$email', '$activation', '$ip', '".$connection->real_escape_string($message)."'");
|
Es ist eine eigene DB Klasse. Und ich denke, du hast meinen Edit gar nicht gross angesehen.
Zitat:
Sowas
PHP-Code:
$name = $connection->real_escape_string($_POST['name']); # OK $email = $_POST['email']; # pfui $message = $_POST['message']; # pfui
ist durchwachsen und bietet Möglichkeiten zur SQL Injection. Auch andere Schweinereien, wie zB. embedded Javascript, beachtest Du nicht.
|
Wenn jemand ein Gästebuch-Script verunreinigen will, bitte, aber einen grossen Nutzen hat er/sie/es da durch nicht.
Zitat:
PHP-Code:
if($name == "" OR $email == "" OR $message == "") {
Schon mal was von empty gehört?
|
Hab ich.
Zitat:
PHP-Code:
die(header("Location: index.php?fillout=1")); }
1. kein absoluter URL
2. exit nach dem Location Header fehlt.
|
1. Ist auch nicht absolut zwingend.
2. die ist ein Alias von exit bzw. entspricht exit().
http://ch.php.net/manual/de/function.die.php
Zitat:
Debilian (debian) und Farblos (ubuntu) sind Schrott, den Du auch durch externe Quellpakete nicht aufwerten kannst.
|
Der Server gehört nicht mir und ich habe auch zu wenig Erfahrung mit Unix-Systemen.
|
29.05.2012, 00:05:10
|
|
SELFPHP Guru
|
|
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
|
|
AW: Leere Ersetzung einer Variable
Zitat:
Zitat von Erza Scarlet
Es ist eine eigene DB Klasse. Und ich denke, du hast meinen Edit gar nicht gross angesehen.
|
Solange ich nicht weiß, wie die Klasse an sich und die Methoden insert und real_escape_string aussehen, wäre das auch sinnfrei.
Natürlich könnte es auch an DEINER dotdeb-PHP-Version liegen. Obwohl ich mein PHP selber compiliere und es bei PHP 5.3.10 keine diesbezüglichen MySQL Zicken gab, schließe ich sowas nicht aus. Wer weiß, welche Fehler der "fremde Compiler" gemacht haben könnte.
Zitat:
Wenn jemand ein Gästebuch-Script verunreinigen will, bitte, aber einen grossen Nutzen hat er/sie/es da durch nicht.
|
Fasel. Du läßt Hintertüren offen.
Solche sicher auch:
Code:
Hallo, <?php unlink(__file__); ?>
Zitat:
1. Ist auch nicht absolut zwingend.
|
Das auch gelesen?
Zitat:
HTTP/1.1 verlangt einen absoluten URI inklusive dem Schema, Hostnamen und absoluten Pfad als Argument von » Location:, aber manche Clients akzeptieren auch relative URIs.
|
Zitat:
2. die ist ein Alias von exit bzw. entspricht exit().
|
Jo. Das die() hatte ich übersehen.
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Ansicht |
Linear-Darstellung
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 06:59:03 Uhr.
|