Vulnerabilidad en Prestashop ante el malware XsamXadoo Bot. Solución.

Si tienes una tienda de Prestashop, puede que hayas recibido un aviso que tu tienda puede ser vulnerable ante ataques del malware XsamXadoo Bot. Mediante este malware, los atacantes pueden tomar el control de tu página web y acceder a tus datos.

No es un ataque exclusivo a Prestashop, muchos gestores y módulos de diferentes entornos, creados en php con la herramienta PHPUnit, pueden ser vulnerables. Pero se ha detectado en Prestashop estos días.

En qué consiste la vulnerabilidad.

Este ataque hace uso de un fallo de seguridad conocido desde el 2017: el CVE-2017-9841. Este fallo está presente en la herramienta PHPUnit, un framework que usan los desarrolladores de php para probar y crear sus módulos y aplicaciones. La vulnerabilidad se ha corregido en las versiones de PHPUnit 7.5.19 y 8.5.1 , pero las anteriores la tienen. Y muchos creadores de Prestashop usan esta herramienta.

Lo curioso es que los desarrolladores dejan ciertas carpetas y ficheros de este framework cuando pasan los módulos a producción. Carpetas y ficheros que ya no son necesarios porque son sólo para desarrollo, pero que dejan ahí. Y estos son los que contienen el fallo de seguridad.

Cómo solucionarlo.

Lo que tienes que hacer es borrar todos los directorios phpunit tanto de Prestashop como de los módulos (recuerda, la carpeta es sólo para desarrollo).

  • Si gestionas un servidor Linux puedes hacer esto con este comando:

    find . -type d -name "phpunit" -exec rm -rf {} \;

    En caso de no tener acceso a terminal, puedes buscar los directorios por FTP. Para ello.
  • En la carpeta de Prestashop busca la carpeta Vendor. Dentro de esa carpeta mira si tiene otra que se llame phpunit. Si es así, borra esa carpeta.
  • Ahora entra en cada carpeta de módulo. Busca la carpeta Vendor dentro de cada módulo. Si esta carpeta incluye el directorio phpunit borralo.

Cómo saber si te han infectado.

Es difícil porque pueden dejar diferentes rastros. Pero
1) mira en tu servidor a ver si tienes los siguientes ficheros:

File namemd5
XsamXadoo_Bot.php0890e346482060a1c7d2ee33c2ee0415 or b2abcadb37fdf9fb666f10c18a9d30ee
XsamXadoo_deface.php05fb708c3820d41c95e34f0a243b395e
0x666.phpedec4c4185ac2bdb239cdf6e970652e3
f.php45245b40556d339d498aa0570a919845

2) Entrar en Parámetros Avanzados->Información para ver si al final te indica si se ha modificado algún fichero del core de Prestashop. Esto también puede dar una pista de si te han infectado.

Para más información lee el anuncio de Prestashop y el artículo más detallado al respecto.

Documento legales necesarios para una página Web (no tienda) en España.

Una pregunta recurrente en los clientes que están haciendo o quieren hacer una página web es qué documentos o apartados legales hay que incluir.
Hoy os lo detallamos para las páginas que no sean tiendas (otro día haremos un vídeo para esas).

Nota: no somos expertos en derecho, esta información la proporcionamos por nuestro trabajo del día a día y nuestro contacto con las asesorías de los clientes y las últimas noticias del sector.

Leyes aplicables.

Primero resumimos las leyes que se aplican en este ámbito:

  • LSSI (ley digital de servicios de la sociedad de la información y de comercio electrónico). 34/2002 del 11 de Julio.
  • LOPD: 15/1999 del 13 de Diciembre.
  • RGPD (ley de protección de datos Europea) del 25 de mayo del 2018.
  • LOPDGDD (Ley orgánica de protección de datos y garantía de derechos digitales). 3/2018 del 5 de Diciembre.
  • Directiva 2002, revisada en 2009 136/CE del 25 de Nov del 2009 («Ley de Cookies»). Pronto será renovada por la e-Privacy.

Qué documentos son necesarios en una página web empresarial en España.

