북마크에서 Firefox에서 CSP를 비활성화하는 방법은 무엇입니까?


26

오늘 CSP (콘텐츠 보안 정책) 제한으로 인해 https://github.com/ 에서 책갈피를 실행할 수 없음을 확인했습니다 . Firefox에서 북마크를 위해 CSP를 비활성화하는 방법이 있습니까?

security.csp.enable옵션을 발견 about:config했지만 CSP가 완전히 비활성화됩니다. 북마크릿을 활성화 할 때 콘솔에 다음 메시지가 기록됩니다.

Timestamp: 04/22/2013 02:39:05 PM
Warning: CSP WARN:  Directive inline script base restriction violated

Source File: https://github.com/
Line: 0
Source Code:
javascript:...

답변:


8

북마크릿을 GreaseMonkey 사용자 스크립트 로 변환하려고 할 수 있습니다 . 이들은 특권 환경에서 실행되며 CSP의 적용을받지 않습니다.

그러나 물론 사용자 스크립트와 북마크릿의 의도는 다릅니다. 북마크릿은 주문형 상태에서 자동으로 실행됩니다. 예를 들어 <button>사용자 스크립트에서 를 작성 하고 페이지에 추가 한 다음 onclick해당 버튼에서 이벤트 리스너를 설정 하여 책갈피의 코드를 실행하면 이 문제를 피할 수 있습니다 .

코드는 다음과 같아야합니다.

// ==UserScript==
// @name            Name
// @description     Description
// @version         0.1
// @namespace       example.Lekensteyn
// @grant           none
// @include         http*://github.com/*/*/commit/*
// ==/UserScript==

var myBookmarklet = function () {
    // here goes the code of the bookmarklet
};

var newButton = document.createElement('button');
newButton.innerHTML = 'Execute my bookmarklet';

newButton.addEventListener('click', function(evt) {
    myBookmarklet();
});

document.getElementById('someElement').appendChild(newButton);

GitHub를 대상으로하는 사용자 스크립트 에서 거의 그대로 가져 왔습니다 . debugger;스크립트에서 키워드를 사용하여 Firebug에서 사용자 스크립트를 디버깅 할 수 있습니다 .

그러나 Firebug 자체 는 현재 CSP에 종속되므로 콘솔에서 코드를 실행할 수는 없지만 "읽기 전용"모드에서 사용자 스크립트를 검사 할 수 있습니다. 이것은 이 버그 에서 처리되고 있습니다.


1
주문형 기능은 매우 중요합니다. 페이지의 많은 부분을 채우지 않는 일부 기능, 현재 페이지의 QR 코드를 작성하는 기능 및 다른 작은 부분을 포함하는 빠른 평가 텍스트 텍스트를 삽입하는 책갈피가 있습니다. 그것들은 GH에 한정되지 않습니다. 북마크릿의 장점은 매우 쉽게 생성하고 제거 할 수 있다는 것입니다. GreaseMonkey는 이미 설치되었지만 CSP 문제를 해결하지는 못합니다. 제안에 감사드립니다. 아마도 Firebug 솔루션은 북마크에 도움이 될 것입니다.
Lekensteyn

4
불행히도 Firebug 수정은 Firebug 자체 만 수정합니다. 에서 Github에서이 CSP에 블로그 항목 : 로는 CSP 사양에 의해 명확하게, 브라우저 북마크는 CSP에 영향을 받아서는 안된다. (..) 그러나, 어느 브라우저도 이것을 올바르게 얻지 못합니다. 모두 CSP 위반을 유발하고 북마크가 작동하지 못하게합니다. 아마도 사건을 더 철저히 조사하고 Bugzilla에 대한 문제를보고해야합니다.
jakub.g

2
BTW GM_registerMenuCommand 를 사용 하여 필요에 따라 함수를 호출 할 수 있습니다 . 잊지 마세요 @grant GM_registerMenuCommand. Greasemonkey 메뉴에 항목을 추가합니다 (아래 참조) (GM logo) > User Script Command.... 그렇게하면 북마크를 사용자 스크립트로 쉽게 변환 할 수 있습니다.
jakub.g

이해할 수 없습니다 ... 클릭하면 코드를로드하기 위해 페이지에 버튼을 생성해도 작동하지 않습니다. 여전히 CSP 예외가 발생합니다.
Michael

7

Github은 사양에 따라 작동해야하지만 브라우저가 올바르게 작동하지 않는다고 말합니다.

https://github.com/blog/1477-content-security-policy#bookmarklets

이 문제에 대해 자주 사용하는 브라우저에 대한 버그를 열거 나 투표해야합니다.


2
기록을 위해 기본 북마크 기능에 대한 또 다른 Firefox 버그가 있습니다 (토론에서 아래로 떨어지지 않을 것입니다). bugzilla.mozilla.org/show_bug.cgi?id=1478037
djpohly

다른 사람들의 클릭을 저장하기 위해 위의 주석에서 @djpohly가 언급 한 버그 1478037은 외부 리소스를로드하지 않는 한 북마크를 실행할 수 있도록하는 것입니다.
waldyrious

1

많은 답변이 TamperMonkey 또는 GreaseMonkey와 같은 사용자 스크립트를 권장하지만 일부 페이지는 이러한 확장으로 인해 블랙리스트에 올랐습니다. 물론 블랙리스트를 무시할 수 있지만 개발자는 보안을 염두에두고이 페이지를 잠급니다.

예를 들어, 북마크 목록을 사용하여 Amazon 리스팅에서 ReviewMeta로 빠르게 이동하고 싶었지만 Amazon은 안전하지 않은 스크립트 소스를 차단했습니다 (업데이트 : 차단되지 않았지만 스크립트가없는 경우 부끄러운 일입니다). 사용자 스크립트 확장 프로그램은 기본적으로 뱅킹 및 쇼핑 사이트에 블랙리스트에 추가되어 악의적 인 사용자 스크립트가 설치 / 사용되는 것을 방지합니다.

(PS 이것은 그 자체로 답은 아니지만, 블랙리스트에 올린 페이지를 찾아서 블랙리스트에 올리지 않기를 주저하기 위해 사용자 스크립트에 손을 넣기 전에 이것을 명심하는 것이 유용 할 것이라고 생각했습니다.)



당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.