จะปิดการใช้งาน CSP ใน Firefox เพียงแค่ bookmarklets ได้อย่างไร?


26

วันนี้ฉันสังเกตเห็นว่าฉันไม่สามารถเรียกใช้ bookmarklet ได้ที่https://github.com/เนื่องจากข้อ จำกัด ของนโยบายความปลอดภัยเนื้อหา (CSP) มีวิธีการปิดการใช้งาน CSP ใน Firefox สำหรับบุ๊กมาร์กเพียงและไม่ใช่ทุกอย่างใช่ไหม

ฉันสังเกตเห็นsecurity.csp.enableตัวเลือกในabout:configแต่สิ่งนี้จะปิดการใช้งาน CSP อย่างสมบูรณ์ ข้อความต่อไปนี้ถูกบันทึกลงในคอนโซลเมื่อเปิดใช้งาน 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:...

คำตอบ:


8

คุณอาจลองแปลง bookmarklet เป็นGreaseMonkey userscripts พวกเขาทำงานในสภาพแวดล้อมที่มีสิทธิพิเศษและไม่อยู่ภายใต้ CSP

อย่างไรก็ตามแน่นอนว่า intents ของ userscripts และ bookmarklet นั้นแตกต่างกัน - userscripts จะทำงานโดยอัตโนมัติในขณะที่ bookmarklet ตามต้องการ คุณสามารถหลีกเลี่ยงสิ่งนี้เช่นโดยการสร้าง<button>ใน userscript ต่อท้ายหน้าและตั้งค่าonclickฟังเหตุการณ์บนปุ่มนั้นเพื่อเริ่มรหัสของ bookmarklet

รหัสควรเป็นดังนี้:

// ==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 ด้วย คุณสามารถดีบัก userscripts ใน Firebug โดยใช้debugger;คีย์เวิร์ดในสคริปต์

อย่างไรก็ตามโปรดทราบว่าFirebug นั้นมีไว้สำหรับ CSP แล้วดังนั้นคุณจึงไม่สามารถใช้งานโค้ดในคอนโซลได้ (แต่คุณสามารถตรวจสอบ userscripts ของคุณในโหมด "อ่านอย่างเดียว") สิ่งนี้กำลังได้รับการดูแลในบั๊กนี้


1
ตามความต้องการคุณลักษณะเป็นสิ่งสำคัญมาก ฉันมี bookmarklet ที่แทรก eval-textarea อย่างรวดเร็วพร้อมกับคุณสมบัติบางอย่างที่ไม่ได้เติมเต็มส่วนใหญ่ของหน้าหนึ่งสำหรับสร้างรหัส QR สำหรับหน้าปัจจุบันและบางส่วนเล็ก ๆ อื่น ๆ สิ่งเหล่านี้ไม่เฉพาะ GH พลังของ bookmarklet คือสามารถสร้างและลบออกได้อย่างง่ายดาย ติดตั้ง GreaseMonkey แล้ว แต่นั่นจะไม่ช่วยแก้ปัญหา CSP ขอบคุณสำหรับคำแนะนำอาจเป็นวิธีแก้ปัญหาสำหรับ Firebug ก็จะเป็นประโยชน์สำหรับ bookmarklets
Lekensteyn

4
น่าเสียดายที่การแก้ไข Firebug จะแก้ไข Firebug เท่านั้นเอง จากรายการบล็อก Github บน CSP : ตามที่ได้ระบุไว้อย่างชัดเจนโดยข้อมูลจำเพาะ CSP บุ๊คมาร์คของเบราว์เซอร์ไม่ควรได้รับผลกระทบจาก CSP (.. ) แต่ไม่มีเบราว์เซอร์ใดที่ถูกต้อง ทั้งหมดทำให้เกิดการละเมิด CSP และป้องกันไม่ให้ bookmarklet ทำงาน บางทีคุณควรตรวจสอบกรณีอย่างละเอียดมากขึ้นและรายงานปัญหาเกี่ยวกับ Bugzilla
jakub.g

2
BTW คุณสามารถใช้GM_registerMenuCommandเพื่อทำการเรียกใช้ฟังก์ชันตามความต้องการ @grant GM_registerMenuCommandอย่าลืม มันจะเพิ่มลงในเมนู Greasemonkey (GM logo) > User Script Command...ภายใต้ ด้วยวิธีนี้คุณสามารถแปลง bookmarklet เป็น userscripts ได้อย่างง่ายดาย
jakub.g

ฉันไม่เข้าใจ ... การสร้างปุ่มบนหน้าเว็บเพื่อโหลดรหัสเมื่อคลิกไม่ทำงานมันยังคงส่งข้อยกเว้น CSP
Michael

7

Github บอกว่ามันควรจะทำงานได้ตามมาตรฐาน แต่ไม่มีเบราว์เซอร์ที่ทำให้มันถูกต้อง:

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

คุณควรเปิดบั๊กสำหรับเบราว์เซอร์ที่คุณชื่นชอบสำหรับปัญหานี้หรือลงคะแนนให้:


2
สำหรับเร็กคอร์ดมีข้อผิดพลาด Firefox อื่นโดยเฉพาะสำหรับฟังก์ชั่นพื้นฐาน bookmarklet (มีโอกาสน้อยที่จะจมลงในการสนทนา): bugzilla.mozilla.org/show_bug.cgi?id=1478037
djpohly

หากต้องการบันทึกการคลิกอื่น ๆ ข้อผิดพลาด 1478037 ที่ระบุโดย @djpohly ในความคิดเห็นด้านบนเป็นเรื่องเกี่ยวกับการอนุญาตให้ bookmarklets ทำงานตราบเท่าที่พวกเขาไม่โหลดทรัพยากรภายนอก
วาลดีเรี

1

คำตอบมากมายแนะนำสคริปต์ผู้ใช้ (เช่น TamperMonkey หรือ GreaseMonkey) แต่ฉันต้องการจำไว้ว่าบางหน้าถูกขึ้นบัญชีดำด้วยเหตุผลโดยส่วนขยายเหล่านี้ (แน่นอนว่าคุณสามารถแทนที่การขึ้นบัญชีดำได้ แต่ devs มีความปลอดภัยในใจและล็อคหน้าเหล่านี้ออก)

ตัวอย่างเช่นฉันต้องการใช้ bookmarklet เพื่อไปที่ ReviewMeta จากรายชื่อ Amazon ใด ๆ อย่างรวดเร็ว แต่ Amazon บล็อกแหล่งที่มาของสคริปต์ที่ไม่ปลอดภัย (อัปเดต: มันไม่ได้ถูกบล็อก แต่ฉันไม่มีสคริปต์บนมันเป็นความอัปยศ) ส่วนขยายสคริปต์ผู้ใช้จะถูกขึ้นบัญชีดำในเว็บไซต์การธนาคารและเว็บไซต์ช็อปปิ้งตามค่าเริ่มต้นเพื่อป้องกันไม่ให้มีการติดตั้ง / ใช้สคริปต์ผู้ใช้ที่เป็นอันตราย

(PS นี่ไม่ใช่คำตอบต่อ se แต่ฉันคิดว่ามันจะมีประโยชน์ที่จะเก็บไว้ในใจก่อนที่จะได้รับในมือของผู้ใช้เพียงเพื่อค้นหาหน้าขึ้นบัญชีดำและลังเลจากการขึ้นบัญชีดำมัน)


0

ฉันได้สร้าง "แก้ไขปัญหา" สำหรับปัญหานี้โดยใช้ Greaseemonkey userscript (ใน Firefox) ตอนนี้คุณสามารถมี bookmarklet ใน CSP และเว็บไซต์ https: // ทั้งหมดรวมถึง bookmarklet ของคุณในไฟล์ไลบรารีที่ดีและแก้ไขได้ง่ายแทนที่จะถูกบีบอัดทีละรายการลงในบุ๊กมาร์ก

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


-1

หากคุณต้องการที่จะทำงาน bookmarklets ของคุณบนเว็บไซต์ CSP ที่เปิดใช้งานใน Firefox คุณสามารถใช้สไตล์ชีต CSS, ดูฉันคำตอบใน StackOverflow

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.