Los documentos necesarios son los siguientes:

  • Aviso Legal. Que básicamente informa sobre quién está «detrás» de la página web, cómo contactarles etc. Sólo es obligatorio en páginas con fin económico (no en personales). Viene dado por la LSSI que indica que debe haber un «mínimo de información permanente y gratuita».
    En este enlace hablamos sobre el Aviso Legal en profundidad (y en el vídeo debajo de estas líneas).
  • Política de Privacidad. Indica qué datos se recogen del usuario y qué se hace con ellos. En el vídeo lo explicamos en profundidad, pero básicamente debe incluir 3 partes:
    – La página de Política de Privacidad con toda la información relevante detallada.
    – La primera capa informativa que debe resumir lo anterior y se debe incluir en formularios, correos, boletines, facturas, y cualquier tipo de comunicación con el cliente.
    – La casilla de aceptación del tratamiento de datos con enlace a la Política de Privacidad. Casilla que debe marcar explícitamente el usuario y de lo cual debemos guardar registro por si tenemos una inspección.
  • Política de Cookies. Las cookies son pequeños ficheros de información que se guardan en el ordenador para recordar datos del usuario. Por lo tanto tienen datos privados y deben someterse a la política anterior. Con la nueva RGPD el usuario debe tener:
    – Un listad de las cookies, tipo, duración, si son propias o de terceros, para que sirven, si son esenciales o no etc.
    – Una manera de aceptarlas explícitamente o rechazarlas.
    – Una manera de cambiar lo anterior cuando quiera.
    Por lo tanto el «antiguo» aviso de cookies no vale. Ya no sólo tenemos que avisar, ahora el usuario tiene que ser capaz de aceptar las que quiere, y poder cambiar dicha configuración.

    Porque según las nuevas indicaciones europeas las cookies deben estar prohibidas excepto que :

    – El usuario las haya aceptado explícitamente.
    – Sean anónimas, por ejemplo las de analítica web.
    – Aquellas necesarias para la comunicación electrónica o para mantener la conexión
    – Si son necesarias para la experiencia del usuario (como las del carrito).
    – En servicios requeridos por el usuario.
    – Las necesarias por seguridad o para evitar fraude.

Os explicamos todo en detalle en el siguiente vídeo.

Mostrar características en el listado de productos de Prestashop (miniaturas en la portada, categorías…)

Varios clientes con tiendas Prestashop nos han medido esto alguna vez. Tenían productos con características y querían que las miniaturas mostraran alguna de esa información. Se puede hacer comprando un plugin (y si tienes la opción lo recomiendo), pero puede que el cliente no pueda o no quiera.

Obviamente, para hacerlo manualmente hay que retocar un poco el código de la plantilla. Hoy os mostramos cómo.
Nota: este código puede variar o incluso hacerse obsoleto en las diferentes versiones según actualicen Prestashop. A día de hoy (fecha del artículo) está probado y funcionando en 1.7 y muy similar en 1.6 (con variantes).

Cómo mostrar características en el listado de productos de Prestashop.

Lo primero que os recomendamos es que activéis, mientras desarrolláis el código, este truco para ver las variables que se pasan al mostrar los productos. A nosotros nos sirvió de mucho. Eso si, no lo hagáis en producción porque es latoso para los clientes.

Lo siguiente es que vais a modificar (en 1.7) el siguiente fichero de la plantilla (nos estamos basando en la classic, si usas otra puede variar): tutema/templates/catalog/_partials/miniatures/product.tpl.
Recomendamos como siempre hacer copia de seguridad y trabajar sobre un tema hijo.

El código hay que ponerlo detrás de :

{hook h='displayProductPriceBlock' product=$product type='weight'}
</div>
{/if}
{/block}

Y antes de :

{block name='product_reviews'}
{hook h='displayProductListReviews' product=$product}
{/block}
</div>

Es el siguiente código (que luego procedemos a explicar):

    {if isset($product.features)}
<div class="features" style="font-size:0.7rem;text-align:center;">
 {if $product.id_category_default == 22 or $product.id_category_default == 23 or $product.id_category_default == 24 or $product.id_category_default == 25}
             {foreach from=$product.features item=feature}
			
			   {if $feature.id_feature == 9 or $feature.id_feature == 8 or $feature.id_feature == 7}
                                    {$feature.name}: {$feature.value}
			   {/if}
			  {/foreach}
   {/if}
   {/if}
		   

En esta variante estamos haciendo que si hay características (features) y si el producto pertenece a ciertas categorías ($product.id_category_default == XX) muestre cada cada producto sólo las características determinadas $feature.id_feature == 9 ).
Con {$feature.name}: {$feature.value} muestra cada nombre de característica y cada valor.
Os hemos preferido dejar esto que es tan específico (mira si el producto es de una categoría y sólo selecciona unas características) para que vosotros lo modifiquéis a gusto.
Obviamente tenéis que identificar los IDs de las características y de las categorías en vuestra tienda.

Podéis hacer tantas variantes de esto como queráis. Por ejemplo en alguna tienda nosotros comprobamos la categoría padre de la categoría del producto con $category.id_parent == XX.

