Delphi-PRAXiS
Seite 3 von 5     123 45      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [PHP] Parameter übergeben (https://www.delphipraxis.net/111691-%5Bphp%5D-parameter-uebergeben.html)

mkinzler 9. Apr 2008 08:20

Re: [PHP] Parameter übergeben
 
Wie meinst du das mit Verändern?

Yheeky 9. Apr 2008 08:34

Re: [PHP] Parameter übergeben
 
Wenn ich mein Script wiefolgt aufrufe:

Code:
http://meine-Homepage.de/Test.php?username='Test'&passwort='blablub'
Dann könnte jemand ja hingehen und die Eingabe verändern und womöglich Befehle wie DROP TABLE aufrufen:
z.B.:
Code:
http://meine-Homepage.de/Test.php?username=''
Das Problem ist, dass ich die Parameter übergeben muss, weil ich die php Datei über mein Programm aufrufe. In der PHP Datei sieht der SQL Befehl ja wiefolgt drin:

Code:
$sqlabfrage = "SELECT * FROM user WHERE name='$username' ";
Weisst du nun was ich meine?

mkinzler 9. Apr 2008 08:44

Re: [PHP] Parameter übergeben
 
Das sollte man halt nicht machen, ist aber keine Problem der Werteübergabe sondern die ungeprüfte Übernahme dieser in Abfragen.

Yheeky 9. Apr 2008 09:09

Re: [PHP] Parameter übergeben
 
Was sollte man nicht machen?
Ich weiss, ich würde das ja auch gerne abfragen, aber ich kenne die ganzen Befehle nicht so gut und ich weiss nicht, auf was ich alles achten soll. Im Grund lasse ich keinen Username mit Leerzeichen zu, von daher würde das schonmal in die Abfrage reinkommen.
Ansonsten weiss ich aber nicht, inwiefern man da noch irgend ne Lücke ausfindig machen kann, das wäre halt schon blöd ;-)

mkinzler 9. Apr 2008 09:11

Re: [PHP] Parameter übergeben
 
Zitat:

Was sollte man nicht machen?
parameter ungeprüft übernehmen.

http://www.phpcenter.de/de-html-manu...injection.html

Yheeky 9. Apr 2008 10:01

Re: [PHP] Parameter übergeben
 
Okay, danke für den Link. Der erklärt schonmal das Grundprinzip. Im Grunde brauche ich beim Parameter nur nach Leerzeichen prüfen, weil ein Username einen solchen nicht enthalten darf. Oder fällt irgend jemandem eine Sicherheitslücke auf?

alcaeus 9. Apr 2008 10:25

Re: [PHP] Parameter übergeben
 
Zitat:

Zitat von Yheeky
Okay, aber wie kann ich dann Parameter übergeben, ohne dass man sie verändern kann?

Erste Regel in der Webentwicklung: Parameter sind unsicher.
Zweite Regel: traue keinem User.
Dritte Regel: validiere jede Eingabe und sichere sie ab.

Um es kurz zu sagen: gar nicht, ich kann dir jeglichen Muell mitgeben, und du kannst nichts dagegen machen. Auch Cookies oder Browser-Variablen (User-Agent, Referrer, usw.) sind nicht davor sicher. Also geh einfach davon aus dass du nur Muell kriegst, und bau deine Anwendung so dass sie auch Muell schluckt. Dann machts auch nichts aus wenn dir jemand mal ein bisschen was perverseres mitgibt.

Kleiner Tipp noch: htmlspecialchars(). Kam bis jetzt noch nicht auf und ist mindestens genauso wichtig.

Greetz
alcaeus

Yheeky 9. Apr 2008 11:15

Re: [PHP] Parameter übergeben
 
