Class cRequestValidator / Google

Fragen zur Installation von CONTENIDO 4.10? Probleme bei der Konfiguration? Hinweise oder Fragen zur Entwicklung des Systemes oder zur Sicherheit?
Antworten
Leo
Beiträge: 308
Registriert: Mi 19. Apr 2006, 19:26
Kontaktdaten:

Class cRequestValidator / Google

Beitrag von Leo » Do 19. Mai 2022, 11:51

Hallo zusammen,

es geht um diese Klasse cRequestValidator. Wenn Contenido die Parameter prüft und diese sind nicht gültig, wird eine entsprechende Ausgabe durch die Methode checkParams "Parameter check failed!" generiert. Kann ich diese modifieren oder gibt es hierfür einen besseren Ansatz(Updatesicher usw.)? Momentan habe ich die Methode so grob angepasst. :| Mein Problem: Irgendwie hat Google diese Fehler-Seite indiziert und möchte dies zukünftig unterbinden?

Code: Alles auswählen

   public function checkParams() {

        if ((!$this->checkGetParams()) || (!$this->checkPostParams() || (!$this->checkCookieParams()))) {
            $this->logHackTrial();

            if ($this->_mode == 'stop') {
                ob_end_clean();
                $msg = 'Parameter check failed! (%s = %s %s %s)';

                header('Location: https://www.xxx.de/');
                exit();

                // prevent XSS!
                // $msg = sprintf($msg, htmlentities($this->_failure), htmlentities($_GET[$this->_failure]), htmlentities($_POST[$this->_failure]), htmlentities($_COOKIE[$this->_failure]));
                // die($msg);
            }
        }

        return true;
    }
Vielen Dank vorab!

Gruß
Leonhard

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

Re: Class cRequestValidator / Google

Beitrag von Faar » Do 19. Mai 2022, 15:02

Eigentlich werden Security-Warnungen in ein Logfile geschrieben, statt auf der Seite ausgegeben.
Wenn Andreas Kummer an der Klasse mitgearbeitet hat, ist diese schon recht alt und vielleicht erklärbar, warum die Message nicht in das Logfile geschrieben wird. Man sollte bei Security-Geschichten prinzipiell keine Warnungen auf der Seite zeigen, weil alles von Hackern als Information genutzt werden kann.
Es wäre also besser, anstelle von die($msg) die $msg vorher ins Logfile zu schreiben und das die() danach ohne alles wirken lassen.
https://api.contenido.org/latest/source ... ml#201-224

Ich habe jetzt aber keinen Beispielcode für das Logfile.
Vielleicht hat den jemand greifbar und dann kann man diese Datei für die nächste Version anpassen.

edit: es gibt in der Klasse eine Funktion für ein Logfile, die sogar aufgerufen wird, aber zusätzlich wird danach nochmal das $msg ausgegeben.
Das wäre sinnvoll, es auch ins Logfile zu schreiben.
https://api.contenido.org/latest/source ... ml#317-335
Nur taugt die Funktion nicht dafür, weil sie keine Daten wie $msg übernimmt.
Hier wäre das hier vielleicht nützlicher?
https://api.contenido.org/latest/class-cLog.html
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

Leo
Beiträge: 308
Registriert: Mi 19. Apr 2006, 19:26
Kontaktdaten:

Re: Class cRequestValidator / Google

Beitrag von Leo » Fr 20. Mai 2022, 10:46

Hallo Faar,

doch die Meldung wird über den cRequestValidator->__construct() in die .../data/logs/security.txt geschrieben. Warum die gesondert durch die andere Methode dann noch ausgegeben wird, weiß ich nicht ... dein Argument wegen der Sicherheit ist natürlich berechtigt. Jedenfalls hat Google die Ausgabe bei einem Kunden von mir indiziert und diesen Quatsch möchte ich nicht. Ich frage mich sowieso, wie Google an die Url gekommen ist. Nicht das hier noch irgendein Sicherheitsproblem vorliegt. Wäre die Weiterleitung so als Notlösung erst einmal ok? Oder soll ich noch etwas bedenken?

Code: Alles auswählen

            if ($this->_mode == 'stop') {
                ob_end_clean();
                $msg = 'Parameter check failed! (%s = %s %s %s)';

                header('Location: https://www.xxx.de/');
                exit();

                // prevent XSS!
                // $msg = sprintf($msg, htmlentities($this->_failure), htmlentities($_GET[$this->_failure]), htmlentities($_POST[$this->_failure]), htmlentities($_COOKIE[$this->_failure]));
                // die($msg);
            }
Danke vorab!

Viele Grüße
Leonhard

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

Re: Class cRequestValidator / Google

Beitrag von Faar » Fr 20. Mai 2022, 11:12

Hallo Leo,
du ersetzst lediglich das die() durch exit() und lässt $msg weg, das sollte gehen.
Wobei die Weiterleitung header() bereits das exit() erübrigen würde, aber sicher ist sicher, falls header() nicht mal geht.

Bei der Weiterleitung könnte man noch eine 302 Statusmeldung (moved temporary) mit übergeben, falls das hier funktioniert*
https://www.php.net/manual/de/function.header.php
Also erst header(302) und danach header(location).

* Der Status kann bereits durch die Seite ausgegeben worden sein und ein zweiter wäre dann nicht mehr möglich, soweit ich weiß.
Das Thema hatten wir hier schon mal.

P.S.
Ich mach das die($msg) mal als Issue.
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

Antworten