자주 묻는 질문 - 내부 작동 원리

고급 설정은 어떻게 설정합니까?

애드블록 플러스는 about:config로 접근하는 많은 설정을 이용합니다. 그것들 모두는 extensions.adblockplus.로 시작합니다 (이것은 접두어 adblock.를 사용하는 Adlbock과 Adblock Plus 0.5와 다릅니다). 설명이 있는 전체 목록은 여기에서 확인하십시오.

다른 확장 프로그램을 애드블록 플러스로 어떻게 통합시킵니까?

다른 확장 프로그램을 애드블록 플러스에 통합시키려면 인터페이스 IAdblockPlus를 내보내십시오. 세부적인 인터페이스 문서를 확인하십시오.

애드블록 플러스는 어떻게 주소를 차단합니까?

어려운 작업은 실질적으로 게코(Gecko)라는 파이어폭스, 선더버드 그리고 다른 애플러케이션에 내장된 상위 엔진에 의해 이루어집니다. 게코는 "콘텐츠 정책(content policies)"으로 불리는 것을 허용합니다. 콘텐츠 정책은 단순한 자바스크립트(또는 C++) 객체로서 브라우저가 어떤 것을 불러올 필요가 있을 때마다 호출됩니다. 그것은 불러올 주소와 몇몇 다른 데이터를 검토한 다음, 그것의 허용 여부를 결정합니다. 등록된 많은 콘텐츠 정책이 존재하고(파이어폭스 또는 시몽키에서 사이트가 이미지를 불러오는 것을 허용하지 않게 정의하면 실질적으로 내장된 콘텐츠 정책 중 하나를 설정하게 되는 것입니다), 확장 프로그램이라면 콘텐츠 정책을 등록할 수 있습니다. 그래서 차단 기능을 위해 애드블록 플러스는 콘텐츠 정책을 등록하고, 그외에 차단할 주소와 필터 설정을 위한 사용자 인터페이스 코드를 결정하기 위해 애플리케이션 로직이 존재합니다.

개발자 참고사항 : 콘텐츠 정책을 등록하기 위해 XPCOM 컴포넌트를 작성해야 하며, 이 컴포넌트는 nsIContentPolicy 인터페이스를 내장합니다. "콘텐츠 정책" 카테고리(이를 위해 카테고리 관리자를 사용함)에 당신의 컴포넌트를 등록하기 위해 모듈의 registerSelf method를 조절해야 합니다. 이제 컴포넌트의 shouldLoad method는 호출될 것이고, 특정 요청이 수락될 것인지를 결정할 수 있습니다.

애드블록 플러스는 어떻게 필터를 처리하고, 어느 필터가 더 빠릅니까?

모든 필터는 내부적으로 정규 표현식으로 변환됩니다. 엄밀한 의미에서 그러한 일반 필터는 명확하지 않기 때문입니다. 예를 들어 필터 ad*banner.gif|는 정규 표현식 /ad.*banner\.gif$/로 변환됩니다. 그런데 필터를 주소에 적용할 때 브라우징의 속도를 저하시키지 않기 위해 모든 필터를 차례대로 테스트하지 않습니다.

필터를 정규 표현식을 변환할 뿐만 아니라 필터에서 텍스트 정보를 추출합니다. 그것이 필요한 이유는 주소마다 존재하는 8자의 고유한 문자열(일명 단축)과 필터가 일치하기 때문입니다(길이는 정해져 있지 않지만 8자가 합리적임). 예를 들어 필터 |http://ad.*가 있고, "http://a", "ttp://ad", "tp://ad." 사이에서 선택을 하면 이 문자열 중에서 어느 것이든지 이 필터와 항상 일치합니다.

불행하게도 와일드 카드 문자(*)로 8자 미만의 단순 필터이거나 명확하게 변환될 수 없는 정규 표현식이면 필터의 단축을 찾는 것은 불가능합니다. 모든 단축은 검색 표에 있고, 애드블록 플러스는 단축에 의해 필터를 매우 효율적으로 찾을 수 있습니다. 그런 후 특정 주소가 테스트될 때 거기에서 알려진 단축을 먼저 찾을 것입니다. (이것은 매우 빠르게 이뤄질 수 있고 그 필요한 시간은 단축의 개수와 거의 무관합니다.) 단축이 발견되었을 때만 문자열은 필터와 일치하는 정규 표현식을 테스트하게 됩니다. 그러나 단축 없는 필터는 차례차례 느린 속도로 테스트됩니다.

