Problem mit ' (und ")[erledigt]
Problem mit ' (und ")[erledigt]
ich stoße immer wieder auf ein großes problem:
ich programmiere irgendetwas, z.B. eine shoutbox und will natürlcih, dass man auch " und ' benutzen kann. allerdings, egal wie viel ich rumprobiere, erscheinen beiträge in denen o.g. zeichen benutzt werden nicht.
ich denke, dass duch diese zeichen, der script durcheinander gebracht wird. allerdings weiß ich auch nicht genau, wie ich die " und ' so "maskiere", dass sie vom script nicht beachtet werden, sondern einfach in die datenbank eingetragen werden.
falls dies als erklärung nicht ausreicht, wered ich versuchen, besagten teil aus meinem script einmal hier anzuführen...
vielen dank schonmal...
ich programmiere irgendetwas, z.B. eine shoutbox und will natürlcih, dass man auch " und ' benutzen kann. allerdings, egal wie viel ich rumprobiere, erscheinen beiträge in denen o.g. zeichen benutzt werden nicht.
ich denke, dass duch diese zeichen, der script durcheinander gebracht wird. allerdings weiß ich auch nicht genau, wie ich die " und ' so "maskiere", dass sie vom script nicht beachtet werden, sondern einfach in die datenbank eingetragen werden.
falls dies als erklärung nicht ausreicht, wered ich versuchen, besagten teil aus meinem script einmal hier anzuführen...
vielen dank schonmal...
Zuletzt geändert von AmShaegar am 07.01.2005 17:04, insgesamt 2-mal geändert.
- Blutgerinsel
- Mitglied
- Beiträge: 1801
- Registriert: 19.07.2004 18:53
- Wohnort: Landkreis Ulm
- Kontaktdaten:
Das "maskieren" geht mit [php:addslashes]. Falls die php.ini-Einstellung magic_quotes_gpc aktiviert ist, macht PHP dies jedoch schon automatisch, so daß bei zusätzlichem Anwenden von addslashes() dann auch \" gespeichert wird. In der common.php von phpBB findest du eine Methode, wie unabhängig von dieser Einstellung alle get/post/cookie Werte maskiert werden können.
Hier alles, was ich an Auskunft geben kann
Ich hab eine alte Datei, mit der die Daten in die Db eingetragen werden... und eine Neue, die "ein wenig" überarbeitet ist, mit der aber keine Daten in die Db eingetragen werden, sobald dort " oder ' drin vorkommen. Allerdings entdecke ich diesbezüglich auch keine Unterschiede. Wenn man z.B. die $name im nächsten Schritt ausgibt, also if($tag == 1), wird " so: \" angezeigt. Dies wäre dann das, was in die Db eingetragen wird, wenn nicht irgendein Fehler dabei wäre...
Formular der neuen Datei:
Verarbeitung der Daten in der neuen Datei:
Das ist das Formular der alten Datei:
und hier, was mit den Daten aus den Feldern name und text passiert:
Formular der neuen Datei:
Code: Alles auswählen
<tr><td><form action="tag.php?tag=1#bottom" method="post"><b>Name:</b><br>
<input type="text" name="name" maxlength="25" size="33" value="<?php echo $name; ?>"></td></tr><tr><td><b>URL:</b><br>
<input type="text" name="url" maxlength="150" size="33" value="<?php if($url == "") { echo "http://"; } else { echo $url; } ?>"></td></tr><tr><td><b>E-Mail:</b><br>
<input type="text" name="mail" maxlength="30" size="33" value="<?php echo $mail; ?>"></td></tr><tr><td><b>Text:</b><br>
<textarea name="text" cols="27" rows="4"><?php echo $text; ?></textarea></td></tr><tr><td>
<input type="hidden" name="nr" value="1"><input type="submit" value="Send">
<form><a name="bottom"></a></td></tr></table>
</td></tr>
Code: Alles auswählen
<?Php
if($tag == "1")
{
$name = $_POST['name'];
$url = $_POST['url'];
$text = $_POST['text'];
$mail = $_POST['mail'];
$date = date("d.m.y H:i");
$nr = $_POST['nr'];
if($name != "" and $text != "")
{
if($url == "")
{
$url = "0";
}
if($mail == "")
{
$mail = "0";
}
$INSERT = "INSERT INTO tagboard (name, url, mail, text, date) VALUES ('$name', '$url', '$mail', '$text', '$date')";
mysql_query($INSERT);
$_SESSION['nr'] = $nr;
echo "<head><meta http-equiv=\"refresh\" content=\"0; URL=tag.php\"></head>";
}
else
{
echo "<a name=\"bottom\"><p align=\"center\"><b>Please fill in your name and text.</b><br><form action=\"tag.php#bottom\" method=\"post\"><input type=\"hidden\" name=\"name\" value=\"$name\"><input type=\"hidden\" name=\"url\" value=\"$url\"><input type=\"hidden\" name=\"mail\" value=\"$mail\"><input type=\"hidden\" name=\"text\" value=\"$text\"><input type=\"submit\" value=\"Back\"></form></p></a>";
}
}
?>
Das ist das Formular der alten Datei:
Code: Alles auswählen
<tr><td><form action="tag.php?tag=1#bottom" method="post"><b>Name:</b><br>
<input type="text" name="name" maxlength="25" size="33" value="<?php echo $name; ?>"></td></tr><tr><td><b>Homepage:</b><br>
Http://<input type="text" name="url" maxlength="150" size="27" value="<?php echo $url; ?>"></td></tr><tr><td><b>E-Mail:</b><br>
<input type="text" name="mail" maxlength="30" size="33" value="<?php echo $mail; ?>"></td></tr><tr><td><b>Text:</b><br>
<textarea name="text" cols="25" rows="4"><?php echo $text; ?></textarea></td></tr><tr><td>
<input type="submit" value="Abschicken">
<form><a name="bottom"></a></td></tr></table>
</td></tr>
Code: Alles auswählen
<?php
if($tag == "1")
{
$name = $_POST['name'];
$url = $_POST['url'];
$text = $_POST['text'];
$mail = $_POST['mail'];
if($name != "" and $text != "")
{
if($url == "")
{
$url = "0";
}
if($mail == "")
{
$mail = "0";
}
$INSERT = "INSERT INTO tagboard (name, url, mail, text) VALUES ('$name', '$url', '$mail', '$text')";
mysql_query($INSERT);
echo "<head><meta http-equiv=\"refresh\" content=\"0; URL=tag.php\"></head>";
}
else
{
echo "<a name=\"bottom\"><p align=\"center\"><b>Du musst Name und Text eintragen</b><br><form action=\"tag.php#bottom\" method=\"post\"><input type=\"hidden\" name=\"name\" value=\"$name\"><input type=\"hidden\" name=\"url\" value=\"$url\"><input type=\"hidden\" name=\"mail\" value=\"$mail\"><input type=\"hidden\" name=\"text\" value=\"$text\"><input type=\"submit\" value=\"Zurück\"></form></p></a>";
}
}
?>
versuch mal das was Pyramide gesagt hatte:
und um eine SQL-Injection zu vermeiden, dann noch folgendes beim eintragen in die DB:
Mfg
MrMind
Code: Alles auswählen
$text = addslashes($_POST['text']);
$name = addslashes($_POST['name']);
Code: Alles auswählen
str_replace("\'","''",$name), str_replace("\'","''",$text)
Mfg
MrMind
Selbst ist der Coder
Coder unter Linux
Coder unter Linux
Naja vor SQL-Injectionen kann man sich wohl net genug Schützen. Müsste mal checken ob addslashes() ausreicht um sich vor SQL-Injectionen zu schützen, da aber das phpBB die von mir erwähnte Anwendung macht, und ich dadurch lokal noch keine SQL-Injection ausführen konnte, sehe ich diese Methode als am sichersteren an.Pyramide hat geschrieben:Wieso beides? Doppelt gemoppelt hält besser?
An Sicherheit darf man nicht sparen.
Mfg
MrMind
Selbst ist der Coder
Coder unter Linux
Coder unter Linux
- Blutgerinsel
- Mitglied
- Beiträge: 1801
- Registriert: 19.07.2004 18:53
- Wohnort: Landkreis Ulm
- Kontaktdaten:
- Blutgerinsel
- Mitglied
- Beiträge: 1801
- Registriert: 19.07.2004 18:53
- Wohnort: Landkreis Ulm
- Kontaktdaten:
*ohne Worte*AmShaegar hat geschrieben:habs versucht @MrMind.
hat nicht geklappt. keine veränderung.
was mich ja so wundert ist: ich erkenne keinen unterschied zwischen meiner alten und meiner neuen version diesbezüglich, aber die alte funktioniert wie gesagt. die neue nicht.
http://www.php.net/manual/de/language.types.string.php