Fälschliches Abfangen von POST wegen "lang"-Parameter im Security Log

Fragen zur Installation von CONTENIDO 4.9? Probleme bei der Konfiguration? Hinweise oder Fragen zur Entwicklung des Systemes oder zur Sicherheit?
Antworten
resp
Beiträge: 9
Registriert: Fr 19. Aug 2016, 11:50
Kontaktdaten:

Fälschliches Abfangen von POST wegen "lang"-Parameter im Security Log

Beitrag von resp » Mo 8. Mai 2017, 07:55

Hallo zusammen,

Für ein Projekt benutze ich den Payment-Provider "Heidelpay" um Zahlungen durchführen zu können - Ich verwende hierfür die "phpAPI" von Heidelpay (https://dev.heidelpay.de/heidelpay-php-api/).

Nach Generierung der erforderlichen Daten für Heidelpay (und die Annahme seitens Heidelpay) wird ein POST an eine gewünschte URL zurückgegeben.

Hierfür habe ich ein Modul erstellt, dass die Response-Logik von Heidelpay verarbeitet und DB-Einträge vornimmt etc.

Das klappt auch alles wunderbar bei Kreditkarten-Zahlungen, bei allen anderen jedoch nicht und ich war am Grübeln wieso bei Kreditkarten der POST von Heidelpay OK ist, bei allen anderen war der POST leer aber Heidelpay hat die Zahlung akzpetiert.

Dann habe ich aus Zufall in das Contenido Security Log geschaut und dort meine verschwundenen Posts gefunden:

Code: Alles auswählen

2017-05-08 08:34:18    XXX.XXXX.XXX.XX  
    Query String: idart=XXXX
    Bad parameter: lang
    POST array: Array
(
    [NAME_FAMILY] => Max Mustermann
    [CRITERION_SDK_NAME] => Heidelpay\PhpApi
    ....
   [LANG] => DE
   ....
)
Bei Kreditkarten-Zahlungen taucht der Paramater "LANG" nicht im POST auf. Daher wird dieser scheinbar durchgelassen.

Es scheint also, als ob der POST von Heidelpay, der ein "lang" enthält das Security Log triggert und mir den POST killt. Auch bei einem Test, die Rückgabe-URL mit "lang" anzugeben also "meineimaginärseite.com/front_content.php?idart=100&lang=1" führte zum selben Ergebnis.

Sollte das der Fall sein, ist es möglich, dass Contenido bestimmte Parameter nicht überprüft? Ich habe leider keinen Einfluss auf die Rückgabe von Heidelpay um das "lang" zu unterdrücken.

UPDATE:
Nach etwas weiterer Recherche habe ich folgendes gefunden: In der data/config/config.http_check.php habe ich sämtliche lang-Parameter entfernt, und das Log wird tatsächlich nicht mehr gefüllt und scheinbar geht das POST.

Jetzt passiert allerdings folgendes: Das Error-Log springt an und ich erhalte folgenden Error:

Code: Alles auswählen

[08-May-2017 09:12:41 Europe/Berlin] PHP Fatal error:  Uncaught cInvalidArgumentException: Object ID must be greater than 0. in /home/XXX/public_html/2016/contenido/classes/class.registry.php:572
Stack trace:
#0 /home/XXX/public_html/2016/contenido/classes/class.registry.php(166): cRegistry::_fetchItemObject('cApiLanguage', 'DE')
...
Scheinbar wird also der POST-Parameter "lang" von Heidelpay jetzt genutzt um die Sprache festzulegen, eine Sache die ich eigentlich nicht möchte. Ich pfusche nur ungern im Core herum um so etwas zu vehindern, bin also weiterhin für jede Hilfe dankbar um einen anderen Weg zu finden, dass das "lang" nicht weiter benutzt wird in diesem Fall..

Hat vielleicht jemand ein ähnliches Problem gehabt?

Danke, resp

rethus
Beiträge: 1851
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Re: Fälschliches Abfangen von POST wegen "lang"-Parameter im Security Log

Beitrag von rethus » Mo 8. Mai 2017, 09:02

Ich habe es gerade nicht auf dem Schirm ob und was Contenido mit dem Lang-Parameter macht.
Aber wenn du einen schnellen Workarround haben möchtest, könntest du z.B. eine eigen Wrapper-Datei in PHP schreiben, die folgende Funktion bietet:
  • Prüfen of Refferer der Heidelpay-Server ist sonst "exit();"
  • GGf. weitere Sicherheistprüfungen (z.B. in der DB beim Kaufprozess abgelegtes Token zu validierung)
  • Redirect an dein Contenido-Modul mit den Parametern, die du benötigst
Oder ein ggf. einfacher Weg:
In der .htaccess checken, ob ein Hidelpay-Parameter im Request ist, wenn ja, dann den "lang" Parameter rausfiltern, indem du die URL remodulierst.
Could I help you... you can help me... buy me a coffee . (vielen ❤ Dank an: Seelauer, Peanut, fauxxami )

xstable.com: - HighSpeed Hosting, Domains, DomainReselling, Linux-Administration
suther.de: - App-Programierung, High-Performance-Webpages, MicroServices, API-Anbindungen & Erstellung

Software... ein Blick wert: GoogleCalender Eventlist, xst_dynamic_contentType

resp
Beiträge: 9
Registriert: Fr 19. Aug 2016, 11:50
Kontaktdaten:

Re: Fälschliches Abfangen von POST wegen "lang"-Parameter im Security Log

Beitrag von resp » Mo 8. Mai 2017, 09:41

Das vorläufige Auslagern klingt nach einem Plan.

Die .htaccess-Lösung müsste ich mir bei Bedarf anschauen.

Danke schonmal dafür.

rethus
Beiträge: 1851
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Re: Fälschliches Abfangen von POST wegen "lang"-Parameter im Security Log

Beitrag von rethus » Mo 8. Mai 2017, 13:57

Bitte gern. Kannst uns auch gerne hier auf dem Laufenden halten.. bin gespannt, wie du es löst.

Viel Erfolg.
Could I help you... you can help me... buy me a coffee . (vielen ❤ Dank an: Seelauer, Peanut, fauxxami )

xstable.com: - HighSpeed Hosting, Domains, DomainReselling, Linux-Administration
suther.de: - App-Programierung, High-Performance-Webpages, MicroServices, API-Anbindungen & Erstellung

Software... ein Blick wert: GoogleCalender Eventlist, xst_dynamic_contentType

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: Fälschliches Abfangen von POST wegen "lang"-Parameter im Security Log

Beitrag von Faar » Mo 8. Mai 2017, 14:29

Ich verstehe hier noch nicht genau, was nun Contenido macht oder Heidelpay.
Aber Contenido benützt ja seit Jahr und Tag den Parameter lang zur Definition der Sprache.
Das AMR arbeitet auch fleißig damit und setzt changelang auf lang um:

Code: Alles auswählen

if (isset($aParams['changelang'])) {
            $aParams['lang'] = $aParams['changelang'];
 }
Und so geht es weiter:

Code: Alles auswählen

// set list of parameter which are to ignore while setting additional
// parameter
$aIgnoredParams = array(
    'idcat', 'idart', 'lang', 'client', 'idcatart', 'idartlang'
 );
Kann es sein, dass sich die Parameter von Contenido und ein externer Parameter überschneiden, weil sie den gleichen Namen haben?
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

homtata
Beiträge: 1142
Registriert: Mi 14. Jan 2004, 14:41
Kontaktdaten:

Re: Fälschliches Abfangen von POST wegen "lang"-Parameter im Security Log

Beitrag von homtata » Mo 8. Mai 2017, 21:22

Auch mein Verdacht. Vor allem, wenn die Post-Parameter gleich in Variablen umgewandelt werden per php-Einstellung, also $_POST[lang] sofort auch als $lang vorhanden ist.

resp
Beiträge: 9
Registriert: Fr 19. Aug 2016, 11:50
Kontaktdaten:

Re: Fälschliches Abfangen von POST wegen "lang"-Parameter im Security Log

Beitrag von resp » Di 9. Mai 2017, 08:22

homtata hat geschrieben:
Mo 8. Mai 2017, 21:22
Auch mein Verdacht. Vor allem, wenn die Post-Parameter gleich in Variablen umgewandelt werden per php-Einstellung, also $_POST[lang] sofort auch als $lang vorhanden ist.
Huh, das scheint es wirklich zu sein..

Ich habe es mittlerweile auf die Art von rethus gemacht, aber optimal ist diese Lösung natürlich nicht...

Ist natürlich ärgerlich wenn aussenstehende Ressourcen, wie in meinem Fall Heidelpay, zufällig einen Parameter benennen (lang) der auch in Contenido vorkommt und damit das halbe System zerschiesst.

Danke soweit für die Unterstützung!

Antworten