Dass ich die Eingaben nicht verhindern kann ist klar, aber es geht mir ja genau um dein 3.: ich will, dass "Müll" nicht weiter erkannt und weiter verarbeitet wird. Inwiefern da htmlspecialchars helfen soll, habe ich leider nicht verstanden.
Sorry, aber ich habe noch nicht wirklich viel mit PHP gemacht. War anfangs sogar stolz auf mein funktionierenden Login-Script, aber leider ist das keineswegs sicher :-(
Nochmal die Frage: kann ich nicht einfach einen Parameter auf Leerzeichen überprüfen? Das würde mir glaube ich schon helfen, weil ein Username und ein Passwort keine Leerstellen enthalten darf (kann ich einfach über mein Programm abfragen).

Yheeky 9. Apr 2008 12:12

Re: [PHP] Parameter übergeben
 
So, habe meine Idee jetzt mal umgesetzt:

Code:
<?php
  include('server.php');
 $username = $_GET["username"];
 $passwort = $_GET["password"];

 $leerstelle  = ' ';
 $usernamePos = strpos($username, $leerstelle);
 $passwortPos = strpos($passwort, $leerstelle);

 // Prüfen, ob $username oder $passwort ein Leerzeichen enthält
 if ($usernamePos === false AND $passwortPos === false) {
 $sqlabfrage = "SELECT * FROM Tabelle WHERE name='$username' AND password='$passwort' ";

 echo $sqlabfrage;

 $res = mysql_db_query($db, $sqlabfrage);
 $num = mysql_affected_rows();

if ($num > 0)
{
      echo "User gefunden!";
      $username = mysql_result($res, 0, "name");
      }
  else {
      echo "User nicht gefunden!";
      }
 }
 else {
 echo "Fehlerhafte Eingabe";
 }

?>
Das funktioniert doch so, oder? Habe eben getestet und es kommen nur zusammenhängende Strings durch...

alcaeus 9. Apr 2008 12:22

Re: [PHP] Parameter übergeben
 
Zitat:

Zitat von Yheeky
Dass ich die Eingaben nicht verhindern kann ist klar, aber es geht mir ja genau um dein 3.: ich will, dass "Müll" nicht weiter erkannt und weiter verarbeitet wird. Inwiefern da htmlspecialchars helfen soll, habe ich leider nicht verstanden.

Falsch. Betrachte alles was ankommt, als Muell. Dann sortierst du es (stripslashes falls magic_quotes an sind, htmlspecialchars, trim), und dann ueberlegst du ob du es verwenden willst und ob die Qualitaet passt (z.B. ob der Benutzername gewisse Kriterien erfuellt). Und merke: alles was du kriegst, sind Strings. Entweder du typisierst die Variablen selbst (z.B. intval() oder (int)) oder du musst jede Variable, die in ein Query kommt mit Quotes umgeben und mysql_real_escape_string drueberlaufen lassen. Bei Strings ist es naemlich straeflich, das nicht zu tun.

Zum Code sag ich nur, OUCH. Nicht nur Spaces sind blanks, da gibts noch viel mehr. Wie gesagt, mit mysql_real_escape_string() escapen.
Folgender Query-String:
Code:
get.php?username=';DROP%09TABLE%09Users;--
Kommt durch deine Pruefung durch, aber macht trotzdem scheisse. Und was machst du wenn der Benutzer ein Leerzeichen in seinem Passwort haben will? Oder wenn er einen Titel fuer einen Blog-Eintrag oder ne Support-Mail in ein Formular eingibt? Versuch nicht zu verhindern, dass ein Benutzer SQL-Queries mitschickt. Verhindere, dass diese zur Ausfuehrung kommen, indem du Quotes usw. unschaedlich machst (siehe obige Funktion)

Was hat htmlspecialchars() damit zu tun? Stell dir sowas vor:
Code:
$username = $_GET['username'];
// Abfrage
if ($not_exists)
{
  echo "Benutzer $username existiert nicht";
}
Und jetzt stell dir fuer $username diese Eingabe vor:
Code:
<script>alert(document.cookie);</script>
Da ist kein Leerzeichen drin, und glaub mir, man kann viel mehr Scheiss mit XSS-Luecken anstellen als nur ein Cookie auszugeben.

Greetz
alcaeus


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:22 Uhr.
Seite 3 von 5     123 45      

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