Gästebuch funzt nicht bei register_globals = Off
Thomas D
- php
Hallo liebe Selfhtml Gemeinde
Ich hab mir vor längerer Zeit mal ein Gästebuch von www.conborn.de installiert. Doch nun hab ich in der php.ini register_globals=Off eingestellt.
Da ich nicht der php Experte bin, bitte ich um eure Unterstützung in dem Fall hier der Quellcode...
Ich hab schon versucht die Variablen zu ändern, doch leider ohne Erfolg.
guestbook_adv.php
<?php
$rootdir="../";
$section="gaestebuch";
include("../admin/zugang1.inc.php");
if($GuestbookNew){
//Das Formular der Datei guestbook_new.php wurde ausgefüllt und abgeschickt
//HTML- und PHP-Tags aus den Eingabefeldern entfernen
$name=strip_tags($name);
$email=strip_tags($email);
$homepage=strip_tags($homepage);
$eintrag=strip_tags($eintrag);
//Konvertiere Zeilenumbrüche in HTML-<br>-Umbrüche
$eintrag=nl2br($eintrag);
//Eingaben überprüfen
if(strlen($name)<3){
//Kein richtiger Name eingegeben
$error_msg="Bitte geben Sie Ihren Namen an";
}
if(strlen($eintrag)<3){
//Kein Eintrag vorgenommen
$error_msg.="<br>Bitte geben Sie auch etwas in das Gästebuch ein.";
}
if(ereg("[1]+(.[_a-zA-Z0-9-]+)*@([a-zA-Z0-9-]+.)+([a-zA-Z]{2,4})$",$email)){
//Mailadresse korrekt angegeben - Name entsprechend formatieren
$name="<a href=mailto:" . $email . ">" . $name . "</a>";
}
if(ereg("^([a-zA-Z0-9-]+.)+([a-zA-Z]{2,4})$",$homepage)){
//Es wurde auch eine Homepageadresse angegeben - entsprechende Formatierung vornehmen
if(!ereg("^http:////",$homepage)){
//http:// fehlt in der Angabe der Adresse - hier ergänzen
$homepage="http://" . $homepage;
}
$hp_format="<br>Homepage: <a href=" . $homepage . " target=new>" . $homepage . "</a>";
}
//Ende Eingaben überprüfen
if($error_msg){
//Fehlerhafte Angaben - Hinweis ausgeben und keinen Eintrag vornehmen
$message ="<br>Ihr Eintrag konnte leider nicht in unser Gästebuch aufgenommen werden:<br>";
$message.=$error_msg;
$message.="<br>Klicken Sie auf <a href=javascript:history.back(1)>zurück</a>.<br><br>";
}else{
//Neuen Gästebucheintrag vornehmen
$now=date("Y-m-d H:i:s");
$guestbook_SQL_insert="INSERT INTO guestbook (guestbook_name,guestbook_homepage,guestbook_text,guestbook_datetime) VALUES ('$name','$hp_format','$eintrag','$now')";
mysql_query($guestbook_SQL_insert);
//Mail verschicken
$recipient="mail@domain.de";
$subject="Neuer Eintrag im Gaestebuch";
$header="From: webmaster@adsl.microfun.de\n";
$mail_body="Neuer Eintrag im Gaestebuch";
mail($recipient,$subject,$mail_body,$header);
}
}
//Gästebucheinträge auslesen
if(!$pos) $pos=0;
$count=10;
$guestbook_SQL="SELECT * FROM guestbook ORDER BY guestbook_datetime DESC LIMIT $pos,$count";
$guestbook_result=mysql_query($guestbook_SQL);
//Anzahl der Datensätze ermitteln
$no_data=mysql_num_rows(mysql_query("SELECT guestbook_ID FROM guestbook"));
//Mit diesen Anweisungen werden die Links für das Blättern zwischen den Ergebnissen erzeugt
$new_pos_next=$pos+$count;
if($new_pos_next>=$no_data){
$link_next="weiter >>";
}else {
$link_next="<a href=guestbook_adv.php?pos=" . $new_pos_next . ">weiter >></a>";
}
$new_pos_prev=$pos-$count;
if($new_pos_prev<0){
$link_prev="<< zurück";
} else {
$link_prev="<a href=guestbook_adv.php?pos=" . $new_pos_prev . "><< zurück</a>";
}
//Ersten Teil des Standardlayouts nachladen
include("../background2.inc.php");
//Hier können dann die Inhalte platziert werden
?>
<link rel="stylesheet" href="layout/templates/css-blau.css" type="text/css">
<link rel="stylesheet" href="../layout/templates/css-blau.css" type="text/css">
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr>
<td><img src="layout/bilder/spacer.gif" width="20" height="1" alt=""></td>
<td colspan="2"><img src="layout/bilder/spacer.gif" width="530" height="1" alt=""></td>
<td><img src="layout/bilder/spacer.gif" width="20" height="1" alt=""></td>
</tr>
<tr>
<td colspan="2">
</td>
</tr>
<tr>
<td> </td>
<td valign="top" colspan="2">
<table border="0" cellpadding="0" cellspacing="1" width="100%" bgcolor="D3DCE3">
<tr>
<td width="100%">
<p align="center"><font size="5"><b>Gaestebuch Eintraege</b></font></td>
</tr>
</table>
<br>
<?php echo $message ?>
<br>
<table width='400' border='1' cellspacing='1' cellpadding='1'>
<table border="0" cellpadding="0" cellspacing="1" width="100%" bgcolor="CCCCCC">
<?php
//Hier die Einträge aus der Datenbank auslesen und darstellen
while($guestbook_data=mysql_fetch_array($guestbook_result)){
//Datum und Uhrzeit formatieren
$ts=$guestbook_data['guestbook_datetime'];
$unixtime = mktime(substr($ts,11,12),substr($ts,14,15),substr($ts,17,18),substr($ts,5,6),substr($ts,8,9),substr($ts,0,4));
?>
<tr valign='top' >
<td class='kleiner' width='400'>Name: <?php echo $guestbook_data['guestbook_name'] . " " . $guestbook_data['guestbook_homepage'] ?></td>
<td class='kleiner' width='100'><?php echo date("j.n.y H:i",$unixtime) ?></td>
</tr>
<tr valign='top'>
<td colspan='2' class='kleiner'>
<p><?php echo $guestbook_data['guestbook_text'] ?></p>
</td>
</tr>
<tr>
<table border="0" cellpadding="0" cellspacing="1" width="100%" bgcolor="CCCCCC">
<hr width='400' size='1' noshade>
</td>
</tr>
<?php
}
?>
</table>
<p class='kleiner'><?php echo $link_prev . " " . $link_next ?></p>
</p>
</td>
</tr>
</table>
---------------------------------------------------------------------
guestbook_new.php
<?php include("../background.inc.php")?>
<tr>
<td valign="top" colspan="2">
<h2 align="center">
<p>Hier können Sie sich in unser Gästebuch eintragen.</p>
<form action=guestbook_adv.php method=post>
<table width="400" border="0" cellspacing="1" cellpadding="1">
<tr valign="middle" bgcolor="CCCCCC">
<td class="stdtextconfig">Name :</td>
<td>
<input type="text" name="name" size="41" maxlength="78">
</td>
</tr>
<tr valign="middle" bgcolor="DDDDDD">
<td class="stdtextconfig">E-Mail :</td>
<td>
<input type="text" name="email" size="41" maxlength="78">
</td>
</tr>
<tr valign="middle" bgcolor="CCCCCC">
<td class="stdtextconfig">Homepage :</td>
<td>
<input type="text" name="homepage" size="41" maxlength="78">
</td>
</tr>
<tr valign="middle" bgcolor="DDDDDD">
<td class="stdtextconfig">Eintrag :</td>
<td>
<textarea name="eintrag" rows="5" cols="35"></textarea>
</td>
</tr>
<tr>
<td colspan="2">
<p align="center">
<input type="submit" name="GuestbookNew" value="Abschicken">
</p>
</td>
</tr>
</table>
</form>
<p><br>
</p>
</td>
<td> </td>
</tr>
</table>
_a-zA-Z0-9- ↩︎
Hallo Thomas,
funzt nicht ist ja nicht wirklich aussagekräftig, aber du ja schreibts, dass du register_globals ausgeschaltet hast, kann mir dir vielleicht doch helfen....
Also, ich denke, dass dein Problem hier liegt:
guestbook_adv.php
//HTML- und PHP-Tags aus den Eingabefeldern entfernen
$name=strip_tags($name);
$email=strip_tags($email);
$homepage=strip_tags($homepage);
$eintrag=strip_tags($eintrag);
Da register_globals ausgeschaltet ist, kannst du nicht direkt auf $name etc. zugreifen. Du muss dir angucken, wie das Formular abgeschickt wird (GET/POST) und entsprechend darauf zugreifen ($_GET['name']/$_POST['name'])
Am Besten ganz an den Anfang eine Zuweisung auf die momentan verwendeten Variablen machen, dann brauchst du sie nicht im gesamten Skript zu ändern. Also als erstes einfach:
$name = $_GET['name']...
MfG,
Juan
Hallo Juan
ich hab jetzt folgendes abgeändert...
in guestbook_new.php
<form action=guestbook_adv.php method=get>
in guestbook_adv.php
$name=$_GET($name);^M
$email=$_GET($email);^M
$homepage=$_GET($homepage);^M
$eintrag=$_GET($eintrag);^M
^M$message=$_GET($message);
keinerlei Änderung......
Gruss Thomas
Hi,
so schlecht waren die Änderungen ja nicht, aber vergleiche sie mal mit dem, was ich geschrieben habe...
Das:
$name=$_GET($name);^M
müsste heissen:
$name=$_GET('name');
Probier das nochmal so....
MfG,
Juan
hi,
Das:
$name=$_GET($name);^M
müsste heissen:
$name=$_GET('name');
Das müsste wenn überhaupt so heißen:
$name=$_GET['name'];
Aber es ist natürlich nicht wirklich notwendig, die Variablen aus $_GET erst mal in "andere" Variablen zu "importieren" - es erhöht idR. die Übersichtlichkeit, wenn man gleich $_GET an den entsprechenden Stellen im Script verwendet.
gruß,
wahsaga
Moin,
Das:
$name=$_GET($name);^M
müsste heissen:
$name=$_GET('name');Das müsste wenn überhaupt so heißen:
$name=$_GET['name'];
natürlich mit []. Hab mich da wohl vertippt...beim ersten Posting hatte ich es ja richtig....
MfG,
Juan
Moin!
Das:
$name=$_GET($name);^M
müsste heissen:
$name=$_GET('name');
Bestimmt nicht.
Richtig wäre_
$name=$_GET['name'];
- Sven Rautenberg
Hallo Sven
ich hab nun alles durch probiert
$name=$_POST['name'];^M
$email=$_POST['email'];^M
$homepage=$_POST['homepage'];^M
$eintrag=$_POST['eintrag'];^M
$name=$_GET['name'];^M
$email=$_GET['email'];^M
$homepage=$_GET['homepage'];^M
$eintrag=$_GET['eintrag'];^M
es funzt immer noch nicht, kann es sein das irgendwo noch eine Variable deklariert werden muss ?
Gruss Thomas
Moin!
es funzt immer noch nicht
Das ist keine Fehlerbeschreibung.
Kriegst du Fehlermeldungen? Wenn nicht, wäre es extrem wichtig, dafür zu sorgen, dass. Setze diesen Code ganz an erste Stelle im PHP-Skript:
error_reporting(E_ALL);
kann es sein das irgendwo noch eine Variable deklariert werden muss ?
Es kann alles mögliche sein, ohne Fehlermeldung habe ich aber keine Lust, blind drauflos zu raten.
- Sven Rautenberg
Hey Sven...
Oje, einige Fehlermeldungen
Notice: Undefined variable: GuestbookNew guestbook_adv.php on line 18
Notice: Undefined variable: pos in guestbook_adv.php on line 79
und das hab ich geändert...
$name=$_GET['name'];^M
$email=$_GET['email'];^M
$homepage=$_GET['homepage'];^M
$eintrag=$_GET['eintrag'];^M
$pos=$_GET['pos'];
Gruss Thomas
Hey Sven...
hab nochmal was geändert
$name=stripslashes($_POST['name']);
$email=stripslashes($_POST['email']);
$homepage=stripslashes($_POST['homepage']);
$eintrag=stripslashes($_POST['eintrag']);
$pos=stripslashes($_POST['pos']);
weil im Original auch was mit stripslashes drin war..
leider die gleichen Fehlermeldungen..
Gruss Thomas
Sinnvoll wäre es, wenn du mal die betreffenden Zeilen posten würdest.
Wenn du eine Fehlermeldung bekommst, die im übrigen recht eindeutig ist, dann wird da auch eine Zeilennummer zu angezeigt.
Poste doch bitte die entsprechende Zeile und die Zeile davor, wenn du möchtest, daß man dir weiterhilft.
Gruß, rob
Hey..
Zeile 17 enthält if($GuestbookNew){
Zeile 78 enthält if(!$pos) $pos=0;
womit ich mal garnichts anfange.
Gruss Thomas
Hallo nochmal,
$name=$_POST['name'];^M
$email=$_POST['email'];^M
$homepage=$_POST['homepage'];^M
$eintrag=$_POST['eintrag'];^M$name=$_GET['name'];^M
$email=$_GET['email'];^M
$homepage=$_GET['homepage'];^M
$eintrag=$_GET['eintrag'];^M
hast du dir mal die Werte von $_GET['name'] bzw. $_POST['name'] ausgeben lassen?
Ich hab auch grad gesehen, dass ganz am Anfang
if($GuestbookNew){
...}
steht. Wo kommt $GuestbookNew her? Was sollte da drin stehen und was steht da wirklich drin? Ich denke damit ist Submit-Button gemeint.
Müsste also auch $_GET['GuestbookNew'] bzw. $_POST['GuestbookNew'].
So wird der Code innerhalb des Ifs überhaupt nicht ausgeführt, denke ich....
MfG,
Juan
Hallo Juan
So wird der Code innerhalb des Ifs überhaupt nicht ausgeführt, denke ich....
Leider falsch gedacht, funzt trotzdem nicht...
Gruss Thomas
Hi!
<form action=guestbook_adv.php method=get>
<form action="guestbook_adv.php" method="get">
Und das kann auch nicht funktionieren. Ist ja auch eine völlig falsche Syntax.
$name=$_GET($name);^M
$name = $_GET['name'];
und dementsprechend weiter.
Eigentlich brauchst du die Variablen nicht noch mal extra in einer neuen Variabeln speichern. Du könntest direkt mit $_GET['var'] weiterabeiten.
BTW: Meinst du eigentlich nicht, daß du dies vielleicht selbst rausgefunden hättest, wenn du mal nach register_globals nachgeschlagen hättest..?
Gruß, rob
Hallo rob!
$name=$_GET($name);^M
$name = $_GET['name'];
Das Formular überträgt aber mittels post.
$name = $_POST['name'];
Schönen Gruß
Afra
Hallo rob!
Hi!
Das Formular überträgt aber mittels post.
glaub ich nicht:
<form action=guestbook_adv.php method=get>
Gruß, rob
Hallo!
Das Formular überträgt aber mittels post.
glaub ich nicht:
<form action=guestbook_adv.php method=get>
Doch, weiter unten:
<form action=guestbook_adv.php method=post>
Schöne Qualität ;o)
Schönen Gruß
Afra
Hallo afra, Hallo rob,
Das Formular überträgt aber mittels post.
glaub ich nicht:
<form action=guestbook_adv.php method=get>
Doch, weiter unten:
<form action=guestbook_adv.php method=post>
Das »get« hat sich erst nach Thomas' Änderung] eingeschlichen.
Unabhängig davon ist $_REQUEST in ähnlichen Fällen aber manchmal ganz nützlich.
Schöne Grüße,
Johannes
Hello,
das ist eine eklige Arbeit, von register_globals = on auf register_globals = off umzustellen.
Wenn dann gleichzeitig auch noch die alten Sessionfunktionen beseitigt wreden müssen, ist es fast unmöglich, weil die ganze Logik dann "andersherum" aufgebaut ist.
1. Schritt:
Alle Fehlermedlungen ausgeben lassen
error_reporting(E_ALL);
am Anfang des Scriptes sollte meistens genügen.
2. Schritt:
Große Zettel nehmen, und alle Parameternamen aus den Formularen
und den URi's pro adressiertes Script separat aufschreiben.
Also, wenn in der Fomular-Action ein Scriptname steht: neuer Zettel
und als Methode Post steht, die Namen in der Spalte Post eintragen
und als Methode Get steht, die Namen in der Spalte Get eintragen
wenn die Formular-Action selber Parameter hat
und als Methode Post steht, die Parameter in der Spalte Get eintragen
Wenn ein Link mit Parametern auftaucht, Zettel mit dem Ressource-Namen anlegen
(wenn es noch keinen gibt)
und die Parameternamen in die Spalte Get schreiben
Das Spielchen muss leider für jeden möglichen View (Dokument-Zusammenstellung), einzeln
gemacht werden.
if($GuestbookNew)
{
# ...
}
Das sollte bei error_reporting(E_ALL) den ersten Fehler geben.
Aud das Vorhandensein eines Paramters sollte man immer mit der Funktion isset() prüfen
http://de.php.net/manual/en/function.isset.php
3. Schritt
für jedes adressierte Script alle Variablennamen aufschreiben
alle, die auf den anderen beiden Zetteln stehen jeweils durch $_GET[...]
und $_POST[...] austauschen. Dabei muss man später noch beachten, was damit im
Weiteren passiert. ggf. muss man sie noch prüfen, demaskieren, neu maskieren.
Alles, was dann übrig bleibt, sollten interne Variablen des Scriptes oder der include-Dateien sein.
Viel Spaß weiterhin ;-)
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Hey Tom
Ist ja nett beschrieben, aber ich bin leider kein Profi, hab mir wie am anfang beschrieben, das mal aus dem NEtz installiert.
Ein wenig mehr Hilfestellung wäre echt nett.
Gruss Thomas
Hello,
Ist ja nett beschrieben, aber ich bin leider kein Profi, hab mir wie am anfang beschrieben, das mal aus dem NEtz installiert.
Ein wenig mehr Hilfestellung wäre echt nett.
Welche Schritte verstehst Du denn nicht?
Mach doch erstmal, was ich geschrieben habe, oder frag, was Du davon nicht verstehst.
Zum Thema "Sicherheit" kommen wir erst, wenn es wieder läuft. Das sollten wir aber nicht vergessen!
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Hey Tom
Ich melde mich später muss auf Mittagschicht...
Gruss Thomas
Hallo.
Ich melde mich später muss auf Mittagschicht...
"... sprach es und ward fortan nie wieder gesehen."
MfG, at
Hallo at
Hatte doch schon weitere Sachen gepostet.
Gruss Thomas
Moin!
Ist ja nett beschrieben, aber ich bin leider kein Profi, hab mir wie am anfang beschrieben, das mal aus dem NEtz installiert.
Ein wenig mehr Hilfestellung wäre echt nett.
Die Sache kann ganz einfach sein: Schmeiß dein blödes kaputtes Gästebuch-Skript auf den Müll und suche dir ein neues Skript. Das Web dürfte voll davon sein, Gästebücher sind typische Anfänger-Programmieraufgaben bzw. gehören zu der Kategorie von Skript, die eigentlich schon jeder Programmierer einmal geschrieben hat.
- Sven Rautenberg
echo $begrüßung;
Da ich nicht der php Experte bin, bitte ich um eure Unterstützung in dem Fall hier der Quellcode...
Mit anderen Worten: "Repariert mir mal das Script, das ich von irgendwo hergeholt habe." Das funktioniert hier nicht.
In diesem Forum kannst du Hilfe zur Selbsthilfe erwarten. Die kannst du bekommen bis zum Umfallen. Oft jedoch fallen in solchen Fällen die Anfragenden eher um, als dass auch nur ein Bruchteil solch eines Scriptes korrigiert ist. Das liegt zum einen daran, dass den Anfragenden massiv Grundkenntnisse in PHP und/oder Programmieren allgemein fehlen und zum anderen, dass die fehlerhaft laufenden Scripte meist mehr Schwachstellen enthalten als der Anfragende vermutet. Ersteres scheint hier gegeben zu sein, das zweite ist es auf alle Fälle.
Meine Vorschläge:
echo "$verabschiedung $name";
Hey...
Ich hab den Autor schon angeschrieben, doch leider bis heute keine Reaktion.
Gruss Thomas
Hallo Thomas,
Ich hab mir vor längerer Zeit mal ein Gästebuch von www.conborn.de installiert. Doch nun hab ich in der php.ini register_globals=Off eingestellt.
Da ich nicht der php Experte bin, bitte ich um eure Unterstützung in dem Fall hier der Quellcode...Ich hab schon versucht die Variablen zu ändern, doch leider ohne Erfolg.
[...]
Mein Tipp: Vergiss das Gästebuch. Das Bestehen auf register_globals=on ist nicht der einzige Fehler und die einzige Sicherheitslücke die dieses Script aufweist. Du handelst dir damit mehr Ärger als Nutzen ein. Ihc würde dir vorschlagen, dich nach einem anderen Script umzusehen.
Schöne Grüße,
Johannes
Hallo.
Mein Tipp: Vergiss das Gästebuch. Das Bestehen auf register_globals=on ist nicht der einzige Fehler und die einzige Sicherheitslücke die dieses Script aufweist. Du handelst dir damit mehr Ärger als Nutzen ein. Ihc würde dir vorschlagen, dich nach einem anderen Script umzusehen.
Wenn man nicht weiß, woarauf man zu achten hat, nutzt dieser Tipp allerdings auch nicht sonderlich.
MfG, at
Hallo at,
Ihc würde dir vorschlagen, dich nach einem anderen Script umzusehen.
Wenn man nicht weiß, woarauf man zu achten hat, nutzt dieser Tipp allerdings auch nicht sonderlich.
Deshalb sollte er sich an die Tipps von Leuten halten, die sowas wissen. Da ich jedoch keinen Überblick über die derzeit im Internet kursierenden guten Gästebuchscripte kenne, konnte ich ihm leider auch zu keinem besonderen raten.
Schöne Grüße,
Johannes