dedlfix: MySQL Loginsystem

Beitrag lesen

Hi!

  1. Die Identifiers brauchen nicht durch mysqli::real_escape_string() maskiert zu werden, weil es laut "Kontextwechsel erkennen und behandeln" nur die "Regel des doppelten Backticks" gibt.

Richtig. Und so sagt es auch das MySQL-Handbuch. Nur der Backtick hat bei Identifiers eine Sonderbedeutung, alle anderen Zeichen werden wörtlich genommen. Ein " im gebacktickten Identifier, durch mysqli_real_escape_string() zu " gemacht, wären aus Sicht von MySQL \ und ". Nur bei String-Werten wird " als " interpretiert.

  1. Die Funktion scheint in meinem Anwendungsfall, der da lautet:
    $this->mysqli->query('SELECT '.$settings['user_id_column'].' FROM '.$settings['user_table'].' WHERE '.$settings['user_name_column']."='".$this->mysqli->real_escape_string($_POST[$settings['post_name']])."' AND ".$settings['user_password_column']."='".$this->mysqli->real_escape_string($_POST[$settings['post_pw']])."'");
    richtig angewendet zu sein, richtig?

Unter der Voraussetzung, dass $settings allein durch den Programmierer, Administrator oder ähnlich vertrauenswürdige Personen geschrieben werden kann, wäre das so in Ordnung. Verbessern kann man die Lesbarkeit durch den Einsatz von sprintf(), damit muss man den Statement-String nicht ständig wegen der Variablen unterbrechen. Außerdem spricht auch nichts dagegen, sich für die Identifier eine Funktion zu schreiben, die mindestens das Maskieren und optional auch das Quotieren übernimmt.

  1. Und das mit der Konfiguration ist also Geschmackssache (meine momentane Art ist ja jetzt einsehbar). Da mache ich mir vielleicht auch noch einmal Gedanken darüber.

Ja. Konfigurationsdaten als PHP-Quellcode zu schreiben ist vorwiegend was für Programmierer. ini-Files sind eine Möglichkeit, bei der man nicht so sehr darauf achten muss, dass beim Ändern die PHP-Syntax eingehalten werden muss. Die Syntax von ini-Dateien ist da ja noch mal ein ganzes Stück einfacher.

Lo!