요약하자면 : 빠른 필터 목록을 필터 처리의 속도 향상을 위해 필터 작성 방법은 무엇입니까? 정규 표현식은 항상 느리기 때문에 가능한 한 적게 사용해야 합니다. 단순한 필터라도 최소 8자의 온전한 텍스트인지 역시 확인해야 합니다. 반면에 그것들은 정규 표현식만큼 느리지는 않을 것입니다 (이것들은 와일드 카드 문자(*)와 같이 특별한 의미의 어떠한 문자도 포함하지 않음을 의미합니다). 그러나 완전한 형식의 필터라면 필터의 수와는 무관하며, 처리 시간은 항상 같습니다. 만약 20개의 단순한 필터를 1개의 정규 표현식으로 교체할 수 있다면 가치가 있을지도 모릅니다. 정규 표현식을 단순 필터로 변환할 것을 매우 권장합니다.

알고리듬과 일치하는 필터에 대한 상세한 설명

요소 숨김은 어떻게 작동합니까?

요소 숨김 필터는 CSS로 변환되며, 사용자가 방문하는 모든 웹 페이지에 적용됩니다. example.com#div(evil_ad)와 같은 필터는 다음과 같이 변환됩니다.

@-moz-document domain(example.com)
{
  div#evil_ad, div.evil_ad
  {
    display: none !important;
  }
}

@-moz-document는 CSS 표준으로 제안된 확장이며, 모질라 개발자 센터에서 더 많은 정보를 참고하십시오.

어떤 도메인에 한정하지 않은 필터는 브라우저의 사용자 인터페이스의 요소 숨김을 막기 위해 프로토콜 http://와 https://로 제한할 것입니다 (chrome:// 프로토콜 스킴을 사용하고 있음). 예를 들어 필터 #div(evil_ad)는 다음과 같이 변환됩니다.

