원격 호스팅 코드 위반 처리

원격 호스팅 코드(RHC)는 Chrome 웹 스토어에서 는 할 수 있습니다. JavaScript, WASM 등입니다. 포함되지 않습니다. 데이터 또는 JSON 또는 CSS와 같은 것들입니다.

RHC가 더 이상 허용되지 않는 이유는 무엇인가요?

이제 Manifest V3 확장 프로그램이 내부에서 사용 중인 모든 코드를 번들로 묶어야 함 확장 프로그램 자체를 식별합니다. 이전에는 URL을 입력합니다.

내 확장 프로그램에 RHC가 있다는 이야기를 들었습니다. 어떤 문제인가요?

검토 과정에서 확장 프로그램이 Blue Argon 오류로 거부되었다면 검토자가 확장 프로그램에서 원격 호스팅 코드를 사용하는 것으로 판단했습니다. 이것은 일반적으로 확장 프로그램이 리모컨을 사용하여 스크립트 태그를 추가하려고 할 때 즉, 파일에 포함된 파일이 아닌 오픈 웹에서 확장 프로그램)를 직접 실행하거나 직접 실행할 리소스를 가져와서 실행할 수 있습니다.

RHC를 파악하는 방법

무엇을 찾아야 하는지 알면 RHC를 발견하기가 그리 어렵지 않습니다. 먼저, 'http://' 문자열을 확인합니다. 또는 'https://' 확인할 수 있습니다 계정이 있는 경우 RHC 위반을 발견했다면 이 항목을 찾아 찾을 수 있습니다. 만약 전체 빌드 시스템이 있거나 npm 또는 기타 서드 파티의 종속 항목을 사용합니다. 먼저, 컴파일된 버전의 코드를 검색하고 있는지 확인하세요. 매장에서 이 값을 평가하기 때문입니다. 여전히 문제가 해결되지 않으면 문제를 찾은 후 다음 단계는 원스톱 지원팀에 문의하는 것입니다. 그들은 구체적인 위반사항과 이에 따른 조치를 받기 위해 필요한 사항을 가능한 한 빨리 게시해야 합니다.

라이브러리에서 코드를 요청하는 경우 해야 할 일

코드의 출처에 상관없이 RHC를 가질 수 없습니다. 이 : 개발자가 작성하지 않은 코드가 포함되어 있지만 우연히 살펴보겠습니다 Firebase를 사용하는 일부 개발자는 코드가 Firebase 인증에 사용되도록 포함되었습니다. 비록 이것이 사용하는 경우 RHC에 대한 예외가 인정되지 않습니다. 요구사항 RHC를 삭제하거나 포트가 유효하지 않은 상태로 업데이트되도록 포함할 수 있습니다. 코드가 아닌 문제가 발생한 경우 RHC를 로드하는 것이지만 사용 중인 라이브러리라면 도서관 작성자에게 문의하는 것입니다. 사용자에게 이러한 상황이 발생한다고 알리고 해결 방법이나 코드 업데이트를 요청하여 삭제하세요.

라이브러리 업데이트를 기다릴 수 없는 경우

일부 라이브러리는 알림을 받은 후 거의 즉시 업데이트를 제공하지만, 나머지는 포기되거나 문제를 해결하는 데 시간이 걸릴 수 있습니다. 어떤 직접 확인할 수 있도록 귀하가 직접 조치를 취할 때까지 기다릴 차단 해제되어 검토를 완료해야 합니다. 다양한 빠르게 백업 및 실행할 수 있는 다양한 옵션이 제공됩니다.

코드 감사

요청을 일으키는 코드가 필요한지 확실한가요? 가능할 경우 삭제하거나 문제의 원인이 되는 라이브러리를 삭제한 다음 그러면 작업이 완료됩니다.

또는 동일한 기능을 제공하는 다른 라이브러리가 있나요? 사용해 보기 npmjs.com, GitHub 또는 기타 사이트에서 사용할 수 있습니다

트리 쉐이킹

RHC 위반을 유발한 코드가 실제로 사용되고 있지 않다면 도구를 통해 자동으로 삭제할 수 있습니다 최신 빌드 도구는 webpack, Rollup, Vite 등의 기능에는 트리 쉐이킹이라고 합니다 빌드 시스템에서 사용 설정되면 트리 쉐이킹은 사용하지 않는 코드 경로를 삭제해야 합니다. 이는 더 많은 잠재고객을 가지고 있을 뿐만 아니라 규정을 준수하는 버전의 코드에 더 가볍고 빠른 코드도 줄 수 있습니다. 중요한 것은 모든 라이브러리가 트리 쉐이킹 작업을 할 수 있는 것은 아니지만 대다수가 트리 쉐이킹 작업을 할 수 있습니다. 다소 유용함 Rollup 및 Vite와 같은 도구에는 기본적으로 트리 쉐이킹이 사용 설정되어 있습니다. webpack 구성되어야 합니다. 빌드를 사용하지 않는 경우 시스템을 확장 프로그램의 일부로 포함하지만 코드 라이브러리를 사용하고 있다면 워크플로에 빌드 도구를 추가하는 방법을 고려해 보시기 바랍니다. 빌드 도구를 사용하면 보다 안전하고 안정적이며 유지관리하기 쉬운 프로젝트를 작성할 수 있습니다.

