...php?site=... - Problem
Sp33dy G0nz4l3s
- php
0 Manuel B.0 Sp33dy G0nz4l3s0 rob0 Sp33dy G0nz4l3s0 rob
0 Manuel B.0 rob
Hi, ich habe nun mein Kommentarformular komplett fertig gestellt.
Jetzt wollte ich es in meine Seite implementieren habe nun jedoch ein letztes Problem.
http://www.cs-erweiterungen.de/tutorials.php?site=9
Das Script prüft alle Eingaben, die eingegeben werden. Stimmt alles, dann kommt ein Header("Location: ".$_POST['Redirect']); nach dem Einfügen in die Datenbank.
Stimmt es jedoch nicht, dann dann werden Fehlermeldungen angezeigt.
Das Problem ist nun, da ich meine Seite implementiere über ?site=, das man dann nicht zurück zur der Seite:
http://www.cs-erweiterungen.de/tutorials.php?site=9] kommt, sondern zu der Seite http://www.cs-erweiterungen.de/tutorials.php
Könnt ihr mir helfen? Wie bekomme ich es hin, damit es man zu der _richtigen_ Seite kommt mit ?site=...
Ich habe hier einen kleinen Ausschnitt von dem Code:
if (isset($_POST['submit']) && !$unique) {
$fehler = false;
$fehlertext ="";
if (empty($_POST["Name"])) {
$fehler = true;
$fehlertext .= "Bitte gib einen Namen ein.<br>\n";
}
elseif (strlen($_POST['Name']) < 3) {
$fehler = true;
$fehlertext .= "Der Name muss mindestens 3 Buchstaben haben.<br>\n";
}
$muster = "/^[a-zA-Z0-9-_.]+@[a-zA-Z0-9-_.]+\.[a-zA-Z]{2,4}$/";
if (preg_match($muster, $_POST['Email']) == 0 && !empty($_POST["Email"])) {
$fehler = true;
$fehlertext .= "Die angegebene E-Mail-Adresse ist ungültig!<br>\n";
}
if (empty($_POST["Kommentar"])) {
$fehler = true;
$fehlertext .= "Bitte gib ein Kommentar ein.<br>\n";
}
if ($fehler) {
$show = true;
}
else {...
Hoffe ihr könnt mir helfen.
Ich grüsse den Cosmos,
Das Problem ist nun, da ich meine Seite implementiere über ?site=, das man dann nicht zurück zur der Seite:
http://www.cs-erweiterungen.de/tutorials.php?site=9] kommt, sondern zu der Seite http://www.cs-erweiterungen.de/tutorials.php
Da du weder $POST['site'] auswertest, noch diese Variable in irgendeiner Weise in der URL übergibst, tut das Script genau das, was es laut Code machen soll.
Möge das "Self" mit euch sein
Danke Manuel jetzt funktioniert es :)
Habe noch ein Problem.. das letzte
Ich kann mich nicht in den Adminbereich einloggen er wird einfach nicht angezeigt. Hat jemand eine Idee warum?
So sieht der Code aus. Das Passwort habe ich geändert.
<?php
if (isset($_GET["admin"]) && $_GET["admin"] == "PW" || isset($_GET["DELETE"])) {
echo "<h3>Administrationsbereich</h3>";
include("scripts/comments/zugriff.inc.php");
$sql = "SELECT * FROM kommentare WHERE Page=".$seite;
$result = mysql_query($sql);
while ($row=mysql_fetch_assoc($result)) {
echo "<div>[<a href='".$_SERVER[PHP_SELF]."?site=".$seite."&?DELETE=$row[id]'>" .
"Eintrag löschen</a> ] ";
foreach ($row as $name => $key) {
echo "$key ";
}
echo "<br><br></div>";
}
}
if (isset($_GET["DELETE"])) {
$sql="DELETE FROM kommentare WHERE id='$_GET[DELETE]'";
if (mysql_query($sql)) {
echo "<p>Datensatz gelöscht -- bitte Reload wählen!</p>";
echo "<p><a href='".$_SERVER[PHP_SELF]."?site=".$seite."'>Ausloggen!</a></p>";
}
}
?>
Hi!
if (isset($_GET["admin"]) && $_GET["admin"] == "PW"
Das ist sehr unklug. Warum das Passwort per URL übergeben und das noch unverschlüsselt?
Mit dem richtigen URL kommt man also in deinen Adminbereich...
Naja und weiterhin hast du keineswegs umgesetzt, was ich dir ein deinem anderen Thread geschrieben habe.
$_GET[DELETE] ist noch immer falsch. Du benutzt hier noch immer eine undefinierte Konstante.
Je nachdem, wie das error_reporting auf deinem Server eingestellt ist, bekommst du daraufhin eine unschöne Meldung und deine Weiterleitung mittels header() kann nicht mehr funktionieren.
Außerdem ist dein Script immer noch anfällig für einen Angriff mittels SQL-Injection. Wenn deine Datenbank irgendwann mal gekillt wurde, darfst du dich nicht wundern.
Was du dagegen machen kannst, habe ich dir auch bereits geschrieben...
Schöner Gruß,
rob
1. »» $_GET[DELETE] ist noch immer falsch. Du benutzt hier noch immer eine undefinierte Konstante.
2. »» Außerdem ist dein Script immer noch anfällig für einen Angriff mittels SQL-Injection. Wenn deine Datenbank irgendwann mal gekillt wurde, darfst du dich nicht wundern.
Was du dagegen machen kannst, habe ich dir auch bereits geschrieben...
Hi rob, danke für deine Hilfe. Ich habe noch zwei Fragen an dich.
Wie kann ich eine Konstante definieren? Ich verstehe nicht wie ich das machen soll.. bzw. was genau du damit meinst. (siehe 1.)
Du hast zwar geschrieben, das du bereits geschrieben hast wie man SQL-Injection verhindern kann, allerdings finde ich das nicht. Könntest du mir das bitte noch einmal schreiben?
Wäre sehr nett wenn du mir hilfst!
Hi!
- »» $_GET[DELETE] ist noch immer falsch. Du benutzt hier noch immer eine undefinierte Konstante.
Wie kann ich eine Konstante definieren? Ich verstehe nicht wie ich das machen soll.. bzw. was genau du damit meinst. (siehe 1.)
Nein. Du solltst keine Konstante definieren.
Dein Array-Element heißt $_GET['DELETE'] und nicht $_GET[DELETE].
Wenn du $_GET[DELETE] schreibst, dann nimmt PHP an, daß du mit DELETE eine Konstante meinst, welche allerdings gar nicht definiert wurde.
Das sollte dann so aussehen:
Notice: Use of undefined constant DELETE - assumed 'DELETE' in /www/blabla.php on line blabla
Notice: Undefined index: DELETE in /www/blabla.php on line blabla
(Zumindest wenn das error_reporting auf E_NOTICE steht)
Du hast zwar geschrieben, das du bereits geschrieben hast wie man SQL-Injection verhindern kann, allerdings finde ich das nicht. Könntest du mir das bitte noch einmal schreiben?
http://forum.de.selfhtml.org/my/?t=150370&m=977240
Schöner Gruß,
rob
http://forum.de.selfhtml.org?t=150370&m=977240
Vielen vielen Dank rob!!!
Hatte den Post unter dem Link gar nicht mher gesehen, weil er so weit unten war.
Habe das Kommentarformular mit Hilfe eines Buches gemacht und da wurde das Sicherheitsloch in keinster Weise erwähnt. Habe nun im Internet etwas geschaut und das Script jetzt so gut ich konnte verbessert/sicher gemacht.
Ich grüsse den Cosmos,
Das ist sehr unklug. Warum das Passwort per URL übergeben und das noch unverschlüsselt?
Welchen Sinn sollte es machen, wenn du ein Passwort verschlüsselst, bevor du es per URL übergibst?
Oder meinst du mit "unverschlüsselt" das fehlen von SSL?
Möge das "Self" mit euch sein
Hi!
Welchen Sinn sollte es machen, wenn du ein Passwort verschlüsselst, bevor du es per URL übergibst?
Naja, eigentlich meinte ich eher die Übergabe per URL. War vielleicht nicht so gut ausgedrückt.
Ich würde generell kein Passwort per URL übergeben.
Es gibt immer irgendwelche Deppen, die nicht aufpassen und vielleicht mal irgendwo den Link mit PW posten. Schon kommt da jeder rein.
Außerdem wird der URL mit PW dann in der Browserhistory gespeichert. Sehr gefährlich, wenn man sich beispielsweise mal aus einem Internetcafé dort einloggt.
Übergibt man das PW per POST, wäre zumindest diese Gefahr nicht gegeben.
Oder meinst du mit "unverschlüsselt" das fehlen von SSL?
Das wäre natürlich das Optimum, wenn man das PW nur über eine verschlüsselte Verbindung überträgt. Aber ich weiß, daß das nicht immer möglich ist. Bei vielen Websites (z.B. meinen PHPBB2s) mache ich das ja auch nicht so.
Wäre aber natürlich das Beste.
Schöner Gruß,
rob