@-moz-document url-prefix(http://),url-prefix(https://)
{
  div#evil_ad, div.evil_ad
  {
    display: none !important;
  }
}

개발자 참고 : 애드블록 플러스는 여기에서 스타일시트 서비스를 이용하고 있습니다. 이 인터페이스는 게코 1.8부터 등장했고, 극적으로 확장 프로그램이 사용자 스타일시트를 추가할 수 있게 해주었습니다 (브라우저의 다시 시작이 필요한 userContent.css만을 수정할 수 있기 전에). 사용자 스타일시트는 모든 웹 사이트의 CSS 코드를 덮어쓸 것이고, importance로 인해 우선해서 적용됩니다.

구독 필터의 다운로드 주기는 얼마입니까?

구독 필터는 24시간 주기(하루에 한 번)로 다운로드되는 기본값이 설정되어 있습니다. 필터 유지자는 불필요한 트래픽 낭비를 막거나 필터 목록의 업데이트 정책 등의 이유로 그 값을 조절할 수 있습니다. 1시간에서 21일 사이에서 어떠한 값도 가능합니다. 이 값을 변경할 수 있는 한 가지 방법은 HTTP 헤드의 설정을 변경하는 것입니다. 아파치(Apache) mod_expires 모듈로 구독 필터의 다운로드 주기 설정이 가능하며, .htaccess 파일에 간단히 작성합니다.

ExpiresActive on
ExpiresByType text/plain "access plus 5 days"

그것은 다운로드 후 필터 목록을 5일 후에 만료되게 합니다. 필터 목록이 Perl 스크립트로 만들어지면 다음과 같은 명령으로도 구독 필터의 다운로드 주기를 설정할 수 있습니다.

$cgi->header(-expires => "+5d");

이것은 PHP처럼 다른 스크립팅 언어와 유사하게 작동합니다. HTTP 헤드를 조정할 수 없으면 필터 목록에 다음과 같이 주석을 입력합니다.

[Adblock]
! This list expires after 5 days

필터 목록에서 이 주석("이 목록은 5일 후에 만료됩니다"라는 의미)의 위치는 중요하지 않으며, "expires after" 또는 "expires" 문자열이 있는 주석을 찾습니다. 이 문자열 다음에는 숫자가 표시되는데 기본적으로 날짜로 해석됩니다, 그리고 숫자 앞에 "h" 문자열이 있으면 숫자를 시간으로 해석합니다. 예를 들어 "Expires: 3h" 또는 "expires after 3 hours"는 애드블록 플러스가 3시간마다 구독 필터를 자동으로 다운로드합니다.

참고로 이것은 다운로드 주기의 최소 시간입니다. 만약 사용자가 브라우저를 실행하지 않으면 브라우저를 다시 시작할 때 구독 필터를 다운로드합니다.

구독 필터의 주소가 변경되었고, 사용자들이 그 주소의 업데이트하는지를 어떻게 확인할 수 있습니까?

이 기능은 Adblock Plus 0.7.5부터 영속적인 주소 전환을 완벽히 지원하기 시작했습니다. 그리고 이 기능은 필터 유지자의 설정 변경함으로써 필터 구독자의 구독 필터를 새로운 위치에서 다운로드된다는 것을 알릴 뿐만 아니라 일정 시간이 지나면 다운로드 위치를 자동으로 변경합니다.

첫번째 선택사항 : HTTP 헤더로 전환하십시오. 오래된 구독 필터 주소에 대한 요청은 결국 "요청한 자원이 다른 주소로 이동되었음(301 Moved Permanently)"이라는 응답 코드로 나타납니다. Adblock Plus는 성공적으로 구독 필터의 주소를 전환/조정할 것입니다. 아파치 서버를 사용하는 경우 mod_alias 모듈로 예시와 같이 전환되게 할 수 있고, 아래 문자열을 .htaccess file에 추가하십시오.

Redirect permanent /old_list.txt http://example.com/new_list.txt

자신의 서버에서 HTTP 리다이렉트를 생성할 수 없다면 구독 필터의 새로운 주소를 변경하기 위해 다음과 같이 특별한 주석을 추가하면 됩니다.

[Adblock]
! Redirect: http://example.com/new_list.txt

이 주석은 필터 목록에서 입력된 위치와 관계없이 변경된 주소 앞에 붙는 문자열 "redirect:" 또는 "redirect to"를 찾기 위해 모든 주석을 검사하게 됩니다. 그러한 주석이 발견되면 새로운 구독 필터 업데이트는 한 시간 후에 새로운 주소로 초기화될 것입니다. 이 업데이트가 성공하면 구독 필터의 주소는 자동으로 수정될 것입니다.

마지막으로 서버를 이용할 수 없고, 사용자가 구독 필터가 업데이트될 때마다 다운로드 오류 메시지가 표시될 수 있습니다. 이 오류를 막기 위한 해결책이 존재합니다. 많은 실패한 다운로드 시도 (extensions. adblockplus. subscriptions_fallbackerrors 설정에 의해 결정됨) 이후 Adblock Plus는 더 많은 지시사항을 위해 extensions. adblockplus. subscriptions_fallbackurl 설정에서 정의된 주소로 연락할 것입니다. 만약 대표적인 문제인 경우 이 주소는 필터 목록의 새로운 주소를 배포할 것입니다. 그래서 일반적인 수단을 통해 구독 필터의 위치를 변경한 사실을 나타낼 수 없다면 이메일을 전송해주십시오.

필터 파일의 첫째줄은 무엇과 같은 것입니까?

필터 파일의 첫번째 줄은 보통 단순하게 [Adblock]만 있습니다. 하지만 종종 애드블록 플러스의 최신 버전은 [Adblock] 대신에 다른 텍스트를 입력한다는 것을 눈치챘을 것입니다. 이것은 초기 Adblock이 아닌 더 새로운 버전의 Adblock Plus에 의해서만 지원하는 고급 필터 구문을 사용하는 필터가 목록에 있을 때 이루어집니다.

(Adblock Plus 0.6.1.2 or higher required) [Adblock]

이것은 단순히 주석일 뿐입니다. Adblock(그러한 이유로 Adblock Plus도 마찬가지임)은 실제로 그 표시 앞에 있는 모든 것을 무시합니다. 애드블록 플러스 0.6.1.2는 그것을 지원하지 않았기 때문에 애드블록 플러스 버전에 영향을 받지 않습니다. 하지만 만약 훨씬 더 새로운 필터 구문을 사용한다면 다음과 같은 문자열을 확인할 것입니다.

[Adblock Plus 0.7.1]

애드블록 플러스 0.7.1부터 이러한 형태의 헤더를 지원합니다. 더 오래된 애드블록 플러스 버전과 애드블록은 이 헤더로 시작하는 파일을 열 수 없습니다. 현재 버전은 헤더에서 버전 번호를 확인 후 자체 버전 번호와 그것을 비교합니다. 만약 필터 파일이 더 새로운 애드블록 플러스가 필요하다면 불러오기 메시지에 업데이트를 요청이 있을 것입니다. 구독 필터의 경우 여전히 더 새로운 애드블록 플러스 버전에서 사용되는 필터 파일을 불러오겠지만 필터 관리 대화상자에 경고 메시지가 나타납니다.

마지막으로 애드블록 플러스는 필요하지만 버전 번호를 지정하고 싶지 않다면 파일을 [Adblock Plus]로 시작할 수 있습니다. 물론 이 파일은 애드블록 플러스 0.7.1 이상에서만 받아들여집니다.

우연한 다운로드 손상으로부터 구독 필터를 어떻게 보호할 수 있습니까?

안티바이러스와 파이어월 소프트웨어 그리고 프록시 서버는 다운로드되는 필터를 변경할 지도 모릅니다. 그러한 이유로 인해 때때로 필터 "*/example/*"는 "**"로 변경되어 웹 페이지의 모든 것이 차단됩니다. 이것을 막기 위해 필터 유지자는 필터 목록의 시작 부분에 체크섬(Checksum)를 입력할 수 있습니다.

[Adblock]
! Checksum: OaopkIiiAl77sSHk/VAWDA
test

체크섬이 파일의 콘텐츠와 일치하지 않으면 Adblock Plus는 다운로드되는 필터를 무시합니다. Adblock Plus 설정 창의 필터 메뉴에 있는 '사용자 필터 내보내기'를 이용하면 체크섬은 자동적으로 생성됩니다. 체크섬은 다음 항목들을 계산합니다.

  • 필터 목록의 텍스트를 인코딩한 UTF-8를 가져옴(첫째 줄 포함)
  • 모든 줄의 줄바꿈을 UNIX 스타일로 변환(존재하면 Wr 문자 제거)
  • 빈 줄 제거(일련의 다중 \n 문자를 단일한 \n 문자로 교체)
  • 기존의 체크섬 주석 제거
  • 텍스트의 base64로 인코딩된 MD5 체크섬을 계산하고, 끝에 있는 = 문자 제거

이를 압축하기 위한 Perl 코드는 다음과 같습니다.(파일 인코딩이 UTF-8로 가정함)

use Digest::MD5 qw(md5_base64);

my $data = readFile($file);

# Normalize data
$data =~ s/\r//g;
$data =~ s/\n+/\n/g;

# Remove existing checksum
$data =~ s/^\s*!\s*checksum[\s\-:]+[\w\+\/=]+.*\n//mi;

# Calculate new checksum
my $checksum = md5_base64($data);

참조 구현체(Reference implementations)는 체크섬 유효성 검사파일에 체크섬 추가하기 위해 존재합니다.

체크섬 계산을 하는 PHP 코드(파일 인코딩이 UTF-8로 가정함) :

$data = file_get_contents($file);

# Normalize data
$data = preg_replace('/\r/', '', $data);
$data = preg_replace('/\n+/', "\n", $data);

# Remove existing checksum
$data = preg_replace('/^\s*!\s*checksum[\s\-:]+([\w\+\/=]+).*\n/mi', '', $data);

# Calculate new checksum
$checksum = base64_encode(pack('H*', md5($data)));
$checksum = preg_replace('/=+$/', '', $checksum);
Powered by Anwiki애드블록 플러스 정보개인 정보 보호 정책Impressum