Изменение данных запроса POST и адресной строки в расширении chrome - PullRequest
0 голосов
/ 19 апреля 2020

Я пытаюсь создать расширение chrome, которое будет перехватывать запросы и параметры GET и POST и оценивать уязвимость XSS, вызывая API с URL-адресом и параметрами. Сначала я попробовал chrome.webRequest.onBeforeRequest.addListener обработчик событий, и он захватывает много запросов GET для каждого компонента сайта, когда я просто нажимаю URL в адресной строке. Это была слишком большая нагрузка для моего сервера API. Поэтому я решил записать содержимое адресной строки, поскольку там также видны параметры GET. Для захвата POST-запроса я все еще использую chrome.webRequest.onBeforeRequest.addListener. Теперь я хочу сделать следующее: 1. По умолчанию мое расширение должно проверять только содержимое адресной строки. 2. Когда во всплывающем окне расширения нажимается кнопка html, только я буду перехватывать POST-запросы. Что будет лучшим способом сделать это? ? Кроме того, есть ли способ отфильтровать захват запросов GET, чтобы он захватывал только первый URL-запрос, но не последующие запросы компонентов? Я чувствовал, что использование chrome.webRequest.onBeforeRequest.addListener было бы супер эффективно, если бы не ненужные захваченные запросы.

1 Ответ

1 голос
/ 19 апреля 2020

Вы можете отфильтровать слушателя по type, чтобы ограничить его основным документом и фреймами:

chrome.webRequest.onBeforeRequest.addListener(details => {
  // do something with details.url
}, {
  types: ['main_frame', 'sub_frame'],
  urls: ['<all_urls>'],
});

В вашем всплывающем окне вы можете установить флажок для переключения функции.
Прослушиватель щелчка флажок сохранит состояние в хранилище:

document.querySelector('input[type=checkbox]').onclick = e => {
  chrome.storage.local.set({watchPost: e.target.checked});
};

Фоновый скрипт будет прослушивать изменения в хранилище и переключать слушателя:

chrome.storage.local.get('watchPost', _ => {
  toggle(_.watchPost);
});

chrome.storage.onChanged.addListener(({watchPost}) => {
  if (watchPost) {
    toggle(watchPost.newValue);
  }
});

function toggle(state) {
  const event = chrome.webRequest.onBeforeRequest;
  if (state) {
    event.addListener(onPost, {urls: ['<all_urls>']});
  } else {
    event.removeListener(onPost);
  }
}

function onPost(details) {
  if (details.method === 'POST') {
    // ..........
  }
}

Вы также можете ограничить слушателя только одна вкладка, см. документацию . Обратите внимание, что перерегистрация той же ссылки на функцию не сработает: сначала вам нужно будет вручную вызвать removeListener, а затем addListener с новым фильтром.

...