트리셰이킹을 구현하는 방법에 관한 구체적인 내용은 특정 프로젝트에 따라 다릅니다. 그러나 Rollup을 사용한 간단한 예를 들어보자면, 더 빠르게 컴파일할 수 있습니다 예를 들어 main.js라는 Firebase 인증은 다음과 같습니다.

import { GoogleAuthProvider, initializeAuth } from "firebase/auth";

chrome.identity.getAuthToken({ 'interactive': true }, async (token) => {
  const credential = GoogleAuthProvider.credential(null, token);
  try {
    const app = initializeApp({ ... });
    const auth = initializeAuth(app, { popupRedirectResolver: undefined, persistence: indexDBLocalPersistence });
    const { user } = await auth.signInWithCredential(credential)
    console.log(user)
  } catch (e) {
    console.error(error);
  }
});

그런 다음 입력 파일을 Rollup에 알리기만 하면 됩니다. 노드 파일 로드 @rollup/plugin-node-resolve 및 출력 이름 확인할 수 있습니다

npx rollup --input main.js --plugin '@rollup/plugin-node-resolve' --file compiled.js

터미널 창에서 이 명령어를 실행하면 생성된 버전을 받게 됩니다. 모두 compiled.js라는 단일 파일로 컴파일됩니다.main.js

롤업은 간단할 수 있지만 매우 구성 가능합니다. 모든 종류의 광고 항목을 추가할 수 있습니다. 문서를 확인하세요. 이와 같은 빌드 도구를 추가하면 더 작고 효율적인 코드가 만들어지고 이 경우에는 원격 호스팅 코드 문제를 해결합니다.

자동으로 파일 수정

원격 호스팅 코드가 코드베이스에 입력할 수 있는 점점 더 일반적인 방법은 하위 종속 항목으로 구성할 수 있습니다. X 라이브러리에서 다음을 요청하는 경우 import 라이브러리 Y를 사용하는 경우, 로컬 소스에서 로드됩니다 최신 빌드 시스템을 사용하면 간단한 빌드 및 플러그인을 사용하여 원격 참조를 추출하고 코드에 직접 인라인으로 삽입하세요.

이는 다음과 같은 코드가 제공되었음을 의미합니다.

import moment from "https://unpkg.com/moment@2.29.4/moment.js"
console.log(moment())

작은 롤업 플러그인을 만들 수 있습니다.

import { existsSync } from 'fs';
import fetch from 'node-fetch';

export default {
  plugins: [{
    load: async function transform(id, options, outputOptions) {
      // this code runs over all of out javascript, so we check every import
      // to see if it resolves as a local file, if that fails, we grab it from
      // the network using fetch, and return the contents of that file directly inline
      if (!existsSync(id)) {
        const response = await fetch(id);
        const code = await response.text();

        return code
      }
      return null
    }
  }]
};

새 플러그인으로 빌드를 실행하면 모든 원격 import URL이 코드, 하위 종속 항목, 하위 종속 항목 또는 다른 위치에 있을 수 있습니다.

npx rollup --input main.js --config ./rollup.config.mjs --file compiled.js

수동으로 파일 수정

가장 간단한 방법은 RHC를 일으키는 코드를 삭제하는 것입니다. 다음 앱으로 열기 문제가 있는 행을 삭제합니다. 일반적으로 이는 그렇지 않습니다. 불안정하고 잊혀질 수 있기 때문입니다. Kubernetes는 'library.min.js'라는 파일이 삭제되면 프로젝트를 더 어렵게 유지관리할 수 있음 아니 실제로 library.min.js입니다. RAW 파일을 수정하는 대신 유지 가능한 옵션은 patch-package와 같은 도구를 사용하는 것입니다. 이것은 수정사항을 파일에 직접 저장하지 않고 파일에 저장할 수 있게 해주는 할 수 있습니다. 패치 파일(패치 파일)을 기반으로 빌드되었으며 Git 또는 Subversion과 같은 버전 제어 시스템을 구동합니다. 필요한 정책을 위반하는 코드를 수동으로 수정하고 diff 파일을 저장하며 패치-패키지를 적용할 변경사항을 포함합니다. 전체 튜토리얼을 읽을 수 있습니다. 프로젝트 리드미에서 프로젝트에 패치를 적용하는 경우 매우 프로젝트에 연락하여 변경사항을 업스트림에서 실행할 수 있습니다 patch-package를 사용하면 패치를 훨씬 쉽게 관리할 수 있지만 패치할 것이 없는 것이 훨씬 더 좋습니다.