Con esto ya debería estar. No hace falta modificar módulos porque en 1.7 llaman a este fichero.

Así de «fácil». Obviamente no lo es tanto y luego tendréis que luchar en vuestra tienda por mostrarlo como queréis (cada caso es diferente).

Cookies que usa Prestashop.

Seguimos con la serie de artículos listando las cookies que usan los gestores de contenidos o servicios más famosos. Hoy vamos a centrarnos en el CMS para tiendas online Prestashop.

Hay muy poca información sobre las cookies que usa por defecto Prestashop. Por no decir nada. Pero hemos podido recopilar lo siguiente (actualizaremos si hay cambios o nueva información).

Nota: vamos a hablar sólo de las cookies de Prestashop. Cada tienda online tienen servicios y plugins diferentes que añaden sus cookies propies. En este caso, es todavía más importante que realicéis una auditoría de cookies a vuestra web para añadir todas las que estáis usando.

Cookies que usa Prestashop.

  • PrestaShop-XXXXXXXXXX– Cookie que usa Prestashop para guardar información y mantener abierta la sesión del usuario. Permite guardar información como moneda, idioma, identificador del cliente…
    Necesaria. De sesión: duración 1 mes.
  • sf_redirect : Cookie que se usa para redirigir la sesión del usuarios. No necesaria. De sesión.

La primera cookie se crea con este código y, como véis, está cifrada en md5 y depende de cada tienda.

$this->_name = 'PrestaShop-'.md5(($this->_standalone ? '' : _PS_VERSION_).$name.$this->_domain);

Insertar un quiz (cuestionario) en Contact Form 7 para reducir el spam en WordPress.

Ya os hemos hablado en otros artículos sobre las maneras de evitar el spam en el plugin de formularios de WordPress Contact Form 7. Y que realmente la mejor manera es insertar varias protecciones por capas para llegar a un equilibrio entre seguridad y usabilidad, intentado evitar lo máximo posible los falsos positivos.

Uno de los métodos que mencionamos en el artículo eran los Quizzes, o cuestionario. Son una manera de intentar identificar a los robots con preguntas que sólo un humano sabría razonar. La idea es que se interprete algo leído, y se saque una conclusión como respuesta. Evidentemente con la IA la eficacia de esto se reduciría…pero muchos de los robots spam no son todavía tan listos.

Preguntas típicas (puedes inventarte las tuyas propias serían):

  • ¿De qué color es la leche?
  • ¿Cuantas patas tiene un caballo?
  • ¿Cuál es la capital de Francia?
  • ¿Que se obtiene al mezclar amarillo y rojo?
  • ¿Cuánto es doscientos menos tres?


Lo bueno del Quiz es que es fácil de implementar, poco intrusivo (menos que el reCaptcha V2) y bastante eficaz.
Por ejemplo una buena combinación sería un Honeypot y un Quiz en el formulario.

Recordad que este método del quiz se puede implementar fácilmente en cualquier formulario con un poco de programación básica.

Cómo insertar un quiz en un formulario de Contact Form 7.

Sólo tienes que insertar el siguiente código en tu formulario:


En el formato

También puedes poner varias preguntas para que las cambie aleatoriamente:

[quiz preguntasaleatorias "¿De qué color es la leche?|Blanca"
                        "¿Cual es la capital de Francia?|Paris"
                        "¿Cuánto es cien menos uno?|99"]

Si pinchais en el botón cuestionario en el formulario os sale un generador que os permite generar el código de manera sencilla

Más información aquí.

Borrar pedidos y clientes en Prestashop con módulos gratuitos.

Lo primero es decir que borrar pedidos de una tienda en curso no es muy lícito (y puede que ilegal). Pero en ocasiones tenemos que borrar pedidos de prueba, o pedidos de una página en desarrollo. Así que puede ser necesario.
Hoy os dejamos dos maneras.

Módulo PrestaShop Cleaner en Prestashop 1.7

Desde hace tiempo existe este módulo útil y peligroso, gratuito y desarrollado por Prestashop: Prestashop Cleaner. Seguramente por el peligro que tienen, si no se sabe manejar, Prestashop lo ha escondido un poco más.

Para instalarlo ve a Módulos->Catálogo de Módulos y busca Cleaner.

