Meine ersten PHP-Versuche

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Meine ersten PHP-Versuche

    Hallo, eventuell könnte sich meiner irgendwer erbarmen und mir tips für die zukunft geben,.
    Mein momentanes script umfasst nur die newsverwaltung.

    Es ist möglich news zu schreiben und dazugehörige kommentare.
    Administriert wird das ganze über einen einfachen adminbackend.

    BBCode habe ich auch integriert (wenn auch nur mit 3 schlechten smileys.. )

    Bitte schaut es euch einfach einmal an, struktur bzw. codeaufbau und codeverwendung.

    Was mir noch aufgefallen ist wäre es sinnvoll, wenn man eine news löscht die dazugehörigen kommentare genau so aus der datenbank löscht....naja das kann man ja alles noch ändern ;-)


    Also hier:
    http://www.file-upload.net/download-...nscms.zip.html


    für den admin bereich (im footer ist der link):

    user: christian

    pw: christian

  • #2
    Ich habe den Code stellenweise nur überflogen... hier mal ein paar Ratschläge:

    Meiner Meinung nach ist es sauberer, bspw. IDs, die übergeben werden, nach integer zu casten.
    PHP-Code:
    // bspw.
    $id = (int)$_GET['id']; 
    Beschäftige dich mal mit dem Thema SQL-Injection und schaue dir im Manual mal die Funktionsbeschreiung zu mysql_real_escape_string() an.

    Generell sollte man SELECT * vermeiden, besonders wenn man es aus Gemütlichkeit macht und nicht alle Spalten benötigt werden, da man so Performance einbüßt. Mehr dazu hier.

    EDIT:
    Deine Funktion checklogin() hat nur den Rückgabewert true, wenn das übergebene Passwort mit dem aus der Datenbank übereinstimmt. Ist das nicht der Fall, wird gar nichts zurück gegeben. Das solltest du ändern.
    Zuletzt geändert von Griecherus; 13.02.2007, 13:50.
    Nieder mit der Camel Case-Konvention

    Kommentar


    • #3
      Die Verwendung von mysql_real_escape_string() bei jeder Variablen beugt SQL Injection Angriffen vor. Das Beispiel demonstriert ein optimales Verfahren für Datenbankanfragen, das unabhängig vom für Magic Quotes gesetzten Wert funktioniert.

      Oder habe ich da was falsch verstanden ?
      die funktion setz vor jeden ' und " ein \ um es zu escapen ?

      Kommentar


      • #4
        Richtig, mysql_real_escape_string() sorgt dafür, dass gefährliche Zeichen maskiert werden. Ein kurzes Beispiel:
        PHP-Code:
        $q "SELECT *
            FROM users
            WHERE username = '
        $username'
                AND password = '
        $password'";
        $r mysql_query($q); 
        Nach Eingabe von ' OR 1=1 würde der Query-String so aussehen:
        Code:
        SELECT *
        FROM users
        WHERE username = 'batman'
            AND password = '' OR 1=1;
        Das ist natürlich nur ein Beispiel.
        Nieder mit der Camel Case-Konvention

        Kommentar


        • #5
          das wiederrum heist doch dass statt
          PHP-Code:
          $q "SELECT *
              FROM users
              WHERE username = '
          $username'
                  AND password = '
          $password'";
          $r mysql_query($q); 

          PHP-Code:
          $q "SELECT *
              FROM users
              WHERE username = 'mysql_real_escape_string(
          $username)'
                  AND password = 'mysql_real_escape_string(
          $password)'";
          $r mysql_query($q); 

          Kommentar


          • #6
            wenn dann:

            PHP-Code:
            "SELECT *
                FROM users
                WHERE username = '"
            .mysql_real_escape_string($username)."'
                    AND password = '"
            .mysql_real_escape_string($password)."'" 
            Für Rechtschreibfehler übernehme ich keine Haftung!

            Kommentar


            • #7
              mein ich ja LoL
              hab ich doch so ?

              Kommentar


              • #8
                Nach Eingabe von ' OR 1=1 würde der Query-String so aussehen:
                Code:
                SELECT *
                FROM users
                WHERE username = 'batman'
                    AND password = '' OR 1=1;
                Das ist natürlich nur ein Beispiel. [/B]
                da $password vorher meist in md5 gehasht wird, funktioniert dies nur sehr selten!

                oder lieg ich da falsch?

                Kommentar


                • #9
                  Original geschrieben von schlattm
                  da $password vorher meist in md5 gehasht wird, funktioniert dies nur sehr selten!
                  Du möchtest dir überlegen, in welchen Fällen eine Bedingung
                  Code:
                  password = '' OR 1=1
                  wahr ergibt.
                  I don't believe in rebirth. Actually, I never did in my whole lives.

                  Kommentar


                  • #10
                    Original geschrieben von christian000
                    mein ich ja LoL
                    hab ich doch so ?
                    na, das sind 2 unterschiedliche Dinge
                    Für Rechtschreibfehler übernehme ich keine Haftung!

                    Kommentar


                    • #11
                      ich mein in meinem script habe ich es so ?

                      Kommentar


                      • #12
                        @schlattm: Es geht mir nicht darum, ein funktionierendes SQL-Injection Beispiel zu geben, sondern klar zu machen, was eine SQL-Injection ist und wie eine solche zustande kommen kann.
                        Nieder mit der Camel Case-Konvention

                        Kommentar

                        Lädt...
                        X