set Methode in Contao\Database\Statement escaped Keys nicht #6909
Comments
Was willst Du denn bei den Keys groß escapen? Das sollten ja immer Feldnamen in der Datenbank sein und da gibt es keine Sonderzeichen. |
Jo, Feldnamen duerfen halt auf keinen Fall ungeprueft vom Frontend kommen. Z.b. aus einem Formular indem die Namen der Inputs den Spaltennamen entsprechen. Was ja an fuer sich logisch ist. Dennoch dachte ich z.B. (bevor ich mir die Implementierung angeschaut hab) dass mich die set Methode nochmal zusaetzlich schuetzt da sie ja Bestandteil eines prepared Statements ist. |
Gibt es einen konkreten Fall, anhand dessen ich das nachvollziehen könnte? |
Was ist mit ->set() ? Da werden ja alle Keys einfach übernommen? |
Ich kann dir keine Stelle nennen wo die Spaltennamen nicht vorab nochmal ueberprueft werden. Allerdings hab ich jetzt auch nicht den kompletten Contao Code einem Audit unterzogen, daher kann ichs auch ned ausschliessen dass es nicht doch irgendwo ne Stelle gibt wo der Key vom User kommt. Und die eine oder andere Extension schwirrt da draussen sicherlich rum die nen ->set($_POST) macht. Spricht denn generell was dagegen die Keys jeweils nochmal mit einem |
Ja, die Tatsache, dass wir nirgends Tabellen- oder Feldnamen escapen, weil das MySQL-spezifisch ist und sonst den DBAL zerschießt. |
Ehm, das escapen muss auch der Treiber selbst machen. Jedoch variiert es wie folgt: Nun wird es aber interessant:
Somit ist MySQL der EINZIGE (grosse) der den SQL92 Standard in dieser Hinsicht NICHT per default supported sondern nur mit flag. Man kann also durchaus eine Treibermethode Edith Quellennachweis: |
+1 fuer die abstrakte methode escapeIdentifier() die in den jeweiligen DB Subklassen dann entsprechend implementiert wird. |
@contao/developers Was ist also hier zu tun? |
Ich denke das :) Wobei ich jetzt so frech wäre und Simon für einen PR fragen würde :D |
Wie am 19. Juni auf Mumble besprochen, wollen wir das nicht unterstützen. Weitere Informationen dazu findest Du z. B. hier: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/basic-mapping.html#quoting-reserved-words |
Mir ist aufgefallen, dass in der set Methode der Contao\Database\Statement Klasse zwar die Values des reingereichten Arrays escaped werden, nicht aber Keys.
Siehe: https://github.com/contao/core/blob/master/system/modules/core/library/Contao/Database/Statement.php#L187
Ist das Escapen der Keys prinzipiell dem Entwickler ueberlassen oder sollte hier im Core auch noch eine Pruefung stattfinden?
The text was updated successfully, but these errors were encountered: