SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



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



:: Buchempfehlung ::

Einführung in XHTML, CSS und Webdesign

Einführung in XHTML, CSS und Webdesign zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP Grundlagen

PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 27.05.2012, 19:57:27
Benutzerbild von Erza Scarlet
Erza Scarlet Erza Scarlet ist offline
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?
Mit Zitat antworten
  #2  
Alt 27.05.2012, 21:33:59
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
SELFPHP Guru
 
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
AW: Leere Ersetzung einer Variable

Zitat:
Zitat von Erza Scarlet Beitrag anzeigen
Die Frage stellt sich, wie kann man sich das Phänomen erklären?
Gar nicht, falls Dein Script nur aus der eine Zeile besteht...
Mit Zitat antworten
  #3  
Alt 27.05.2012, 22:14:39
Benutzerbild von Erza Scarlet
Erza Scarlet Erza Scarlet ist offline
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.
Mit Zitat antworten
  #4  
Alt 27.05.2012, 22:58:04
Benutzerbild von vt1816
vt1816 vt1816 ist offline
Administrator
 
Registriert seit: Jul 2004
Beiträge: 3.707
AW: Leere Ersetzung einer Variable

Zitat:
Zitat von Erza Scarlet Beitrag anzeigen
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!
Mit Zitat antworten
  #5  
Alt 27.05.2012, 23:39:29
Benutzerbild von Erza Scarlet
Erza Scarlet Erza Scarlet ist offline
Anfänger
 
Registriert seit: May 2012
Alter: 29
Beiträge: 4
AW: Leere Ersetzung einer Variable

Zitat:
Zitat von vt1816 Beitrag anzeigen
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 (28.05.2012 um 00:07:38 Uhr)
Mit Zitat antworten
  #6  
Alt 28.05.2012, 02:07:50
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
SELFPHP Guru
 
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
AW: Leere Ersetzung einer Variable

Zitat:
Zitat von Erza Scarlet Beitrag anzeigen
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.
Mit Zitat antworten
  #7  
Alt 28.05.2012, 14:29:29
Benutzerbild von Erza Scarlet
Erza Scarlet Erza Scarlet ist offline
Anfänger
 
Registriert seit: May 2012
Alter: 29
Beiträge: 4
AW: Leere Ersetzung einer Variable

Zitat:
Zitat von meikel Beitrag anzeigen
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.
Mit Zitat antworten
  #8  
Alt 29.05.2012, 01:05:10
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
SELFPHP Guru
 
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
AW: Leere Ersetzung einer Variable

Zitat:
Zitat von Erza Scarlet Beitrag anzeigen
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.
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

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.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Variable selbst per GET übergeben juergen PHP Grundlagen 28 29.09.2009 23:59:05
Wert einer Variable ändern und die Änderung auf die Variable ablegen. Ichthys PHP Grundlagen 8 04.05.2006 01:18:55
Leere Variable wird nicht ausgegeben Ladbroke PHP Grundlagen 0 11.04.2006 20:49:37
Variable in Variable? Giz PHP für Fortgeschrittene und Experten 13 22.07.2005 12:12:00
Leere Variable bei Übergabe Formular strangelove101 PHP für Fortgeschrittene und Experten 4 03.06.2002 18:21:41


Alle Zeitangaben in WEZ +2. Es ist jetzt 15:42:39 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt