tag change attribute javascript security firefox mozilla content-security-policy

javascript - change - ¿La política de seguridad de contenido bloquea los marcadores?



title html (4)

A partir de 2017, la respuesta sigue siendo un "tal vez" definitivo, al igual que cuando esta respuesta se publicó originalmente en 2011. La specification dice claramente:

La política aplicada en un recurso NO DEBE interferir con el funcionamiento de las funciones de agente de usuario como complementos, extensiones o marcadores.

Y este es realmente el comportamiento que veo en Chrome 61: un bookmarklet se ejecutará en https://addons.mozilla.org/ , un sitio que tiene una política de seguridad de contenido estricta sin script-src: ''unsafe-inline'' . Sin embargo, en Firefox 56, los bookmarklets no se ejecutan en este sitio web y se informa de una infracción CSP.

Existe una discusión muy larga sobre este tema en el informe de errores de Firefox , en particular que se vincula con una discusión similar sobre la especificación W3C . Por lo tanto, a partir de ahora, no puede confiar realmente en que los bookmarklets no se vean afectados por el CSP. Siempre puedes deshabilitar el CSP por completo, pero esa es una capa de protección importante para ti.

¿Mozillas CSP bloquea para ejecutar Javascript desde un marcador por defecto?

¿Se puede configurar para hacerlo?



He creado una "solución" alternativa para este problema utilizando un script de Greasemonkey (en Firefox). Ahora puede tener bookmarklets en todos los sitios CSP y https: //, además de tenerlos en un archivo de biblioteca agradable y fácilmente editable en lugar de ser aplastado individualmente en un marcador.

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


Sí, el CSP bloquea los marcadores de Mozilla Firefox. Hay un error al respecto .

Sin embargo, puede evitar esta restricción inyectando el código JS en una hoja de estilo CSS externa, como lo hace mi bookmarklet Top News Feed :

CSS externo:

#topnewsfeed { font-family: ''(function(){/*payload*/})()''; }

Bookmarklet JS:

(function() { var a = document.createElement("link"); a.rel = "stylesheet"; a.href = "//niutech.github.io/topnewsfeed/topnewsfeed.css"; a.onload = function() { var a = b.currentStyle ? b.currentStyle.fontFamily : document.defaultView.getComputedStyle(b, null).fontFamily; eval(a.replace(/^["'']|//|["'']$/g, "")); }; document.body.appendChild(a); var b = document.createElement("div"); b.id = "topnewsfeed"; document.body.appendChild(b); })()

El bookmarklet carga un archivo CSS que contiene el código JS, agrega un elemento con el estilo de este CSS, lee el atributo de estilo del elemento y eval el código.