ursus contionabundo: CMS selber Programmieren?

Beitrag lesen

Jeder kann eine Webseite mit einem Formular erstellen, das auf deine Kommentarseite verweist. Das Formular kann komplett mit hidden-Fields befüllt sein und der Absenden-Button könnte wie ein harmloser Link aussehen.

Na gut.

Habe mich entschlossen, statt an $_POST['GoTo'] herumzukorrigieren, die (vermeintliche) URL auf den korrekten Beginn zu prüfen und dann auf genau die Zeichen, die htmlspecialchars(string, ENT_QUOTES) ersetzen würde. (In den echten URLs können diese Zeichen nicht vorkommen)

$GoToError = false;
if (! 0 === strpos( $_POST['GoTo'] , $_SERVER['REQUEST_SCHEME']  . '://' . $_SERVER['HTTP_HOST'] ) ) {
    $GoToError = true;
} else {
    foreach ( [ '"', '\'', '<', '>' ] as $badChar ) {
		    if ( false !== strpos( $_POST['GoTo'], $badChar ) ) {
			      $GoToError = true;
            break;
        } 
    }
}

if ( $GoToError ) {
	  http_response_code(418);
	  echo "<h1>Nice try.</h1>";
	  exit;
}

Da eine Reparatur nicht sinnvoll ist (htmlspecialchars würde z.B. immer noch eine Weiterleitung zu fremden Ressourcen erlauben) schicke ich den Besucher aber in die "Nice try" – Wüste. Ich überlege noch ob und wie ich das logge.