Beiträge von Afrael

    Das Problem scheint zu sein, dass $strReturnhtml leer ist, das Headerzeugs ist erstmal egal. Tu mal folgendes oben ins Script:
    error_reporting(E_ALL);
    ini_set("display_errors",1);
    So sollte es dann aussehen

    PHP ungleich SSI (diese funktionieren, wenn überhaupt, nur in Dokumenten mit der Erweiterung .shtml). Je nachdem, welche Anforderungen du hast, solltest du nach "PHP include menü" googlen und von da weitergucken.

    Du musst die Datei mit der Endung .php, nicht .htm speichern. Wenn es dann immer noch nicht klappt, ist PHP auf deinem Server nicht aktiviert und du musst zum Testen einen anderen Webspace verwenden oder xampp lokal installieren.

    Ich verstehe den Sinn der ganzen Konstruktion nicht wirklich, aber okay. Auf dein erstes Beispiel bezogen
    Du machst ein
    UPDATE tabelle SET order_id=order_id+1 WHERE order_id >= 2
    Das verschiebt alle Datensätze von 2 bis zum Ende der Tabelle quasi um eins nach hinten. Dann setzt du Datensatz 4 mit der order_id 2 ein.
    Hoffe, ich habe die Frage richtig verstanden.

    Das mag minimal sein aber es ist unnötig. Mit einfachen Anführungszeichen und . ist die Struktur klarer und es ist schneller ohne irgendwelche Nachteile.

    Sorry, aber ich finde

    PHP
    $sql="SELECT foo FROM bar WHERE id='".$id."'";


    übersichtlicher als

    PHP
    $sql='SELECT foo FROM bar WHERE id=\''.$id.'\'';

    dass stimm auch wieder. Warum kann man eigentlich js ausschalten und php nicht. JS kann keine Benutzerdaten lesen und ein cookie keinen ausführbahren code enthalten. wozu muss man den Webmastern dann das leben schwer machen?

    *klugdung* Nun, wenn der Webmaster dumm genug ist, die Cookies ungefiltert als Code zu übernehmen (warum auch immer man so etwas hirnrissiges machen sollte), kann man als Angreifer über die eigenen Cookies durchaus Code ausführen.
    Beispiel:

    PHP
    <?php 
    if (userIsAdmin())
    {
    setcookie("usergroup", "admin", time()+3600);
    }
    if (file_exists($_COOKIE['usergroup'].".php")) 
       include ($_COOKIE['usergroup'].".php");
    ?>


    Was die E_NOTICE angeht, finde ich ein bisschen komisch, denn ich bekomme keinerlei Notices oder irgendwelche Art von Fehlermeldungen angezeigt.


    Jap, ist richtig, weil du sauber codest :) Würdest du einfach $username=$_GET['username']; schreiben, hättest du eine E_NOTICE, wenn $_GET['username'] nicht initialisiert ist;

    Zitat

    Was die isset() und empty() angeht, habt ihr beide natürlich recht. Ich habe versucht den Code ein wenig sinnvoller zu gestalten. So sieht er nun aus:

    PHP
    $username = (isset($_GET['username']) and !empty($_GET['username'])) ? $_GET['username'] : 'false';
    $password = (isset($_GET['password']) and !empty($_GET['password'])) ? $_GET['password'] : 'false';
    if ($username and $password != 'false') {

    Ist diese Methode nun besser oder habt ihr einen besseren Vorschlag?


    Ich fand das, was du da hattest, schon richtig so, bis auf die Sache mit dem empty, die ist wie gesagt überflüssig.

    PHP
    $username = isset($_GET['username']) ? $_GET['username'] : '';
    $password = isset($_GET['password'])  ? $_GET['password'] : '';


    So würd ichs machen.

    Ungetestet:

    Andere Frage, warum guckst du nicht über die Datenbank, wo da Links gesetzt sind?


    -Die Überprüfung mit isset, empy etc. ist absolut unnötig und somit zeitraubend.


    Ich glaub, da werden wir beide uns nie einig :P Fakt ist, dass in diesem Fall die Prüfung auf !empty tatsächlich überflüssig ist. Du setzt $username ja im Zweifelsfalle sowieso auf leer, da ist es egal, ob vielleicht schon leer ist.
    Fakt ist außerdem, dass man eine E_NOTICE kriegt, wenn man isset nicht verwendet. Und ich mag meine Variablen lieber initialisiert.

    Zitat


    -Die Ansage: "Connection Failed" ist Unsinn, vielmehr ist das Passwort falsch.


    Äh... die mysql_query scheitert ja schon, nicht die Ergebnisse. Das mit Connection Failed dürfte dann stimmen.
    @Threadersteller
    Das muss <br /> statt <br \> heißen ;)
    Ach, und zur Verbesserung der Performance solltest du in

    PHP
    SELECT `username`, `password` FROM `test` WHERE `username` ='$username' and `password` ='$password'


    ein LIMIT 1 hinzufügen, du hast ja nur einen Benutzer mit diesem Benutzernamen.
    Ansonsten seh ich auch keine Möglichkeit einer Injection.

    Weil ich nicht weiß, wie ausführlich ich das hier beschreiben darf. Das meiste, was ich meinte, kann nur passieren, wenn man Zahlen per GET empfängt, nicht sicherstellt, dass es Zahlen sind, und sie ohne Anführungsstriche in die Query einbaut.
    SELECT * FROM table WHERE id=$_GET['id'] zum Beispiel. Und das würde dann irgendwann auf ein SQL-Injection Tutorial hinauslaufen.
    Hätte gerne die Meinung eines Mods, bevor ich mich auf sowas einlasse :/

    Jein. Ich bin mir ziemlich sicher, dass es spätestens dann illegal wird, wenn echtes Geld beteiligt ist (ein Spiel mit Premiumaccounts z.B.). Wenn die Leute sich zum Beispiel ingame Punkte mit einem Autorefresher holen können, werden sie sich keine Premiumaccounts kaufen, dadurch verliert die Firma ebenso Geld wie Musikfirmen beim Raubkopieren. Kann das jemand bestätigen?

    Hab mit Firebug debuggt und danach das HTML validiert (man merkt, ich hab nix zu tun :roll:)


    Dein Hauptfehler war, dass du ein Minus im Attribut verwendet hast und dass du die Klammern bei toUpperCase vergessen hattest. Und höchstwahrscheinlich ist die Lösung von synaptic besser, hab sie mir nicht ausführlich angeguckt.

    Habs im Anhang nochmal hochgeladen. Weiß allerdings nicht, welche PHP-Version bei dir läuft, evtl hast du schon PHP 5 und brauchst die andere.

    Erstelle mal eine Datei obscure_info.php, gib da folgendes ein
    <?php phpinfo(); ?>
    lad sie auf deinem Webspace hoch und guck sie dir im Browser an. Da steht dann deine PHP-Version.

    1. @ vor einer Funktion zu schreiben unterdrückt Fehlermeldungen, die von der Funktion selber ausgeworfen werden.

    2. Das ist richtig. Diese Zeichen können benutzt werden, um eine SQL-Injektion durchzuführen.
    [Einschub: Würde die Query einfach 'SELECT `username`, `email` FROM `table` WHERE `id` = $id' ohne einfache Anführungsstriche um $id lauten, kämen wir als Angreifer sogar ohne diese Zeichen aus.]

    Da wir die $_GET['id'] bereits nach Integer, also in eine Ganzzahl, konvertiert haben, ist mysql_real_escape_string an dieser Stelle sogar überflüssig. Allerdings sollte es für $username bzw $email verwendet werden.