Al contrario que los sitios web tradicionales, las aplicaciones certificadas y con privilegios imponen una CSP (política de seguridad de contenido) por defecto. Esto puede provocar que parte del código existente se rompa y generar una cantidad significativa de confusión si los desarrolladores no son conscientes de que la CSP existe.
Si en el App Manifest se especifica una CSP, la CSP especificada y la CSP por defecto se mezclarán. Una CSP especificada no puede reducir las restricciones de la CSP por defecto.
El validador de Firefox Marketplace detecta violaciones del CSP durante el proceso de envío de la app. Esto puede ayudar a encontrar problemas en una fase temprana del desarrollo.
Restricciones CSP aplicables
- Los scripts remotos son baneados
-
No puedes apuntar a un
<script>
en un archivo JavaScript remoto. Esto significa que todos los archivos JS a los que referencies, tienen que estar inlcuidos en el paquete de tu app. - Los scripts inline son baneados
-
No puedes incluir srcripts inline en tu HTML. Todas las etiquetas
<script>
deben tener un atributo src=""
. No puedes usar atributos de script comoonclick=""
oonload=""
. No puedes crear etiquetas <script> dinámicamente y asignar contenido a su propiedadinnerHTML
. -
javascript:
URIs son baneadas -
URIs como
<a href="javascript:alert('foo')">
no se ejecutarán. -
eval
no está peritido -
No puedes usar la función
eval()
o el operador eval. Ambos lanzarán errores de seguridad. - La función constructor es baneada
-
No puedes usar el constructor de la función
Function()
. Uilizarla lanzará un error de seguridad. -
La ejecución dinámica de código con
setTimeout
ysetInterval
es baneada -
Tienes que pasar callable objects (i.e.: functions) a las funciones
setTimeout
ysetInterval
. Pasar cadenas no creará el temporizador y la función devolverá 0. - Los Web Workers remotos no está permitidos
- Si un Worker o SharedWorker es creado con una URL remota, se comportará como si el servidor remoto respondiera con un error 400.
- Las etiquetas Script no pueden ser creadas con URLs remotas
-
Si una etiqueta <script> es creada mediante
document.createElement()
, configurando su atributo src hacia una URL remota, esto causará que se comporte como si el servidor remoto repondiera con un error 400. - Los Plugins son baneados
-
El uso de las etiquetas
<object>
y<embed>
no está permitido. Java, Unity, Silverlight, Flash, o Shockwave no se pueden utilizar. - Los estilos remotos son baneados
-
Todas las etiquetas
<link rel="stylesheet" href="...">
deben enlazar a archivos incluidos en el paquete de tu aplicación. Las etiquetas y atributos style en linea (<style>
andstyle=""
) están permitidos, sin embargo, para aplicaciones con privilegios.
Restricciones de Aplicación Certificada
Las Aplicaciones certificadas está sujetas a restricciones adicionales.
- Los estilos inline son baneados
-
<style>
ystyle=""
son ambas baneadas.
Política por defecto
Las políticas por defecto para las aplicaciones son las siguientes:
- Privilegios CSP
-
default-src *; script-src 'self'; object-src 'none'; style-src 'self' 'unsafe-inline'
- Certificados CSP
-
default-src *; script-src 'self'; object-src 'none'; style-src 'self'