Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [PHP] Strings entschärfen (https://www.delphipraxis.net/92513-%5Bphp%5D-strings-entschaerfen.html)

TheMiller 21. Mai 2007 14:33


[PHP] Strings entschärfen
 
Hallo,

ich programmiere schon etwas länger PHP, habe aber nie so richtig den Sicherheitsaspekt behandelt. Ich bin gerade dabei, String zu entschräfen, damit diese die Datenbank und meine Seite (XSS etc) nicht gefährden.

Dafür behandle ich jeden String folgendermaßen:

Code:
$text = strip_tags(addslashes(htmlentities($_REQUEST['text'])));
if(strlen($text) > 15)
{
 die("CSS-HACK");
}
Zahlen werden erst mit intval($_REQUEST['zahl1']) eingelesen und Radio- sowie Checkboxen werden auf ihre tatsächlichen Werte überprüft.

Mir geht es hauptsächlich um die Stringbehandlung. Wenn zu den anderen Methoden was anzumerken ist, lese ich das aber auch gerne!

Dankeschön

CCRDude 21. Mai 2007 14:37

Re: [PHP] Strings entschärfen
 
Speziell für MySQL als Datenbank gabs da auch direkt mysql_real_escape_string()
(mit addslashes etc. verhampelt man sich so schnell beim hin- und zurück)

TheMiller 21. Mai 2007 14:39

Re: [PHP] Strings entschärfen
 
Stimmt genau! Das habe ich total vergessen. Aber sonst ok?

alcaeus 21. Mai 2007 15:39

Re: [PHP] Strings entschärfen
 
Kurzum:
  • Werte casten. Einfach mit (int), (string), (whatever) $value den Wert auf nen Typ boxen.
  • Bei Strings:
    • Zeilenumbrueche auf ein Standardformat bringen:
      Code:
      $value = str_replace(array("\n\r", "\r"), "\n", $value);
    • Ggf. stripslashes() ausfuehren:
      Code:
      $value = (get_magic_quotes_gpc()) ? stripslashes($value) : $value;
    • String trimmen:
      Code:
      $value = trim($value);
    • HTML-Steuerzeichen entschaerfen:
      Code:
      $value = htmlspecialchars($value);

Dann jeden String, der in ne SQL-Abfrage wandert mit mysql_real_escape_string() escapen, und fertig ist dein Schutz gegen Cross-Site-Scripting (XSS) und SQL-Injection :)

Greetz
alcaeus

Die Muhkuh 21. Mai 2007 15:40

Re: [PHP] Strings entschärfen
 
Oh, so "einfach"? Hätte gedacht, dass man da mehr beachten muss.

TheMiller 21. Mai 2007 16:15

Re: [PHP] Strings entschärfen
 
Mist, und ich habe mich im Quelltext und ein "X" verschrieben. Meine natürlich, wie ich es auch im Text geschrieben habe, XSS *g*

ACHSO: was hat das mit den Zeilenumbrüchen auf sich?

Danke

TheMiller 21. Mai 2007 16:54

Re: [PHP] Strings entschärfen
 
Ich habe mir jetzt daraus eine Funktion gebastelt, die auch die Länge des Strings überprüft (wegen XSS)... ist diese Funktion in Ordnung?

Code:
function disarmstring($string, $len = NULL)
{
 $result = str_replace(array("\n\r", "\r"), "\n", $string);
 $result = trim($result);
 $result = htmlspecialchars($result);
 if(strlen($string) > $len)
 {
  return false;
 }
 else
 {
  return $result;
 }
}
Nur das mit den Leerzeichen in ein Format bringen habe ich nicht ganz so verstanden? Warum ist das gefährlich? Was kann passieren? etc...

Danke

Dunedain 21. Mai 2007 18:10

Re: [PHP] Strings entschärfen
 
Handelt sich warscheinlich nur um nen tippfehler, aber heisst das nicht "\r\n" an Stelle von "\n\r"?

TheMiller 21. Mai 2007 18:23

Re: [PHP] Strings entschärfen
 
Das kann ich dir nicht sagen. Verstehe, wie oben beschrieben, den Sinn nicht, wieso das genormt werden soll.

DGL-luke 21. Mai 2007 18:28

Re: [PHP] Strings entschärfen
 
Weil man dann nur mit Linux-Umbrüchen arbeitet. Und die (afaik von keinem Betriebssystem eingesetzten) \r-Zeichen gleich mit ummodelt.

Damit wird der string einfach konsistent.

Dunedain 21. Mai 2007 19:00

Re: [PHP] Strings entschärfen
 
Wenn ich mich recht entsinne:

Code:
LF  --> \n  --> Linux, Unix, Solaris & Co
CR  --> \r  --> MacOS
CRLF --> \r\n --> Windows
und den String auf einen einheitlichen "Umbruch-Level" zu bringen, ist zwar (imho) keine sicherheitsrelevante Operation, aber auch nicht verkehrt ;)

alcaeus 22. Mai 2007 07:23

Re: [PHP] Strings entschärfen
 
Ja, kann sein dass ich es wiedermal verkehrt hatte.

@DJ-SPM: die Laenge zu testen klappt vielleicht, wenn du einen kurzen Parameter erwartest, bei laengeren Teilen ist die Loesung VFA (voll fuern A****)

Greetz
alcaeus

TheMiller 22. Mai 2007 14:29

Re: [PHP] Strings entschärfen
 
Najagut, das ist klar.

Gerade bei längeren benutzerspezifischen Texten wie Usernmails etc. ist das nicht sinnvoll, aber für Parameter, bei denen ich die Länge schon kenne, (zB. MD5-Hash)...


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:16 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz