Hallo,
ich bin dabei die PDO-Klasse für eigene Bedürfnisse zu erweitern. Als DB nutze ich MySQL und SQLite.
Die Zielplattformen reichen runter bis zu Minisystemen in der Grössenordnung eines Raspberry Pi und kleiner.
Soviel zum Hintergrund.
Feld- und Tabellennamen können ja nicht per Prepared Statements verarbeitet werden.
PDO::quote ist für das Maskieren an der Stelle auch ungeeignet.
Die Erweiterungsklasse stellt deshalb eine Methode für das Maskieren von Feld- und Tabellennamen bereit.
Für MySQL werden diese Namen in Backticks gepackt.
Beispiele:
Die Tabellen- und Feldnamen werden zuvor noch per RegEx auf unzulässige Zeichen für
MySQL Feld- und Tabellennamen überprüft:
Meine Fragen/Probleme/Unsicherheiten:
- Liege ich richtig mit der Annahme, das durch das Einpacken in Backticks auch reservierte Bezeichner keine Probleme mehr machen und gleichzeitig ein Schutz gegen SQL Injection gewährleistet wird ?
- MySQL lässt bis auf eine Handvoll Ausnahmen ja fast alles als Zeichen in Bezeichnern zu. Der obige RegEx verhindert zusätzlich ein Space im Namen.
Ist es sinnvoll, die Zeichen weiter einzuschränken bzw. welche Zeichen könnten Probleme bereiten ?
LG jspit
ich bin dabei die PDO-Klasse für eigene Bedürfnisse zu erweitern. Als DB nutze ich MySQL und SQLite.
Die Zielplattformen reichen runter bis zu Minisystemen in der Grössenordnung eines Raspberry Pi und kleiner.
Soviel zum Hintergrund.
Feld- und Tabellennamen können ja nicht per Prepared Statements verarbeitet werden.
PDO::quote ist für das Maskieren an der Stelle auch ungeeignet.
Die Erweiterungsklasse stellt deshalb eine Methode für das Maskieren von Feld- und Tabellennamen bereit.
Für MySQL werden diese Namen in Backticks gepackt.
Beispiele:
PHP-Code:
feldname -> `feldname`
tabname.feld -> `tabname`.`feld`
back`tick -> `back``tick`
MySQL Feld- und Tabellennamen überprüft:
PHP-Code:
$SQL_Ident_RegEX = '~^([^/.\\\ ]{1,64}|[^/.\\\ ]{1,64}[.][^/.\\\ ]{1,64})$~';
- Liege ich richtig mit der Annahme, das durch das Einpacken in Backticks auch reservierte Bezeichner keine Probleme mehr machen und gleichzeitig ein Schutz gegen SQL Injection gewährleistet wird ?
- MySQL lässt bis auf eine Handvoll Ausnahmen ja fast alles als Zeichen in Bezeichnern zu. Der obige RegEx verhindert zusätzlich ein Space im Namen.
Ist es sinnvoll, die Zeichen weiter einzuschränken bzw. welche Zeichen könnten Probleme bereiten ?
LG jspit
Kommentar