코드가 사용되지 않는 경우 해결 방법

코드베이스가 커질수록 종속 항목 (또는 종속 항목의 종속 항목 또는 종속 항목의 종속 항목)은 중...)는 더 이상 사용되지 않는 코드 경로를 유지할 수 있습니다. 이러한 섹션 중 하나가 RHC를 로드 또는 실행하는 코드가 포함된 경우 해당 코드를 삭제해야 합니다. 그것은 죽었든 사용되지 않았는지는 중요하지 않습니다. 사용하지 않는 경우 트리쉐이킹이나 라이브러리를 패치하여 삭제합니다.

다른 해결 방법이 있나요?

일반적으로는 그렇지 않습니다. RHC가 허용되지 않습니다. 그러나 몇 가지 허용되는 경우에 해당합니다. 거의 항상 다른 방법으로는 불가능에 가깝습니다.

사용자 스크립트 API

사용자 스크립트는 일반적으로 TamperMonkey 및 같은 사용자 스크립트 관리자를 위한 사용자이며, Violentmonkey입니다. 이러한 관리자는 사용자가 작성하므로 User Script API는 코드를 실행하는 방법을 노출합니다. 확인할 수 있습니다 이 표현은 다음을 대체할 수 없습니다. chrome.scripting.executeScript 또는 기타 코드 실행 환경에서 작동합니다. 사용자가 작업을 실행하려면 개발자 모드를 사용 설정해야 합니다. Chrome 웹 매장 검토팀에서 이 제품이 실제와 다른 방식으로 사용되고 있다고 생각합니다. 의도된 경우 (즉, 사용자가 제공한 코드) 거부되거나 스토어 등록정보가 삭제됩니다.

chrome.debugger

chrome.debugger API는 확장 프로그램에 다음과 같은 상호작용 기능을 제공합니다. Chrome Devtools 프로토콜에 대해 자세히 알아보세요. 이것은 동일한 프로토콜로 Chrome의 Devtools와 엄청나게 많은 다른 도구가 있습니다. 이를 통해 확장 프로그램이 원격 코드를 요청하고 실행할 수 있습니다. 사용자 스크립트와 마찬가지로 chrome.scripting을 대체할 수 있으며 훨씬 더 주목할 만한 사용자 환경을 제공합니다. 사용 중에 상단에 경고 표시줄이 표시됩니다. 창 배너를 닫거나 닫으면 디버깅 세션이 서비스 종료

<ph type="x-smartling-placeholder">
</ph> &#39;디버거 확장 프로그램이 이 브라우저를 디버깅하기 시작했습니다&#39;라는 메시지가 표시된 Chrome의 주소 표시줄 스크린샷
'디버거 확장 프로그램이 이 브라우저를 디버깅을 시작했습니다'라는 메시지가 표시된 Chrome의 주소 표시줄 스크린샷

샌드박스 iframe

문자열을 코드로 평가해야 하고 DOM 환경 (예: 콘텐츠 스크립트)를 사용하고 있다면 또 다른 옵션이 샌드박스 처리된 iframe을 사용하는 것입니다. 확장 프로그램은 안전 예방 조치로 기본적으로 eval()가 있습니다. 사용자의 안전을 위협할 수 있는 악성 코드 보안 위험에 노출될 수 있습니다 하지만 코드가 알려진 안전한 (예: 나머지 웹에서 샌드박스 처리된 iframe처럼) 그러한 위험이 크게 줄어듭니다. 이러한 맥락에서 콘텐츠 보안은 eval 사용을 차단하는 정책을 해제할 수 있으므로 유효한 JavaScript 코드가 있어야 합니다.

다루지 않는 사용 사례가 있다면 언제든지 Google에 문의하세요. chromium-extensions 메일링 리스트를 사용하여 의견을 받거나 새 원스톱 지원의 안내를 요청할 수 있는 티켓

결정에 동의하지 않는 경우 취할 조치

정책 시행에는 미묘한 차이가 있을 수 있으며 검토에는 수동 입력이 수반됩니다. 즉, Chrome 웹 스토어팀이 검토 결정을 변경하는 데 동의할 수 있습니다. 만약 검토 과정에서 실수가 있었다고 생각되는 경우 거부에 대해 이의신청을 할 수 있습니다. 원스톱 지원 이용