Ahí verás que puedes instalar este módulo. Si no aquí tienes un sitio de descarga: https://github.com/PrestaShop/pscleaner
El módulo consta de 4 secciones, y una advertencia clara:
Ten mucho cuidado con esta herramienta – ¡No hay vuelta atrás!
Nota: haced una copia de la base de datos antes de usarla para tener un plan B.

  • Catálogo. Si le das a Si aquí, y a Eliminar Catálogo, borras completamente el catálogo de Prestashop. Cuidado, sólo para poner empezar una tienda desde cero.
  • Pedidos y Clientes: Si le das a Si y a Eliminar Pedidos y Clientes, borraras todos los clientes y pedidos de tu tienda (y pones los ID de cada uno otra vez a cero). Pero sin poder seleccionar, es todo o nada. Así que sólo para una limpieza total.
  • Limitaciones de la Integridad Funcional. Nos comprueba si todo va ok. Si tienes errores raros es algo que puedes probar. Aunque es muy básico.
  • Limpieza de la base de datos. Una limpieza que no viene mal hacer de vez en cuando. Aunque es básica.

Como veis el problema de este módulo es que es muy «drástico». Se carga todo o nada. Pero gratis, rápido y hace lo que promete.

Módulo Delete Orders Free de MyPresta.

Hemos hablado bastante de los módulos de MyPresta, porque crea muchos módulos gratuitos y útiles. Hoy os dejamos uno más: Delete Orders Free.
Una vez instalado este módulo, verás que en la secciónd e Pedidos de Prestashop aparece una nueva sección llamada Borrar Pedidos. Ahí podréis poner el ID del pedido en cuestión (lo tienes que coger antes de la sección pedidos) y darle a borrar.

Obviamente lo bueno de este módulo es que te deja borrar pedidos específicos.

Esperamos que con estos módulos podáis controlar los datos y pedidos que borráis de vuestras tiendas en Prestashop.

Truco en CSS: cambia texto por otro o ocúltalo.

Si tenéis conocimientos de CSS, seguramente ya sabréis cómo ocultar texto por CSS. Tenéis tres maneras:

  1. Le ponéis a la etiqueta (id o clase) del texto un display:none
  2. Cambiais el color de texto a color:transparent o al color del fondo.
  3. Ponéis el texto con visibility: hidden.

La primera hace desaparecer lo que quites, tanto para robots como para usuarios. El problema es que muchas veces hace desaparecer también el contenedor (por ejemplo la altura de línea). Y puede que no queramos, por ejemplo para el truco de hoy.
Las dos últimas tienen un problema desde el punto de vista SEO. Los usuarios van a leerlo, porque básicamente lo estamos ocultando. Pero los robots ignorarán el CSS y puede ver ese texto. Así que puede indexarse y hasta aparecer en Google. Así que tienes que tener cuidado con qué texto ocultas y debe ser una última solución cuando todo lo demás falla (es mejor quitarlo por programación).

Cómo cambiar texto por otro en CSS.

Usando el proceso anterior, os vamos a mostrar un truco para cambiar un texto de una web por otro.
Por las razones anteriores de los robots, este debe ser el último recurso. Antes debemos probar cambiarlo por código (Html5, php, Javascript, Php…). Pero si no podemos, siempre nos queda esta opción.

Para cambiar texto por CSS:

  • primero tenemos que poner un visibility:hidden en el id del texto que queremos cambiar. Esto hará que no se vea, pero la «línea» seguirá ahí. Por ejemplo:

    #loquequieroocultar {visibility: hidden;}
  • Después cogemos la etiqueta y añadimos un ::after, incluyendo contenido en ese after y forzando que tenga visibilidad (porque si no coge la del padre). Además, lo moveremos a la izquierda con un float:left y podemos colocar con el padding-left adecuado. Por ejemplo

    #loquequieroocultar { content:"Frase que quiero poner";
    visibility: hidden;
    float:left;}

Con esto veréis que tenemos el text que necesitábamos.
En este vídeo enseñamos el proceso.

Prestashop 1.7. Slider no se muestra en la versión móvil

Hoy tenemos una de esas tonterías que te pueden hacer perder el tiempo dando vueltas y vueltas, cuando la solución es muy sencilla. Esperemos que ahorre tiempo a la gente.

Si has desarrollado una web en Prestashop 1.7, y usado el tema Classic, el que viene por defecto (aunque sea con un tema hijo) te habrás dado cuenta de un problema con el slider (carrusel para poner fotos en la portada) en la versión móvil.
En PC funciona, no da ningún problema, pero en móvil no aparece.
Y no hay opción visible en la configuración para activar esto.

Solución.

La solución es sencilla. Aunque no obvia, y no entiendo por qué no lo han metido en la configuración.

Tienes que pinchar en el desplegable al lado del módulo (donde se activa y desactiva) y veréis que hay una opción llamada «Enable Mobile«.
Hay que pinchar ahí.

