![]() |
Re: [PHP] Parameter übergeben
Wie meinst du das mit Verändern?
|
Re: [PHP] Parameter übergeben
Wenn ich mein Script wiefolgt aufrufe:
Code:
Dann könnte jemand ja hingehen und die Eingabe verändern und womöglich Befehle wie DROP TABLE aufrufen:
http://meine-Homepage.de/Test.php?username='Test'&passwort='blablub'
z.B.:
Code:
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:
http://meine-Homepage.de/Test.php?username=''
Code:
Weisst du nun was ich meine?
$sqlabfrage = "SELECT * FROM user WHERE name='$username' ";
|
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.
|
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 ;-) |
Re: [PHP] Parameter übergeben
Zitat:
![]() |
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?
|
Re: [PHP] Parameter übergeben
Zitat:
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 |
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). |
Re: [PHP] Parameter übergeben
So, habe meine Idee jetzt mal umgesetzt:
Code:
Das funktioniert doch so, oder? Habe eben getestet und es kommen nur zusammenhängende Strings durch...
<?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"; } ?> |
Re: [PHP] Parameter übergeben
Zitat:
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:
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)
get.php?username=';DROP%09TABLE%09Users;--
Was hat htmlspecialchars() damit zu tun? Stell dir sowas vor:
Code:
Und jetzt stell dir fuer $username diese Eingabe vor:
$username = $_GET['username'];
// Abfrage if ($not_exists) { echo "Benutzer $username existiert nicht"; }
Code:
Da ist kein Leerzeichen drin, und glaub mir, man kann viel mehr Scheiss mit XSS-Luecken anstellen als nur ein Cookie auszugeben.
<script>alert(document.cookie);</script>
Greetz alcaeus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:08 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz