콘텐츠 필터링

Chrome 확장 프로그램에서 콘텐츠 및 네트워크 필터링을 구현하는 방법은 여러 가지가 있습니다. 이 가이드에서는 확장 프로그램에서 사용할 수 있는 콘텐츠 필터링 기능과 Chrome 확장 프로그램에서 사용할 수 있는 다양한 필터링 접근 방식, 기술, API를 간략하게 설명합니다.

네트워크 요청 필터링

Chrome 확장 프로그램에서 네트워크 요청을 필터링하는 기본 방법은 chrome.declarativeNetRequest API를 사용하는 것입니다. 선언적 Net Request를 사용하면 개발자가 선언적 규칙을 지정하여 네트워크 요청을 차단하거나 수정할 수 있습니다. 선언적 순 요청 규칙 형식은 대부분의 광고 차단 프로그램에서 사용하는 필터 목록 구문의 기능을 기반으로 합니다.

이러한 규칙은 다음을 수행할 수 있습니다.

  • 네트워크 요청을 차단합니다.
  • URL 스키마를 보안 스키마 (http에서 https 또는 ws에서 wss)로 업그레이드합니다.
  • 네트워크 요청을 리디렉션합니다.
  • 요청 또는 응답 헤더를 수정합니다.

Chrome은 확장 프로그램과 번들로 제공되는 규칙과 원격 구성 또는 사용자 입력에 대한 응답과 같이 동적으로 업데이트되는 규칙을 지원합니다.

확장 프로그램과 함께 번들 필터 규칙

확장 프로그램 패키지에 포함된 규칙을 '정적 규칙'이라고 합니다. 이러한 규칙은 확장 프로그램을 설치하거나 업그레이드할 때 설치되고 업데이트됩니다. Chrome에서는 확장 프로그램이 선언할 수 있는 정적 규칙의 수를 제한합니다.

정적 선언적 네트워크 요청 규칙의 경우 Chrome에는 설치된 확장 프로그램 집합에서 공동으로 사용할 수 있는 300,000개의 규칙으로 구성된 전역 공유 풀이 있습니다. 또한 모든 확장 프로그램에는 30, 000개의 정적 규칙이 허용됩니다. 예를 들어 사용자에게 콘텐츠 필터링 확장 프로그램이 하나만 설치되어 있는 경우 확장 프로그램은 최대 330,000개의 정적 선언적 Net Request 규칙을 사용할 수 있습니다. 이 규칙이 얼마나 많은지 짐작할 수 있도록 대부분의 광고 차단 프로그램에서 사용하는 인기 있는 EasyList 필터 목록은 약 35,000개의 네트워크 규칙으로 구성되어 있습니다.

정적 선언적 Net Request 규칙은 다양한 규칙 세트로 구성할 수 있습니다. 확장 프로그램은 최대 100개의 정적 규칙을 지정할 수 있으며 이러한 규칙 중 50개를 한 번에 사용 설정할 수 있습니다.

런타임에 필터 규칙을 동적으로 추가

일부 규칙은 확장 프로그램과 함께 번들로 제공할 수 없습니다. 대신 확장 프로그램은 런타임에 이를 추가해야 합니다. 이러한 규칙을 '동적 규칙'이라고 합니다.

동적 선언적 네트워크 요청 규칙의 경우 Chrome은 확장 프로그램당 최대 30,000개의 안전한 동적 규칙을 허용합니다. 대부분의 규칙은 안전한 규칙(block, allow, allowAllRequests 또는 upgradeScheme)으로 간주됩니다. 규칙이 안전하지 않은 것으로 간주되더라도 (예: redirect) 동적으로 추가할 수 있지만 최대 한도가 5,000으로 낮아지며 이는 30,000개의 동적 규칙 한도에도 포함됩니다. 이를 고려할 때 easylist 필터 목록의 규칙 중 98~99% 가 안전한 규칙입니다.

콘텐츠 필터링 확장 프로그램은 각각 정적 및 동적 규칙을 사용하여 알려진 필터링 규칙을 확장 프로그램과 번들로 묶고 필요할 때마다 서버에서 새로운 콘텐츠 필터링 규칙으로 확장 프로그램을 업데이트할 수 있습니다.

관찰된 요청에 따라 규칙 조정

광고 생태계는 지속적으로 진화하고 있으며 콘텐츠 필터도 이에 따라 업데이트해야 합니다. chrome.webRequest와 동적 선언적 네트워크 요청 규칙을 결합하면 잠재적인 개인 정보 보호 위반에 대한 네트워크 요청을 분석하고 향후 이러한 요청을 차단할 수 있습니다.

기본 접근 방식은 다음과 같습니다.

  1. chrome.webRequest API를 사용하여 웹 요청을 분석하고 머신러닝을 사용하여 개인 정보 보호 요건을 충족하지 않는 요청을 자동으로 식별합니다.
  2. 유사한 요청이 향후 차단되도록 2단계에서 식별된 각 요청에 대해 동적 선언적 Net Request 규칙을 만듭니다.
  3. (선택사항) 식별된 선언적 Net Request 규칙을 서버로 다시 전송하여 다음 확장 프로그램 업데이트 시 정적 선언적 Net Request 규칙으로 추가할 수 있습니다.

이 접근 방식의 장점은 분석이 비동기적으로 이루어지므로 웹사이트 성능에 부정적인 영향을 미치지 않는다는 것입니다.

사용자가 자체 필터링 규칙을 정의할 수 있도록 허용

확장 프로그램에 필터 구성 UI를 제공하여 사용자가 자체 콘텐츠 필터링 규칙을 정의하도록 할 수 있습니다. 이러한 사용자 정의 규칙을 선언적 네트워크 요청 규칙으로 변환하고 동적 규칙으로 추가합니다. 이러한 규칙은 브라우저 세션과 확장 프로그램 업그레이드 전반에 걸쳐 유지되므로 사용자가 계속 사용할 수 있습니다. 이 방법을 사용하면 사용자가 최대 30,000개의 맞춤 규칙을 추가할 수 있습니다.

웹페이지에서 요소 필터링

네트워크 요청 필터링은 콘텐츠 필터링의 중요한 부분 중 하나일 뿐입니다. 또 다른 중요한 부분은 웹페이지에서 원치 않는 콘텐츠를 직접 삭제하는 것입니다. 예를 들어 easylist 필터 목록 규칙의 40% 이상이 클라이언트가 페이지 요소를 숨기는 방법을 정의합니다.

이 작업은 콘텐츠 스크립트를 사용하여 실행할 수 있습니다. 콘텐츠 스크립트는 웹페이지의 컨텍스트에서 실행되며 DOM을 사용하여 웹페이지를 변경할 수 있습니다.

Chrome 확장 프로그램은 원격 호스팅 코드를 실행할 수 없습니다. 하지만 숨길 요소에 관한 서버의 데이터는 구성 데이터로 간주되므로 영향을 받지 않습니다. 따라서 필요할 때마다 런타임에 요소 규칙을 업데이트할 수 있습니다.

정책 설치 확장 프로그램에서 네트워크 요청 필터링

엔터프라이즈 및 교육 사용 사례에는 콘텐츠에 따라 요청을 필터링하는 등 콘텐츠 및 네트워크 필터링에 관한 매우 엄격한 요구사항이 있는 경우가 많습니다. 이러한 사용 사례를 지원하기 위해 정책 설치 확장 프로그램에는 네트워크 요청을 필터링하고 차단하는 추가 방법이 있습니다. webRequest API의 이벤트와 함께 '차단' 옵션을 사용하면 요청을 차단할지 여부를 결정하기 위해 모든 요청에 맞춤 로직을 실행하는 프로그래매틱 콘텐츠 필터를 구현할 수 있습니다. 정책에 의해 설치된 확장 프로그램은 신뢰 수준이 높으므로 이러한 확장 프로그램으로 제한됩니다.

탐색 요청 가로채기

선언적 Net Request 규칙을 사용하여 탐색 요청을 필터링할 수 있습니다. 예를 들어 사용자를 원하는 도착 페이지로 리디렉션하는 추적 URL을 우회할 수 있습니다. 이 문제를 처리하는 한 가지 방법은 탐색 요청 https://tracker.com?redirect=https%3A%2F%2Fexample.com를 확장 프로그램 페이지 (웹 액세스 가능 리소스로 구성해야 함)로 리디렉션하는 것입니다. 그러면 스크립트가 실행되어 리디렉션 타겟을 추출하고 링크 추적기를 우회하여 window.location.replace("https://example.com")를 사용하여 대상으로 리디렉션됩니다.