Problem mit ' (und ")[erledigt]

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
AmShaegar
Mitglied
Beiträge: 408
Registriert: 09.07.2004 17:33

Problem mit ' (und ")[erledigt]

Beitrag von AmShaegar »

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...
Zuletzt geändert von AmShaegar am 07.01.2005 17:04, insgesamt 2-mal geändert.
Benutzeravatar
Blutgerinsel
Mitglied
Beiträge: 1801
Registriert: 19.07.2004 18:53
Wohnort: Landkreis Ulm
Kontaktdaten:

Beitrag von Blutgerinsel »

Code Beispiel.....
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

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.
AmShaegar
Mitglied
Beiträge: 408
Registriert: 09.07.2004 17:33

Hier alles, was ich an Auskunft geben kann

Beitrag von AmShaegar »

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:

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>
Verarbeitung der Daten in der neuen Datei:

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>
und hier, was mit den Daten aus den Feldern name und text passiert:

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>";
    }
  }
?>
Benutzeravatar
MrMind
Mitglied
Beiträge: 464
Registriert: 29.11.2003 17:14
Wohnort: Darmstadt/Odw
Kontaktdaten:

Beitrag von MrMind »

versuch mal das was Pyramide gesagt hatte:

Code: Alles auswählen

$text = addslashes($_POST['text']);
$name = addslashes($_POST['name']);
und um eine SQL-Injection zu vermeiden, dann noch folgendes beim eintragen in die DB:

Code: Alles auswählen

 str_replace("\'","''",$name), str_replace("\'","''",$text)

Mfg
MrMind
Selbst ist der Coder
Coder unter Linux
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

Wieso beides? Doppelt gemoppelt hält besser?
Benutzeravatar
MrMind
Mitglied
Beiträge: 464
Registriert: 29.11.2003 17:14
Wohnort: Darmstadt/Odw
Kontaktdaten:

Beitrag von MrMind »

Pyramide hat geschrieben:Wieso beides? Doppelt gemoppelt hält besser?
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.

An Sicherheit darf man nicht sparen.

Mfg
MrMind
Selbst ist der Coder
Coder unter Linux
Benutzeravatar
Blutgerinsel
Mitglied
Beiträge: 1801
Registriert: 19.07.2004 18:53
Wohnort: Landkreis Ulm
Kontaktdaten:

Beitrag von Blutgerinsel »

Ich sag nur Mc Murphys Computer Law.....
AmShaegar
Mitglied
Beiträge: 408
Registriert: 09.07.2004 17:33

Beitrag von AmShaegar »

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.
Benutzeravatar
Blutgerinsel
Mitglied
Beiträge: 1801
Registriert: 19.07.2004 18:53
Wohnort: Landkreis Ulm
Kontaktdaten:

Beitrag von Blutgerinsel »

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.
*ohne Worte*

http://www.php.net/manual/de/language.types.string.php
Antworten

Zurück zu „Coding & Technik“