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.