security google-chrome-extension bookmarklet browser-extension content-security-policy

security - Política de seguridad de contenido para extensiones y marcadores.



google-chrome-extension bookmarklet (1)

Github tiene la siguiente Política de Seguridad de Contenido :

Política de seguridad de contenido: default-src *; script-src asset-cdn.github.com www.google-analytics.com collector-cdn.github.com; object-src asset-cdn.github.com; style-src ''self'' ''unsafe-inline'' ''unsafe-eval'' asset-cdn.github.com; img-src "self" data: asset-cdn.github.com identicons.github.com www.google-analytics.com collector.githubapp.com * .githubusercontent.com * .gravatar.com * .wp.com; media-src ''ninguno''; frame-src ''self'' render.githubusercontent.com www.youtube.com player.vimeo.com checkout.paypal.com; font-src asset-cdn.github.com; connect-src ''self'' ghconduit.com:25035 live.github.com uploads.github.com s3.amazonaws.com

Podemos recortar / recuperar contenido de la web con extensiones de navegador de servicios como Evernote o Pocket.

No veo ninguna referencia a Pocket o Evernote en esta política de Github. Alguien puede explicar por qué la extensión de Pocket puede recuperar contenido de Github, mientras que la extensión de Evernote no lo es, con un error de CSP )

¿Puede la política de CSP evitar que se cargue una aplicación de bookmarklet o una aplicación de extensión de navegador como un clipper? Si es así, ¿cómo hace Pocket para poder hacer que su extensión funcione en cualquier contenido?

Tenemos este problema en nuestros marcadores / extensiones y me gustaría que funcionen tan bien como la extensión de Pocket, pero realmente no sé por dónde empezar ... gracias

Edición : como la gente solicita código en los comentarios, nuestro bookmarklet se carga con este javascript:

javascript: (function() { function loadScript(a, b) { var c = document.createElement(''script''); c.type = ''text/javascript''; c.src = a; var d = document.getElementsByTagName(''head'')[0], done = false; c.onload = c.onreadystatechange = function() { if (!done && (!this.readyState || this.readyState == ''loaded'' || this.readyState == ''complete'')) { done = true; b() } }; d.appendChild(c) } loadScript(''http://localhostsss.com:9000/assets/js/backbone/views/clipping/clippinglocal.js'', function() { s.clipping.initClipping() }) })()

Si intento lanzar este bookmarklet en una página Media, que tiene un CSP, obtengo el siguiente error.

Se negó a cargar el script '' http://localhostssss.com:9000/assets/js/backbone/views/clipping/clippinglocal.js '' porque viola la siguiente directiva de Política de seguridad de contenido: "script-src ''unsafe-eval'' '' unsafe-inline ''sobre: ​​https: // .akamaihd.net http: // .baidu.com https://bitly.com https: // .cloudfront.net https: // .facebook.com https: // . facebook.net https://getpocket.com https: // .github.com https: // .googleapis.com https://ssl.google-analytics.com https://app.greenhouse.io https: // .medium.com https://myspace.com https: // .pinterest.com https://www.readability.com https://thinkery.me https://this.cm https: // .twitter.com https://use.typekit.net https: //*.instapaper.com ''self'' ".

Alguien me puede decir cómo hacer que nuestro bookmarklet sea cargable en sitios web como Medium o Github que tienen una política de CSP.

No puedo hablar mucho sobre las extensiones del navegador todavía porque todavía no trabajé en ella y la persona no está aquí en el cajero automático. Solo sé que tenemos el mismo problema y que las extensiones de nuestro navegador son básicamente el mismo código que nuestros marcadores, excepto que está un poco adaptado para encajar en el shell de la extensión del navegador. Si solo puede responder por el caso de bookmarklet, estaré bien y aceptaré la respuesta, pero cualquier sugerencia para las extensiones del navegador también estaría bien :)


¿Puede la política de CSP evitar que se cargue una aplicación de bookmarklet o una aplicación de extensión de navegador como un clipper?

Es muy simple: la extensión o bookmarklet se bloqueará si viola el CSP.

Por lo tanto, si el CSP bloquea todas las secuencias de comandos en línea, ningún bookmarklet funcionará. Github hace eso con media-src porque, simplemente existiendo, la directiva "media-src" bloquea el script en línea de forma predeterminada. Así que ningún bookmarklet puede funcionar en Github.

(Como nota al margen, a pesar de que todos los navegadores funcionan de esta manera, esto no es lo que dicen los estándares. Los Bookmarklets deberían estar exentos del CSP, pero desafortunadamente, ningún navegador se ha molestado en permitir eso).

Ahora, en cuanto a qué extensiones funcionarán o no funcionarán, eso depende de cómo funcione la extensión en sí. Las extensiones no pueden ser directamente bloqueadas por el CSP, pero si la extensión intenta hacer algo que viola el CSP, puede fallar. Entonces, en Github, si la extensión intenta agregar un script nativo al DOM de la página, o intenta adjuntar un script externo al DOM de la página desde una ubicación no aprobada, o hacer cualquiera de las otras cosas restringidas descritas en el CSP, puede fallar. .

Entonces, ¿qué parte de la extensión de Evernote está causando un error de CSP y cómo hace Pocket un trabajo similar sin causar un error? No lo sé. Todo depende de los detalles muy específicos de cómo se escriben esas aplicaciones. Lo más probable es que sea bastante simple mirar su código e intentar resolverlo. Que yo sepa, todas las extensiones de Chrome están escritas en JavaScript y empaquetadas como un archivo zip, solo que con una extensión de archivo diferente. Creo que lo mismo se aplica a los complementos de Firefox también.