Ergebnis 1 bis 9 von 9

Thema: mysql_real_escape_string in Contao

  1. #1
    Contao-Nutzer
    Registriert seit
    27.08.2013.
    Beiträge
    38

    Standard mysql_real_escape_string in Contao

    Moin alle zusammen,

    Hat einer von euch eine Ahnung wie man mysql_real_escape_string in Contao benutzt ?

    Ich würde gerne eine Variable escapen, komme aber nicht an die Datenbank-Connection ran, da diese in der Klasse \Contao\Database gekapselt ist.

    In der Klasse \Contao\Mysql\Statement gibt es sogar eine Methode string_escape die genau das tut was ich will, leider ist sie aber protected ....

    Aktuell behelfe ich mir damit, extra vor dem mysql_real_escape_string, über mysql_connect eine neue Verbindung zu öffnen ....

    Aber das ist natürlich auch keine besonders saubere Lösung .

    Vielleicht wisst ihr ja was besseres .....

    Danke schonmal für Eure Hilfe,

    Jan

  2. #2
    Contao-Nutzer
    Registriert seit
    03.09.2009.
    Ort
    Baunatal
    Beiträge
    122
    Partner-ID
    6087

  3. #3
    Contao-Nutzer
    Registriert seit
    27.08.2013.
    Beiträge
    38

    Standard

    Danke für die schnelle Antwort :-).

    Hilft mir leider nicht, aber das liegt daran, das ich meine Frage nicht vernünftig spezifiziert habe.

    Ich nutze das mysql_real_escape_string für einen Insert-Tag in der MetaModels-Erweiterung.
    Dort kann man SQL spezifizieren das Insert-Tags annimmt.

    Deswegen kann ich prepare und execute nicht verwenden ....

    Ich will die resultierende Abfrage nämlich nicht ausführen sondern nur sicherstellen, das in die Abfrage, die später von MetaModels ausgeführt wird, über einen get-Parameter (Meinen Insert-Tag) kein SQL injected werden kann.

    Ansonsten wäre das natürlich der richtige Weg.

  4. #4
    Contao-Nutzer
    Registriert seit
    27.08.2013.
    Beiträge
    38

    Standard Die Lösung: Datenbank-Klasse austauschen/erweitern

    Ok habe für mich persönlich nun folgende Lösung gefunden.

    Ich habe eine neue Erweiterung geschrieben in der ich Contao zwei neue Datenbanktreiber hinzufüge.

    Die zugehörigen Klassen erben von den beiden aktuellen Treibern und stellen eine Methode string_escape zur Verfügung die dann an die Datenbank-Verbindung kommt und den Escape durchführt.

    Damit das Ganze funktioniert muss in der localconfig.php als Treiber:

    Code:
    $GLOBALS['TL_CONFIG']['dbDriver'] = 'ExtendedMysql';
    bzw.:

    Code:
    $GLOBALS['TL_CONFIG']['dbDriver'] = 'ExtendedMysqli';
    angegeben werden.

    Danach besitzt das Datenbank-Objekt die Methode string_escape die dann ein neues Erzeugen der Verbindung vermeidet.

    So ist das schon mal ein bisschen sauberer ...

    Für bessere Lösungen wäre ich aber überaus dankbar .

    P.S. Den SourceCode des Moduls findet Ihr im Anhang.
    Angehängte Dateien Angehängte Dateien
    Geändert von barteljan (07.04.2014 um 14:15 Uhr)

  5. #5
    Maintainer Avatar von xtra
    Registriert seit
    02.07.2009.
    Ort
    Tuebingen
    Beiträge
    2.007
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von barteljan Beitrag anzeigen
    Danke für die schnelle Antwort :-).

    Hilft mir leider nicht, aber das liegt daran, das ich meine Frage nicht vernünftig spezifiziert habe.

    Ich nutze das mysql_real_escape_string für einen Insert-Tag in der MetaModels-Erweiterung.
    Dort kann man SQL spezifizieren das Insert-Tags annimmt.

    Deswegen kann ich prepare und execute nicht verwenden ....

    Ich will die resultierende Abfrage nämlich nicht ausführen sondern nur sicherstellen, das in die Abfrage, die später von MetaModels ausgeführt wird, über einen get-Parameter (Meinen Insert-Tag) kein SQL injected werden kann.

    Ansonsten wäre das natürlich der richtige Weg.
    Kannst du dazu bitte eben mal einen Beispielcode posten WAS du machen willst?

    Ich kann mir aktuell keine Stelle im MM Code vorstellen, wo du ein deratiges Problem haben koenntest.
    Bedenke stets: Wenn Du ungenaue oder unzureichende Angaben machst, so koennte dies die Bearbeitung deiner Frage endlos verzoegern (oder sogar dazu fyhren, dass ich zu viel nachdenken muss und die Antwort vergesse!). Kein Support per PN.

  6. #6
    Contao-Nutzer
    Registriert seit
    27.08.2013.
    Beiträge
    38

    Standard

    Ich habe zwei Metamodels die ich im Frontend verlinken möchte.

    Projekte und Tasks

    Die Tasks sind den Projekten im Backend untergeordnet und werden über die pid verknüpft.

    Ich zeige eine Liste aller Projekte an und verweise über einen Projekt-Filter (der den Alias des Projekts als auto_item übergibt) auf eine andere Seite.

    Auf dieser Seite gebe ich eine Liste aller Tasks des ausgewählten Projektes mit folgendem "SQL-Filter" aus:

    SELECT id FROM {{table}} WHERE pid=(SELECT id FROM mm_jba_project WHERE alias="{{get::auto_item::mysql_real_escape_string} }");

    Zu sehen unter: http://issues.janbartel.de per PN gibts auch Zugangsdaten

  7. #7
    Maintainer Avatar von xtra
    Registriert seit
    02.07.2009.
    Ort
    Tuebingen
    Beiträge
    2.007
    User beschenken
    Wunschliste

    Standard

    Was sprichte gegen MetaModels Bordmittel, welche das escaping usw. direkt abnehmen?
    Code:
    SELECT id FROM {{table}} WHERE pid=(SELECT id FROM mm_jba_project WHERE alias="{{param::get?name=auto_item}}");
    Das alles und noch mehr ist btw. in der Doku des SQL Filter erlaeutert (das kleine Schildchen neben der Headline des Text-Eingabebereichs wo du deinen SQL code reinpappst).

    Gruss
    Chris
    Bedenke stets: Wenn Du ungenaue oder unzureichende Angaben machst, so koennte dies die Bearbeitung deiner Frage endlos verzoegern (oder sogar dazu fyhren, dass ich zu viel nachdenken muss und die Antwort vergesse!). Kein Support per PN.

  8. #8
    Contao-Nutzer
    Registriert seit
    27.08.2013.
    Beiträge
    38

    Standard

    In erster Linie wohl das fehlende Wissen das MetaModels sowas kann .

    Vielen Dank .

    P.S. Das kleine Icon hab ich wohl übersehen :-P.
    Geändert von barteljan (08.04.2014 um 06:46 Uhr)

  9. #9
    Maintainer Avatar von xtra
    Registriert seit
    02.07.2009.
    Ort
    Tuebingen
    Beiträge
    2.007
    User beschenken
    Wunschliste

    Standard

    Macht ja nichts, kann man durchaus ybersehen. Doch in solchen Teilen stecken oft wertvolle Infos.

    Hauptsache es klappt nun.

    Gruss
    Chris
    Bedenke stets: Wenn Du ungenaue oder unzureichende Angaben machst, so koennte dies die Bearbeitung deiner Frage endlos verzoegern (oder sogar dazu fyhren, dass ich zu viel nachdenken muss und die Antwort vergesse!). Kein Support per PN.

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •