Làm cách nào để tắt CSP trong Firefox chỉ với bookmarklets?


26

Hôm nay tôi nhận thấy rằng tôi không thể chạy bookmarklets trên https://github.com/ do hạn chế của Chính sách bảo mật nội dung (CSP). Có cách nào để vô hiệu hóa CSP trong Firefox chỉ cho bookmarklets chứ không phải mọi thứ khác không?

Tôi nhận thấy security.csp.enabletùy chọn trong about:config, nhưng điều này sẽ vô hiệu hóa hoàn toàn CSP. Thông báo sau được ghi vào bảng điều khiển khi kích hoạt bookmarklet:

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:...

Câu trả lời:


8

Bạn có thể thử để chuyển đổi bookmarklets của bạn để GreaseMonkey userscripts. Họ chạy trong một môi trường đặc quyền và không phải chịu CSP.

Tuy nhiên, tất nhiên ý định của usercripts và bookmarklets là khác nhau - usercripts chạy tự động trong khi bookmarklets theo yêu cầu. Bạn có thể phá vỡ điều này, ví dụ như bằng cách tạo một <button>trong mô tả người dùng, nối nó vào trang và đặt một trình onclicklắng nghe sự kiện trên nút đó để kích hoạt mã của bookmarklet.

Mã nên đi như thế này:

// ==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);

Lấy gần như theo nghĩa đen từ usercript của tôi cũng đang nhắm mục tiêu GitHub. Bạn có thể gỡ lỗi mô tả người dùng trong Fireorms bằng debugger;từ khóa trong tập lệnh.

Tuy nhiên, xin lưu ý rằng bản thân Fire hiện tại cũng phải tuân theo CSP, do đó, bạn không thể thực thi mã trong bảng điều khiển (nhưng bạn có thể kiểm tra mô tả người dùng của mình ở chế độ "chỉ đọc"). Điều này đang được quan tâm trong lỗi này .


1
Các theo yêu cầu tính năng là rất quan trọng. Tôi có bookmarklets chèn một eval-textarea nhanh chóng với một số tính năng không lấp đầy phần lớn của trang, một để tạo mã QR cho trang hiện tại và một số phần nhỏ khác. Những người không cụ thể GH. Sức mạnh của bookmarklets là chúng có thể được tạo và gỡ bỏ rất dễ dàng. GreasMonkey đã được cài đặt, nhưng điều đó sẽ không giải quyết được vấn đề CSP. Cảm ơn những lời đề nghị, có lẽ một giải pháp cho Fireorms cũng sẽ có ích cho bookmarklets.
Lekensteyn

4
Thật không may, bản sửa lỗi Firebird sẽ chỉ sửa bản thân Firebird. Từ mục nhập blog của Github trên CSP : Như được làm rõ bởi thông số CSP, bookmarklets trình duyệt không nên bị ảnh hưởng bởi CSP. (..) Nhưng, không có trình duyệt nào hiểu được điều này. Tất cả gây ra vi phạm CSP và ngăn bookmarklet hoạt động. Có lẽ bạn nên điều tra vụ việc kỹ lưỡng hơn và báo cáo vấn đề về Bugzilla.
jakub.g

2
BTW bạn có thể sử dụng GM_registerMothyCommand để thực hiện chức năng gọi theo yêu cầu. Đừng quên @grant GM_registerMenuCommand. Nó thêm mục vào menu Greasemonkey, theo bên dưới (GM logo) > User Script Command.... Bằng cách đó, bạn có thể dễ dàng chuyển đổi bookmarklets của mình thành usercripts.
jakub.g

Tôi không hiểu ... tạo một nút trên trang để tải mã khi nhấp vào không hoạt động, nó vẫn ném ngoại lệ CSP
Michael

7

Github nói rằng nó sẽ hoạt động theo thông số kỹ thuật, nhưng không có trình duyệt nào làm đúng:

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

Bạn nên mở một lỗi cho trình duyệt yêu thích của mình cho vấn đề này hoặc bỏ phiếu cho nó:


2
Đối với bản ghi, có một lỗi Firefox khác dành riêng cho chức năng bookmarklet cơ bản (ít có khả năng bị sa lầy trong cuộc thảo luận): bugzilla.mozilla.org/show_orms.cgi?id=1478037
djpohly

Để tiết kiệm cho người khác nhấp chuột, lỗi 1478037 được đề cập bởi @djpohly trong nhận xét ở trên là về việc cho phép bookmarklets chạy miễn là họ không tải tài nguyên bên ngoài.
waldyrious

1

Nhiều câu trả lời đề xuất các tập lệnh người dùng (như TamperMonkey hoặc GreasMonkey) nhưng tôi muốn nhớ rằng một số trang bị liệt vào danh sách đen vì một lý do bởi các tiện ích mở rộng này. (Chắc chắn, bạn có thể ghi đè danh sách đen, nhưng các nhà phát triển đã bảo mật và khóa các trang này).

Ví dụ: tôi muốn sử dụng bookmarklet để nhanh chóng truy cập ReviewMeta từ bất kỳ danh sách nào của Amazon, nhưng Amazon đã chặn các nguồn tập lệnh không an toàn (cập nhật: nó không bị chặn, nhưng tôi không có tập lệnh nào, thật đáng xấu hổ). Các phần mở rộng tập lệnh người dùng được liệt kê vào danh sách đen trên các trang web ngân hàng và mua sắm để ngăn chặn các tập lệnh người dùng độc hại được cài đặt / sử dụng.

(PS Đây không phải là câu trả lời mỗi lần nhưng tôi nghĩ sẽ rất hữu ích khi ghi nhớ điều này trước khi sử dụng bản mô tả người dùng chỉ để tìm trang bị liệt vào danh sách đen và do dự khi không liệt kê nó.)


0

Tôi đã tạo một "cách khắc phục" cho vấn đề này bằng cách sử dụng bản mô tả người dùng Greasemonkey (trong Firefox). Giờ đây, bạn có thể có bookmarklets trên tất cả các trang web CSP và https: //, cộng với có bookmarklets của bạn trong một tệp thư viện đẹp, dễ chỉnh sửa thay vì được đặt riêng lẻ vào một dấu trang.

Xem: https://groups.google.com/d/msg/greasemonkey-users/mw61Ynw5ORc/Gl_BNUhtSq0J


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.