Es decir, el módulo viene desactivado por defecto en móviles y hay que activarlo.


Elegir donde no queremos que aparezcan anuncios automáticos de Google Adsense.

Desde que escribimos el artículo sobre cómo excluir páginas de nuestros anuncios automáticos de Google Adsense, nos han hecho muchas veces la misma pregunta. ¿Cómo puedo escoger dónde no quiero que aparezcan los anuncios?

Porque los anuncios automáticos están muy bien, pero en muchas ocasiones son muy intrusivos, se ponen automáticamente en posiciones que no queremos. Y esto, en la portada de nuestra web da MUY mala imagen.
Por eso muchos de los lectores querían eliminar la portada del sitio, pero con el truco anterior no es posible (porque eliminas la raíz).

Hasta ahora no era posible, la única solución era eliminar los anuncios «In page» que se incrustaban en la página. Pero claro, perdemos posibles medios de ingreso.
Pero Google parece que se ha espabilado (ha tardado) y acabamos de ver que han puesto (recientemente) una herramienta para solucionarlo.

Cómo eliminar posiciones donde no queremos que aparezcan los anuncios automáticos de Adsense.

Entrando en Adsense, en los anuncios que queremos modificar, ahora Google muestra una previsualización de nuestra web, con los sitios que detecta tiene para poner anuncios.

Ahora podemos eliminar estas posiciones que son molestas, y así no nos aparecen las que más intrusivas sean.
En la previsualización podemos poner cualquier url, por si los anuncios molestos aparecen en otro sitio que no es la portada.

Algo muy útil para los que usamos Adsense, lo hemos probado y funciona.
Espero que os resuelva la duda a todos los que teníais el mismo problema.

Aquí os dejamos el vídeo explicándolo.

Plugins para detectar Adblockers en WordPress.

Muchos usuarios tienen puesto, en sus navegadores, extensiones que bloquean los anuncios. Los famosos adblockers. Es muy entendible en un Internet donde intentan venderte de todo y, a veces, uno acaba cansado de tanto «bombardeo» de productos.

PERO, está la versión de nosotros, los creadores de contenido. Dedicamos tiempo y recursos a escribir contenido que, en muchas ocasiones es útil para los lectores. Y los anuncios son nuestra parte principal de financiación en este área.

¿Cómo compaginar, entonces, el crear contenido, y recibir una compensación por ello, con el derecho de los usuarios a poder ver dicho contenido sin anuncios?

Ante este problema de los adblockers los creadores tienen varias opciones y todas pasan por detectar si el usuario está usando un adblocker.
Una vez detectado, el creador puede optar por:

  • No ofrecer contenido a los usuarios que tengan estas extensiones (redirigiendo al usuario o ocultando el contenido).
  • Avisar al usuario constantemente que está bloqueando una fuente de ingresos para el creador.
  • Mi preferida: avisar una vez al usuario que está bloqueando una fuente de ingresos importante y pedirle que ponga la página en la lista blanca del adblocker.
    Recomiendo algo como «Hemos detectado que estás usando un adblocker. Los anuncios son un importante método de ingresos para nosotros. Te solicitamos que nos apoyes y añadas en la lista blanca de tu adblocker. Intentamos ser lo menos intrusivos posibles.«

Hoy os enseñamos cómo podéis detectar adblockers en WordPress.
En otros artículos os enseñaremos varios scripts para cualquier sistema, y maneras en las que se hace esta detección.

Nota: alguno de los plugins hace tiempo que no se actualizan. Puede ser poruqe funcionen, o porque el proyecto esté abandonado. Probadlos, y si no siempre podéis usar los scripts del siguiente artículo.

Plugins para detectar adblockers en WordPress.

Os dejamos algunos de los más usados.

  • Ad Blocker Notify Lite. Uno de los plugins más usados. Tiene muchas opciones de presentación (efectos, CSS etc), varias opciones para evitar que le detecten los adblockers y cuando sale el mensaje. Muy completo y actualizado. El que usamos nosotros en clientes.
  • Simple Adblock Notice: Sólo te permite mostrar un mensaje, personalizar cuándo quieres mostrarlo y si quieres que puedan ver la web o no.
  • Adblocking Detector: Te permite usar shortcodes que puedes usar para mostrar mensajes en vez del artículo, o como widgets para mostrar avisos. Hace un año que no se actualiza (en el momento que escribimos el artículo).
  • Adback Solution to adblock. Muestra un mensaje en el pie para desactivar el adblocker y también te permite mostrar un anuncio ahí. Lleva poco tiempo