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.

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.


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

Etiqueta de «No Disponible» en la imagen de productos en Prestashop 1.7 plantilla Classic.

Prestashop 1.7 está cambiando mucho. Poco tienen que ver el 1.7 que salió (a todas luces casi una beta) con el 1.7.6 de ahora. Aún así, y por todos los cambios, nosotros estamos configurando en los clientes la plantilla Classic que viene con Prestashop (y es la que están renovando).

En esta plantilla, en estos momentos, no se puede poner fácilmente un cartel de «No Disponible» en los productos que están fuera de stock (en la descripción si, pero no en la imagen). Parece que están haciendo avances en personalizar las «banderas» (flags) que podemos poner al listado de productos, pero todavía no se puede. Así que toca personalizar código y os enseñamos cómo (nosotros siempre creamos tema hijo, así que estas modificaciones son más fáciles).

Cómo poner la etiqueta de No Disponible en los productos de Prestashop.

Tenemos dos sitios en los que poner la personalización. Uno para que aparezca en el producto individual (al abrirlo) y otro en los listados (en las miniaturas de portada, categorías etc).

Etiqueta de No Disponible dentro del producto individual.

Para que salga la etiqueta «No Disponible» en la imagen del producto al abrir el producto, tenemos que editar el fichero product.tpl en la ruta /httpdocs/themes/nombredetutema/templates/catalog/produc.tpl 
Si tienes un tema hijo, crea esos directorios y copia el fichero del padre aquí. Así puedes editar sin problemas.

Tenemos que añadir lo siguiente:

{if $product->quantity == 0 AND $quantity == 0}
    <li class="product-flag rojo">
        {l s="NOT AVAILABLE" d="Shop.Theme.Catalog"}
    
    {/if}

Justo después de class=»product-flags» y antes de {foreach from=$product.flags item=flag}

Con esto, comprobará la cantidad antes de poner el resto de «carteles» y, si es cero, pondrá la de sin stock.

Etiqueta de No Disponible dentro de los listados de productos.

Para que aparezca el cartel de No Disponible en la foto miniatura de los listados de productos como en la portada o en las categorías, tenemos que hacer la misma modificación en otro fichero.

En este caso la ruta es : /httpdocs/themes/tutema/templates/catalog/_partials/miniatures/product.tpl

La modificación de código es la misma que en el caso anterior y la posición la misma (antes que empiece a cargar el resto de carteles).

Con esto ya tendréis el cartel que necesitabais en todas las vistas de productos (si falta alguna lo añadiremos aquí).

Cookies que usa WooCommerce.

Seguimos con nuestra serie de artículos sobre cookies en los CMS o plugins más conocidos. En este caso toca WooCommerce, el plugin más usado en WordPress para crear tiendas online.

Afortunadamente WooCommerce (al contrario que los servicios de Google) si que tiene información detallada sobre sus cookies que podéis ver aquí.
Os los resumimos.

Cookies de WooCommerce en el Front-End de la web (portada).

Nota: no se almacena información personal en estas cookies.

  • woocommerce_cart_hash : Coookie que ayuda a detectar y guardar cambios en el carrito. Sesión.
  • woocommerce_items_in_cart: Coookie que ayuda a detectar y guardar cambios en el carrito. Sesión.
  • woocommerce_recently_viewed : Para que funcione el widget de «visto recientemente». Sesión.
  • store_notice[notice id]: Para que los usuarios puedan descartar el aviso de tienda. Sesión.
  • wp_woocommerce_session_: Añade un código único a cada cliente para poder identificar su carrito en la base de datos. Persistente. Duración: 2 días.

Cookies de WooCommerce en el Back-End de la web (administración).

Estas son las cookies que WooCommerce activa en la sección del back-end accesible por /wp-admin

  • woocommerce_snooze_suggestions__[suggestion] : Permite descartar notificaciones del marketplace. Persistente. Duración: 2 días.
  • woocommerce_dismissed_suggestions__[context]: Cuenta las veces que se han descartado las notificaciones del marketplace. Persistente. Duración: 1 mes.
  • tk_ai: Guarda un ID aleatorio generado en el backend para estadísticas. Sesión.