Confundido sobre el contenido de javascript cargado remotamente

Vale… sigo en mi búsqueda para que mi servidor de anuncios se muestre en Discourse. Me he topado con este misterio que no logro resolver. Usando la función de edición de temas, he añadido mi solicitud de script tanto a </body> como a ‘footer’.

Si se añade al ‘footer’ (o ‘después del encabezado’), el código falla. Aunque en el modo de inspección el texto codificado parece correcto. Véase a continuación:

El texto “Where is this?” aparece, pero nada más.

Sin embargo, la misma solicitud de script (abajo), añadida a </body>, funciona. ¿Por qué?

<script language="Javascript" src="https://adserver.kitmaker.net/index.php?section=serve&action=1">

He intentado añadir esto al campo de datos de los Anuncios de la Casa y, de nuevo, el texto forma parte de los datos codificados en la página, pero no hay nada.

creatives\"::{\"Leaderboard Ad\":\"<script language=\"Javascript\" src=\"https://adserver.kitmaker.net/index.php?section=serve&action=1\">\"}},\"

Tampoco parezco poder hacer que mis anuncios de Adsense funcionen por sí solos aún, pero quizás el problema está de su lado y simplemente aún no han escaneado el sitio para ver qué mostrar. Es extraño que esté tardando tanto, sin embargo.

Gracias por cualquier ayuda.

Jim

Esperemos que un desarrollador vea esto. :slight_smile:

¿Podría pedirle a un moderador que mueva esto a la categoría de soporte o a la que mejor encaje? Lo dejé sin categorizar.

Gracias. Y disculpen que sea tan insistente con esto, pero me acerco a la fecha límite de implementación y necesito resolver este problema con urgencia.

Bien, noté que el registro de CSP indicaba que el script de Google Ads estaba siendo bloqueado, así que agregué

https://pagead2.googlesyndication.com

a la lista de script-src de CSP y, a continuación, mis anuncios de Google AdSense comenzaron a aparecer (me sorprendió un poco que aún haya que hacer esto incluso con el plugin de AdSense instalado). Sin embargo, lo que noté es que, con mis anuncios propios configurados al 100% (de modo que solo se llama a mi script), no recibo NINGUNA notificación en CSP de que haya un problema. Esto me deja de nuevo confundido. El código de los anuncios propios está en el HTML (codificado) y aparece como se muestra arriba en la vista de inspección del navegador.

¿Hay algo que esté bloqueando la salida sin activar una advertencia de CSP?

La salida utiliza document.write para crear el espacio publicitario. Supongo que esa es la causa. La salida se ve así:

Jaja… si pongo la salida del script aquí en texto, se generaba sin problemas. ¡Doh!

Encontré esta publicación con un problema similar, pero esta persona lo resolvió por su cuenta y claramente domina mejor JavaScript que yo.

Al igual que él, estoy dispuesto a pagarle a alguien para que me ayude con esto.

Gracias,
Jim

1 me gusta

Así que… todo esto está relacionado con CSP (asumo), ya que el sitio está configurado con ‘unsafe-inline’ y estoy intentando cargar el script de mi servidor de anuncios mediante una URL con variables. Lo sé… qué salvajismo el mío.

¿Alguien? ¿Hay una solución sencilla para esto o debería simplemente rendirme?

La solución adecuada es no usar inline y reescribirla para conectar con los outlets de plantillas existentes de EmberJS. Si buscas una solución rápida, puedes desactivar la CSP en la configuración del sitio mientras trabajas en los cambios para tu solución de anuncios personalizada. Ten en cuenta que esto podría exponerte a ataques XSS.

También puedes considerar agregar tu servidor a un fork del adplugin, como se hizo en estos PR: AdButler support by communiteq · Pull Request #80 · discourse/discourse-adplugin · GitHub o Carbon Ads Integration by barreeeiroo · Pull Request #73 · discourse/discourse-adplugin · GitHub o incluso Add CodeFund Advertising option by coderberry · Pull Request #65 · discourse/discourse-adplugin · GitHub

4 Me gusta

También, ¿dónde se declara la Política de Seguridad de Contenidos? No veo ninguna etiqueta meta para ello. ¿Se trata simplemente de los ajustes predeterminados de HTML 5 asumidos por cada navegador?

Consulta Mitigar ataques XSS con la Política de Seguridad de Contenidos

2 Me gusta

Gracias, Falco. En lugar de desactivar toda la protección, ¿existe alguna forma de incluir en la lista blanca cadenas de datos solo para la URL del servidor de anuncios y permitir el paso de esas variables? O… ¿simplemente desactivar el requisito de ‘unsafe-inline’ de datos?

Por desgracia, no veo esa opción detallada en el artículo que enlazaste.

Gracias de nuevo.

Bueno, supongo que debo estar desesperado, porque intenté desactivar por completo la CSP…

Y aun así, el anuncio no se muestra en la sección principal del sitio, solo en el pie de página, donde está instalado en el tema dentro de </body>. Me di cuenta de que hay un envoltorio <noscript> alrededor de la sección central, mientras que el del pie de página está fuera del cierre de </noscript>, ¿quizás por eso?

Lo verifiqué en Firefox y ahora mi consola no muestra advertencias de CSP. No estoy seguro de por qué nunca las vi en Chrome desde el principio.

Discourse es una aplicación de una sola página (SPA) y todo el marcado de la página se genera del lado del cliente mediante nuestra aplicación EmberJS.

El uso de manipulación directa del DOM, como document.write, entra en conflicto directo con todo el sistema y tiene muy pocas posibilidades de “funcionar sin problemas”.

Recomendaría intentar adaptar tu sistema de anuncios para utilizar nuestro sistema de Anuncios internos en el plugin oficial de anuncios. Podrías tener un solo anuncio en el inventario de anuncios internos y usar el ganchos de cambio de página para contactar al servidor de anuncios y reemplazar el anuncio con la respuesta. ¿O quizás tu sistema de anuncios puede escribir directamente en el inventario de anuncios internos a través de la API?

2 Me gusta

Gracias por la ayuda, Falco. Es un poco aterrador, pero el código de este servidor de anuncios se escribió antes de que se creara el término API, así que… sí, probablemente me convendría escribir un sistema de servidor de anuncios completamente nuevo desde cero. Simplemente no tengo tiempo para eso ahora mismo, ya que estoy desplegando este nuevo foro y más de 6 nuevos sitios de contenido.

Voy a probar algunas alternativas al uso de document.write y veré si eso puede funcionar.

Saludos,
Jim

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.