Ankündigung

Einklappen
Keine Ankündigung bisher.

User helfen User - Programmieren

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

    Benutze mal mysql_num_rows(). Oder hast du die Funktion eventuell nur falsch abgeschrieben?

    Welche PHP Version läuft bei dir und, ganz wichtig, schreibe bitte dazu wie du den Wert in $numbrows vergleichst. Da kann man bei PHP leider recht viel falsch machen..

    Wenn du es später mal zum Laufen gebrachst hast, solltest du auch noch etwas auf die Sicherheit deines Querys achten (zumindest ein mysqli_real_escape_string() um die Nutzereingaben ist ein Muss).

    Kommentar


      1) das num_rows ändert nichts, vorher hatte ich das auch mit _ drin, habe dann gelesen, dass man das alias numrows verwenden kann für abwärtskompabilität (auch wenns mir sinnfrei erschien.. aber testen halt)

      2) PHP 5.4.12

      3) if ( $numbrows = 1 )
      {
      // login erfolgreich
      }
      else
      {
      // fail
      }

      4) das mit dem real escape string hab ich auch drin, habs nur erstmal rausgenommen um die fehlerquellen zu reduzieren.


      EDIT: Nachdem ich nun sogar richtige/falsche passwörter in den code eingegeben hab und es trotzdem immer true bleibt, scheints wohl wirklich am php vergleich zu liegen, mhm

      Kommentar


        hau mal in php das hier rein:

        mysqli_set_charset($mysqli, 'utf8');
        hatte auch schon probleme, als die Zeile fehlte.

        €: achso ich habe die Verbindung mittels

        $mysqli = new mysqli(DB_SERVER,DB_USER,DB_PW,DB_NAME);
        aufgebaut. vllt musst du das entsprechend anpassen.

        Kommentar


          if ( $numbrows = 1 )

          ändern zu

          if ( $numbrows == 1 )

          Kommentar


            ein = ist zuweisung, zwei = sind vergleiche

            Kommentar


              gott wie doof. danke! :)

              Kommentar


                $abfrage = "SELECT username, passwort FROM login WHERE username = '$username' AND passwort = SHA2(CONCAT('$passwort','$username'),512)";
                $ergebnis = mysql_query($abfrage);
                $numbrows = mysql_numrows($ergebnis);
                Versuch mal nicht die mysql_*-Erweiterung zu nutzen und stattdessen die Extension mysqli oder PDO.

                Kommentar


                  Ich bins nochmal. Hab das nun alles hinbekommen und funktioniert super. Das speziell hab ich eingebaut:

                  1) mysqli
                  2) real_escape_string bei den eingaben
                  3) passwörter werden mit SHA2 mit Keylänge 512 abgespeichert
                  4) extra user, der nur auf diese login datenbank zugriff hat

                  Erste Frage: Zu 4): Spielt das überhaupt ne Rolle? Denn an das Passwort der SQL Verbindung kommt ja keiner ran, da das ja Serverseitig abgerufen wird. Und wenn die Datenbank auch nur für lokale Verbindungen zugelassen wird, dann kann ja niemand irgendwas an der DB machen bzw rankommen oder?

                  Zweite Frage: Fehlt noch irgendwas für die Sicherheit?

                  Kommentar


                    vorlauf nicht gelesen, aber ich denke mal das wird hinkommen:

                    defensive programmierung
                    sollte es, wie auch immer, ne schwachstelle bei der entgegennahme der eingaben/parameter für das sql-statement geben sodass eine injection möglich ist, wär's halt besser, wenn ein angreifer "nur" unfug mit der login-db treiben kann


                    /e: noch so zur sicherheit:
                    - seiten mit passworteingaben nur über tls
                    - im idealfall bei den formfields kein autocomplete
                    - bei fehlgeschlagenem login kein "pw falsch", "user nicht vorhanden" oder ähnlich explizites sondern nur "logindaten falsch"/"pw oder username falsch"/o.Ä.
                    - auch ausgaben, die inhalte von dbs oder sonstigen "quellen von fremdinhalten" (usernames z.b.) enthalten, bei der sicherheit beachten, sonst nenn ich mich halt hans1987document.cookie[etc] und wenn andere meinen username sehen wie ihn die seite ausgibt ...

                    Kommentar


                      Einfach ordentlichen ORM benutzen und man muss sich über vieles keine Gedanken mehr machen. Gilt für alle Sprachen.

                      Kommentar


                        Zitat von stFUH
                        Einfach ordentlichen ORM benutzen und man muss sich über vieles keine Gedanken mehr machen. Gilt für alle Sprachen.
                        Welche empfiehlst du da für PHP? Bzw Java?

                        Zitat von IllDepence
                        defensive programmierung
                        Macht absolut Sinn!

                        Zitat von IllDepence
                        /e: noch so zur sicherheit:
                        - seiten mit passworteingaben nur über tls
                        Ich will ja keinen Online-Shop oder ne Bankseite eröffnen. Ist TLS da nicht etwas übertrieben? Andererseits seh ich keine Möglichkeit, wie man sonst verhindern könnte, dass jemand Username+Pw nach dem Aktivieren vom Login-Button in der Mitte abfängt.

                        Den Rest hab ich mir zu Herzen genommen. Danke! :)

                        Kommentar


                          Zitat von moonylo
                          Zitat von stFUH
                          Einfach ordentlichen ORM benutzen und man muss sich über vieles keine Gedanken mehr machen. Gilt für alle Sprachen.
                          Welche empfiehlst du da für PHP? Bzw Java?
                          Wenn du Anwendungen im PHP programmierst würde ich Frameworks wie Zend oder Cake nutzen.
                          Es gibt aber auch spezielle ORM Frameworks für PHP wie zb doctrine, falls dir zend oder cake zuviel ist bzw du kein komplett framework brauchst

                          Für Java Hibernate

                          Kommentar


                            welche C library muss ich includen, um die less() funktion nutzen zu können?

                            hab #include ausprobiert (laut google), die existiert aber gar nicht -.-

                            Kommentar


                              ich hab mal paar fragen zu dem programm hier:

                              http://pastebin.com/tDLi3czQ

                              bis zeile 32 is alles klar, aber ab 33 fängts an bisschen komisch zu werden. ich erschaffe ein objekt zeiger auf das ein pointer zeigt, aber noch wird ja nichts erschaffen, weil ich ja bisher nur auf die adresse vom objekt zeiger zeige, oder? erst in zeile 38 weil ich da mit new box den speicher für das objekt reserviere.

                              in zeile 44 geb ich die fläche der neuen box hiermit aus:
                              zeiger->holeflaeche()

                              warum kann ich da nicht zeiger.holeflaeche() schreiben? mit klein.holeflaeche() ruf ich ja die methode holeflaeche auf, die mit den werten von klein.setze(5,7) arbeitet, warum hier nicht? liegt das am pointer?

                              Kommentar


                                zeiger.holeflaeche kannst du nicht schreiben, entweder zeiger->holeflaeche oder (*zeiger).holeflaeche

                                Kommentar

                                Lädt...
                                X