• 0
Enderlook

Politicas de Seguridad de Google Chrome Extensions

Question

Estoy intentando desarrollar una extensión para el navegador chrome con la API en Javascript de Mercado Libre.

Actualmente, en el manifiesto de la extensión de chrome tengo los siguientes permisos (tuve que añadir un  content_security_policy para incluir el script de Mercado Libre):

"permissions" : [
		"declarativeContent",
		"activeTab",
		"https://*/*",
		"http://*/*",
		"tabs",
		"downloads"
	],
"content_security_policy": "script-src 'self' https://a248.e.akamai.net/secure.mlstatic.com/org-img/sdk/mercadolibre-1.0.4.js; object-src 'self'"

En el script background de la extensión utilizo el siguiente comando para abrir una nueva pestaña al realizar click en mi extensión:

chrome.browserAction.onClicked.addListener(function(activeTab) {
    chrome.tabs.create({ url: chrome.extension.getURL("index.html") });
});

Actualmente mi index.html es bastante sencillo, solo posee lo siguiente:

<html>
	<head>
		<script src="https://a248.e.akamai.net/secure.mlstatic.com/org-img/sdk/mercadolibre-1.0.4.js"></script>
		<script src="index.js"></script>
	</head>
    <body>		
    </body>
</html>

Tuve que utilizar el https que encontré en Github porque Chrome me ignoraba el content_security_policy si usaba http.

El problema se presenta cuando intento realizar algo con la API de Mercado Libre.

window.addEventListener('DOMContentLoaded', function() {
	MELI.init({
		client_id: // Mi id de applicación,
		xauth_protocol: "https://",
		xauth_domain: "secure.mlstatic.com",
		xd_url: "/org-img/sdk/xd-1.0.4.html"
	});
	console.log("A");
	MELI.login(function() {
		console.log("B")
		MELI.get("/users/me", {}, function(data) {
			console.log("C");
			console.log("Hola " + data[2].first_name);
		});
	});
})

El output es solo "A". El popup para iniciar sesión Mercado Libre se abre, pero el callback "B" y "C" no se ejecutan...

No tengo ni idea cuál es el problema, no hay error.

Lo que es extraño, es que si voy a la consola desde el Chrome en mi extensión y ejecuto la parte:

MELI.get("/users/me", {}, function(data) {
			console.log("C");
			console.log("Hola " + data[2].first_name);
		});

Recibo el siguiente error:

Refused to load the script 'https://api.mercadolibre.com/users/me?callback=jsonp1&_MELI_SDK_RANDOM=0.5311328045693158' because it violates the following Content Security Policy directive: "script-src 'self' https://a248.e.akamai.net/secure.mlstatic.com/org-img/sdk/mercadolibre-1.0.4.js". Note that 'script-src-elem' was not explicitly set, so 'script-src' is used as a fallback.

¿Alguien me podría explicar como resolver ese error? Se supone que en mi manifiesto ya había declarado esa política de seguridad, por lo que no entiendo que debo de hacer. Soy nuevo tanto en la API de Mercado Libre como en Google Chrome Extensions, tal vez me haya olvidado de hacer algo básico antes.

Gracias.

Share this post


Link to post
Share on other sites

2 answers to this question

Recommended Posts

  • 0
1 hour ago, ARTE-TECNOLOGIA said:

Guarda el archivo js, en tu propia extension


mercadolibre-1.0.4.js

El problema persiste. No entiendo que es lo que pasa.

Lo que me acabo de dar cuenta de una cosa. Cuando ejecuto manualmente desde la consola:

MELI.get("/users/me", {}, function(data) {
			console.log("C");
			console.log("Hola " + data[2].first_name);
		});

Creo que el error que se genera es porque la API de Mercado Libre intenta inyectar un script a la página y el navegador lo bloquea por razones de seguridad. ¿Como evito eso?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...