AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

[PHP] Parameter übergeben

Ein Thema von Yheeky · begonnen am 8. Apr 2008 · letzter Beitrag vom 9. Apr 2008
Antwort Antwort
Seite 3 von 5     123 45   
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#21

Re: [PHP] Parameter übergeben

  Alt 9. Apr 2008, 09:20
Wie meinst du das mit Verändern?
Markus Kinzler
  Mit Zitat antworten Zitat
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#22

Re: [PHP] Parameter übergeben

  Alt 9. Apr 2008, 09:34
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?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#23

Re: [PHP] Parameter übergeben

  Alt 9. Apr 2008, 09:44
Das sollte man halt nicht machen, ist aber keine Problem der Werteübergabe sondern die ungeprüfte Übernahme dieser in Abfragen.
Markus Kinzler
  Mit Zitat antworten Zitat
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#24

Re: [PHP] Parameter übergeben

  Alt 9. Apr 2008, 10:09
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#25

Re: [PHP] Parameter übergeben

  Alt 9. Apr 2008, 10:11
Zitat:
Was sollte man nicht machen?
parameter ungeprüft übernehmen.

http://www.phpcenter.de/de-html-manu...injection.html
Markus Kinzler
  Mit Zitat antworten Zitat
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#26

Re: [PHP] Parameter übergeben

  Alt 9. Apr 2008, 11:01
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?
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#27

Re: [PHP] Parameter übergeben

  Alt 9. Apr 2008, 11:25
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
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#28

Re: [PHP] Parameter übergeben

  Alt 9. Apr 2008, 12:15
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).
  Mit Zitat antworten Zitat
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#29

Re: [PHP] Parameter übergeben

  Alt 9. Apr 2008, 13:12
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...
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#30

Re: [PHP] Parameter übergeben

  Alt 9. Apr 2008, 13:22
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
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:20 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