У меня есть приложение Vue, которое использует Auth0. Я получаю такую последовательность событий:
Этот конечный URL-адрес неверен: невозможно разрешить страницу по данному URL-адресу. Так как же это вообще возможно?
И учитывая вышеизложенное: как я могу получить доступ к исходному URL-адресу, особенно к этой части: dev/?myparam?





Хорошо, я немного неправильно сформулировал свой вопрос. Но:
Существуют функции JS, которые манипулируют историей, например window.history.replaceState() и window.location.pushState(). Это может повлиять на отображаемый в данный момент URL-адрес. Браузеры позволяют вам это делать, если вы не меняете домен.
В этом конкретном случае vue3-auth0 использует replaceState() для обновления URL-адреса после перенаправления со страницы входа. Похоже, он глючит и всегда переписывает его как /, даже если это не должно. Он также пытается удалить параметры URL-адреса, которые добавляет Auth0, в частности code и state.
В итоге я добавил эту хакерскую ловушку, чтобы поймать и предотвратить ее.
window.history.replaceState = new Proxy(window.history.replaceState, {
apply: (target, thisArg, argArray) => {
const search = new URLSearchParams(window.location.search);
search.delete('code');
search.delete('state');
return target.apply(thisArg, [
{},
'',
`${window.location.href.split('?')[0]}?${search.toString()}`,
]);
},
});
Это атака «Подмена адресной строки». За последние десятилетия в распространенных веб-браузерах было обнаружено множество уязвимостей, позволяющих совершать такие атаки. Обычно он основан на специальном коде JavaScript, который выполняет некоторые действия таким образом, что в конечном итоге в адресной строке отображается устаревший URL-адрес.