Immer htmlspecialchars() ?

  • Ja dann muß ich wohl selber mein Chat bauen,bringt ja alles nix.

    Nur diesmal will ich es gleich richtig machen.

    Ich bin schon beim ersten Formular und habe schon fragen ,traurig nee:D


    Man sollte ja immer htmlspecialchars( ) benutzen für die Datenbanken.

    muss man das bei den dei den benutzen

    Code
    1. filter_var($email, FILTER_VALIDATE_EMAIL);
    2. $passwort_hash = password_hash($passwort, PASSWORD_DEFAULT);

    Bei email kommt doch so wieso nur was richtig geschriebenes durch und bei Passwort bin ich mir jetzt nicht sicher oder wie weit könnte man da jetzt Javascript und co einspeisen?

    Aber ihr wisst das doch bestimmt besser.

  • Hey,


    die Funktion htmlspecialchars sollte man bei der Ausgabe der Daten verwenden. Damit werden Sonerzeichen in normlare HTML-Codes umgewandelt und somit besteht keine Chance einer XSS-Attacke. Wenn es darum geht, Formulardaten direkt wenn sie reinkommen zu überprüfen, dann verwende die Funktionen filter_var oder filter_input. Führe auch auf alle Inputs bis auf das Passwort die Function trim() aus. Denn der User kann bewusst ein Leerzeichen am Anfang in seinem Passwort verwenden.


    Code
    1. filter_var($email, FILTER_VALIDATE_EMAIL);

    Was willst du damit anfangen? Wenn du es so stehen lässt, dann hat es keinen Sinn. Entweder musst du dies einer Variable zuordnen welche dann den Returnwert erhält oder in einer If-Abfrage abfragen.


    Schau dir dies an: Vorgehen Registration|Login|Index.php. Dies wird dir soweit alles beantworten.


    Grüße,

    Stef

  • Code
    1. filter_var($email, FILTER_VALIDATE_EMAIL);

    Was willst du damit anfangen? Wenn du es so stehen lässt, dann hat es keinen Sinn. Entweder musst du dies einer Variable zuordnen welche dann den Returnwert erhält oder in einer If-Abfrage abfragen.

    Ja das habe ich ja ,wollte jetzt nur den Teil hier rein Kopieren der für die frage wichtig ist.


    Du sagst man sollte das htmlspecialchars bei der Ausgabe verwenden.

    Sollte man das nicht vorm Speichern in der Datenbank auch verwenden,damit der Mist erst gar nicht gespeichert wird ?


    Seid wann schreib die Datenbank den so ein Fehler

    Code
    1. MySQL-Error: Duplicate entry '0' for key 'email'

    Ich habe der Datenbank nie gesagt das die nach duplicate sucht. Macht die bei irgendeine Angabe das von alleine ? Weil wenn einer keine email angeben möchte habe ich da eine 0 sehen. Und die Angabe macht er ja nur einmal wie man sieht. Könnte das jetzt timestamp rausmachen aber ist ja auch nicht sinn der sache.

    Welche Angaben wären den da Richtig vom Programiertechnischen?

  • Wenn die Spalte email ein Key, ganz gleich ob primary oder foreign o.ä. ist, darf es keine Duplicate haben.

    Der Meldung nach wird Dein Feld ein Key irgendeiner Art sein.

  • Dann muß ich mal kucken.

    Bei mir geht heute auch wieder nix.

    Selbst die passwort Abfrage klappt nicht. Mit pdo und statmands finde ich reichlich sachen die auch gehen. Aber da ich alles gleichmässig haben will und nicht pdo und mysqli durcheinander haben will,möchte ich den login auch auf mysqli haben.

    Will aber nicht klappen. Habe mehrere versuche gehabt die ich nicht alle posten kannn

    Nehmen wir den letzten der auch nicht geht.

    Fehler meldungen habe ich keine.

    Nur vom Script und das sagt immer passwort falsch

    _____________


    Moderation:

    [Code entfernt, aufgrund SQL-Injection Lücke]

    Bitte beachte Regel Nr 5.


    Desweiteren haben wir dir schon sehr oft hilfreiche Ratschläge gegeben, damit keine SQL-Injections erfolgen können.

    Dieser Beitrag wurde bereits 1 Mal editiert, zuletzt von basti1012 ()

  • Also, wenn du das Error-Reporting hochdrehen würdest und die Ausgabe von Fehlern aktivieren würdest, müsstest du eine Meldung von PHP bekommen.

    Aber "Richtig debuggen" kann man anscheinend tausend Mal predigen, es wird immer wieder ignoriert. :(

  • Hi,


    basti1012 :


    Siehe Beitrag 5.


    Mir scheint es so als willst du mit diesem Code den Login erstellen? Wenn ja ist das 100% falsch.


    Ich habe dir in meinem ersten Beitrag eine Verlinkung gepostet, damit du die Struktur sowie die benötigten Funktionen kennst, welche du aufjedenfall brauchst. Dort sind natürlich nicht alle aufgelistet aber ein Großteil .


    Langsam kommt es mir so vor als kennst du nur deins und nimmst nichts von anderen an, die in dieser Materie doch fortgeschrittener sind als du.


    Stef

  • basti1012

    Extra noch einmal für dich:


    Richtig debuggen


    1. Man bemerkt, dass ein Skript nicht das tut, was es soll.
    2. Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(-1);
    3. Man verwendet ini_set('display_errors', true); damit die Fehler auch angezeigt werden.
    4. Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
    5. An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde. Wichtig bei MySQL Fehlern (...not a valid MySQL result resource...): mysqli_error() verwenden oder Abfrage ausgeben und zb mit phpmyadmin testen.
    6. Schritt 5 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
    7. Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
    8. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
    9. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.
  • Ich weiß wie man debuggt wie oft willst du das noch schreiben ? Wenn das helfen würde würde ich auch nicht fragen.

    Ich weiß wo der Fehler ist nur weiß ich nicht warum der so ist .

    Das passwort was in der db steht ist nicht gleich was ich abfrage. obwohl bei einen "a" als passwot wohl kein schreibfehler drinne sein kann.


    Bekomme 2 verschiedene hash werte die natürlich immer false sind

  • Ich weiß wie man debuggt

    Anscheinend nicht, denn sonst hätten die Hochkomma nicht gefehlt.


    Zitat

    wie oft willst du das noch schreiben

    Bis man erkennt, dass du das auch richtig anwendest!


    Und noch ein Hinweis, md5 ist schon lange nicht mehr the state of the art

  • Die Hochkommas hat er mir trotzdem nicht als Fehler angezeigt.

    Dann hast du wohl eine einzigartige PHP-Version, denn bei voll aufgedrehtem Error-Reporting gibt es eine Meldung von PHP, und zwar diese:


    Warning: Use of undefined constant passwort - assumed 'passwort' (this will throw an Error in a future version of PHP)

  • Wenn die Spalte email ein Key, ganz gleich ob primary oder foreign o.ä. ist, darf es keine Duplicate haben.

    Der Meldung nach wird Dein Feld ein Key irgendeiner Art sein.

    Stimmt,habs gefunden. Den primary Key kann man doch auf alles anwenden,egal ob id,email oder Karfoffeln richtig ? Weil beim Gast login wäre es ganz gut das es nicht 2 mal den gleichen Gast Namen geben darf

  • Ja sicher kann man das auf jede Spalte anwenden. Sinnvoller wäre der PRIMARY KEY allerdings auf einer INTeger-Spalte angewendet.

    Datenbanken können mit Zahlenwerten schneller arbeiten, wie mit Texten. Deshalb wird auch gerne empfohlen, bei jeder Tabelle eine ID-Spalte mitzuführen, die als PRIMARY KEY und AUTO_INCREMENT definiert ist. Die Spalte für die E-Mail kannst Du immer noch UNIQUE setzen, dann werden da auch keine doppelten Werte geschrieben.