DEVELOPMENT/chrome extension

chrome.webRequest API로 request 차단하기

hongjw 2020. 12. 29. 01:26

chrome.webRequest API로 request를 차단하기 위해 chrome.webRequest.onBeforeRequest 이벤트를 이용한다.

chrome.webRequest.onBeforeRequest는 request가 발생하려고 할 때 동작하는 것으로, TCP 연결이 이루어지기 전에 전송되며 request를 취소하거나 리다이렉션하는데 사용한다.

chrome.webRequest API의 자세한 정보는 개발자 도구에서 볼 수 있다.

 

chrome.webRequest.onBeforeRequest 이벤트의 코드 구조는 다음과 같다.

추가로 이벤트에서 request를 차단하기 위해서는 확장 프로그램 manifest.json 파일의 permission부분에 webRequest와 webRequestBlocking를 추가해줘야 한다.

chrome.webRequest.onBeforeSendHeaders.addListener(
  function(details) {
    //code ..
    return {};
  },
  {urls: ["<all_urls>"]},
  ["blocking"]
);

urls의 <all_urls>는 모든 url에 이벤트가 적용된다는 의미로, 특정 url을 설정해줄 수도 있다.

 

다음은 chrome.webRequest.onBeforeRequest 이벤트를 이용해 request를 차단하고, 리다이렉션하는 예시이다.

1) request 차단

chrome.webRequest.onBeforeSendHeaders.addListener(
  function(details) {
    //code ..
    console.log(details.url);
    return {cancel:true}; //details.url 차단
    return {cancel: details.url.indexOf("://www.evil.com/") != -1}; //details.url에 ://www.evil.com/이 포함되어있으면 차단
  },
  {urls: ["<all_urls>"]},
  ["blocking"]
);

2) request 리다이렉션

chrome.webRequest.onBeforeSendHeaders.addListener(
  function(details) {
    //code ..
    console.log(details.url);
    return {redirectUrl: naver.com}; //네이버로 리다이렉션
  },
  {urls: ["<all_urls>"]},
  ["blocking"]
);