SeguridadEnMiPC Detector de Anuncios y Malware

Plugin Banner

SeguridadEnMiPC Detector de Anuncios y Malware

by juanluisfernz

Download
Description

Ocho herramientas independientes en un solo panel. Todas las secciones se abren desplegadas: al entrar ves el estado completo del sitio sin tener que ir pulsando.

1. Detección de publicidad intrusiva. Analiza las páginas y entradas de tu propio sitio según los Better Ads Standards de la Coalition for Better Ads: pop-ups que tapan el contenido, banners fijos, vídeo con sonido automático y densidad excesiva de anuncios. Puede analizar desde el servidor o dentro del navegador, que ve también lo que se inyecta con JavaScript.

2. Escáner de código malicioso. Recorre el contenido de la base de datos, el tema, los plugins y el núcleo buscando firmas de inyección conocidas: eval(base64_decode(...)), iframes ocultos, escritura de archivos desde parámetros de la petición y patrones similares. Los hallazgos en archivos se te informan con la ruta, la línea y el fragmento, para que los revises tú con una copia de seguridad delante: el plugin no los toca. Lo que aparece en el contenido de entradas y páginas sí se puede limpiar con un clic, porque vive en la base de datos y se puede deshacer.

3. Monitor de integridad. Guarda una línea base de los archivos y avisa cuando cambian. Contrasta el núcleo con los checksums oficiales de WordPress.org, así que distingue un archivo legítimo modificado de uno que no debería estar ahí. En pantalla solo salen los cambios realmente peligrosos, explicados; el resto va por email.

4. Auditoría de configuración. Repasa los ajustes que más se dejan mal puestos: depuración activa en producción, editor de temas y plugins abierto, versión de PHP sin soporte, permisos de wp-config.php, prefijo de base de datos por defecto, actualizaciones pendientes, readme.html delatando la versión y archivos PHP donde no debería haberlos. No hace ninguna petición de red.

5. Auditoría de usuarios. Busca nombres de acceso previsibles (admin, root, test), exceso de cuentas con permisos totales y perfiles que firman los artículos con el mismo nombre con el que entran al escritorio.

6. Archivos sensibles expuestos. Pide a tu propio sitio, como lo haría cualquier visitante, una lista de rutas que no deberían responder: copias de wp-config.php, .env, .git/config, registros de errores, listados de carpetas, enumeración de autores y la lista de usuarios por la API REST.

7. Cabeceras de seguridad HTTP. Lee las cabeceras que tu servidor envía con la portada (HSTS, protección contra enmarcado, nosniff, Referrer-Policy, CSP) y te dice cuáles faltan, para qué sirve cada una y dónde se configuran.

8. Alertas por email, protección y automatización. Escaneo programado con aviso solo cuando hay algo que mirar, filtrado de la salida en tiempo real (WordPress 6.9 o superior), limpieza programada del contenido de entradas y páginas, y webhook opcional.

Además, un resumen en la cabecera reúne la puntuación de cada bloque y una lista de lo más urgente, con un botón que ejecuta todas las revisiones seguidas.

Qué toca y qué no

El plugin no modifica, no borra y no renombra ningún archivo de tu sitio, ni el núcleo, ni el tema, ni los plugins, ni nada que haya en wp-content. Tampoco crea archivos: los ajustes, el registro y la línea base de integridad se guardan con la API de opciones de WordPress.

Lo único que puede cambiar es el contenido de tus entradas y páginas, que está en la base de datos: ahí sí retira las inyecciones confirmadas, guarda antes el original y el botón “Deshacer” lo repone. Esa limpieza es manual salvo que actives la programada en los ajustes, que viene desactivada.

Cuando el hallazgo está en un archivo, el plugin te da la ruta, la línea y el fragmento sospechoso, y lo deja ahí. Arreglar un archivo infectado es una decisión que conviene tomar con una copia de seguridad hecha y, si es del núcleo o de un plugin, casi siempre la respuesta correcta es reinstalarlo en vez de editarlo.

External services

Este plugin no envía datos a ningún servicio del autor ni descarga definiciones de ningún servidor. Las firmas de malware son las que vienen en el código.

Hace conexiones salientes en tres casos, todos bajo tu control:

  1. Tu propio sitio. Para analizar la publicidad, para sondear archivos expuestos y para leer las cabeceras HTTP, el plugin pide URLs públicas de tu propia web (las mismas que ve cualquier visitante) y examina la respuesta. No sale de tu dominio y solo ocurre cuando pulsas el botón correspondiente.

  2. API de checksums de WordPress.org. El monitor de integridad usa la función get_core_checksums() del propio WordPress para obtener las sumas de verificación oficiales de tu versión del núcleo. Solo se envían la versión de WordPress y el idioma. Es un servicio de WordPress.org: términos y privacidad.

  3. Webhook de alertas (opcional, desactivado de fábrica). Si escribes una URL de webhook en los ajustes, el plugin enviará a esa dirección un mensaje de texto con el título de la alerta y la lista de rutas afectadas. La dirección la eliges tú (Slack, Discord, Telegram o la que quieras) y el envío solo ocurre si el campo está relleno. Si lo dejas vacío, no se envía nada a ninguna parte. Consulta los términos y la política de privacidad del servicio que uses como destino.

  1. Sube la carpeta del plugin a /wp-content/plugins/ o instálalo desde el buscador de plugins de WordPress.
  2. Actívalo en el menú “Plugins”.
  3. Ve a “Anuncios y Malware” en el menú lateral.
  4. Pulsa “Ejecutar todas las revisiones” en el resumen: en un minuto tendrás el cuadro completo.
  5. Pulsa “Crear/actualizar línea base” en el monitor de integridad para tener referencia con la que comparar.
¿Modifica mis archivos?

No. Nunca. El plugin lee tus archivos para analizarlos y no escribe en ninguno. Lo único que puede modificar es el contenido de entradas y páginas, que está en la base de datos, y solo si tú lo pides o activas la limpieza programada (desactivada de fábrica); además se puede deshacer.

La puntuación no llega a 100. ¿Es grave?

No necesariamente. Algunas comprobaciones son recomendaciones, no fallos: una Content-Security-Policy, por ejemplo, es difícil de configurar bien y su ausencia no te deja vendido. Mira primero la lista “Lo más urgente” del resumen, que solo recoge lo que está realmente mal.

¿Por qué me avisa de archivos que yo mismo he cambiado?

El monitor de integridad informa de todo cambio respecto a la línea base. Los que reconoce como rutinarios (actualizaciones de plugins, ediciones del tema) van al email y no a la pantalla. Si un patrón te genera ruido, añádelo a las exclusiones en los ajustes.

Ha encontrado algo en un archivo. ¿Qué hago?

Haz primero una copia de seguridad. Si es del núcleo de WordPress, reinstálalo desde Escritorio Actualizaciones “Reinstalar ahora”: es más rápido y más seguro que editar nada. Si es de un plugin o un tema, reinstálalo desde su origen. Si es un archivo que no debería existir (por ejemplo un .php dentro de uploads), bórralo tú desde el gestor de archivos de tu alojamiento o por FTP.

La sonda de archivos expuestos marca algo que yo sé que está protegido

La sonda pide las rutas desde el servidor, y algunos alojamientos responden distinto a las peticiones internas que a las de fuera. Si tienes dudas, abre esa ruta en el navegador en una ventana de incógnito: eso es lo que ve un visitante.

¿Funciona con multisitio?

Se puede activar por sitio. El monitor de integridad recorre la instalación completa, así que en multisitio verás archivos de todos los sitios.

5.1.1

  • Corregidos los textos del panel que todavía decían que el escáner «elimina lo confirmado». Desde la 5.1.0 los hallazgos en archivos solo se informan, y ahora la pantalla lo dice así.

5.1.0

  • El plugin ya no toca ningún archivo del sitio. Se retiran la limpieza de archivos y la cuarentena: los hallazgos en archivos se informan con ruta, línea y fragmento para que los revises tú. Es lo que pide el directorio de WordPress.org, y también lo más prudente: reparar un archivo infectado es una decisión que conviene tomar con una copia de seguridad delante.
  • La limpieza automática y el botón «Deshacer» quedan limitados al contenido de entradas y páginas, que vive en la base de datos y sí es reversible.
  • La firma de «script externo» ya no lleva una lista de servicios de terceros dentro del plugin: ahora se avisa de cualquier script que no venga de tu propio dominio, y en los ajustes puedes declarar los dominios que uses a propósito.
  • Documentación revisada para que describa exactamente lo que hace el código.

5.0.9

  • La cuarentena ya no borra el archivo: le cambia el nombre en su propia carpeta añadiendo una extensión inerte, así el servidor deja de ejecutarlo y nada se pierde. «Deshacer» le devuelve su nombre.
  • El plugin ya no vuelca copias de seguridad sobre el disco. La copia del original de un archivo limpiado se conserva en la base de datos como registro, pero nunca se reescribe sobre la instalación.
  • La protección en tiempo real ya no abre un búfer de salida propio: usa el búfer de plantilla que WordPress abre desde la versión 6.9. Con versiones anteriores la opción no actúa y los ajustes lo indican.
  • Reescrita la firma de «script externo» para que la lista de servicios habituales sea una lista blanca explícita y no un bloque dentro de la expresión regular.

5.0.8

  • Actualizado «Tested up to» a 7.1, la versión actual de WordPress. Con un valor anterior el plugin no aparece en las búsquedas del directorio.
  • Quitada la cabecera «Domain Path»: apuntaba a una carpeta «languages» que el plugin no incluye.

5.0.7

  • Quitada la cabecera «Plugin URI», que apuntaba a la misma dirección que «Author URI». WordPress.org exige que sean distintas y rechazaba el archivo al subirlo.

5.0.6

  • Quitada la línea «Tested up to» de la cabecera del archivo principal. Ese dato solo se declara en el readme: tenerlo en los dos sitios puede hacer que se muestre una compatibilidad distinta de la que se mantiene.

5.0.5

  • Corregido: el campo «Email de destino» se llamaba «email» y era de tipo «email», así que Chrome lo tomaba por el usuario de un formulario de acceso y lo rellenaba solo con el nombre de la cuenta de WordPress. Quien guardara los ajustes sin mirar se quedaba sin dirección de aviso. Ahora el campo tiene nombre propio, no es de tipo «email» (Chrome ignora ahí el autocompletado desactivado) y conserva el teclado de correo en el móvil. La dirección se sigue validando en el servidor.

5.0.4

  • La publicidad que el propio editor ha declarado como suya se muestra como «INFO» y no como «AVISO»: informa de lo que hay, no alerta de nada.
  • Quitada de las exclusiones de fábrica una carpeta que se excluía por su nombre genérico («central»). Las que quedan apuntan a librerías de terceros concretas, y ahora cada una lleva escrito para qué está: una exclusión amplia es justo donde interesa esconder código.

5.0.3

  • Corregido (importante): había un identificador de editor de AdSense escrito en el propio código como «publicidad autorizada». En cualquier otra instalación eso marcaba los anuncios legítimos del usuario como «publicidad de terceros no autorizada» con la severidad máxima, y daba por buena la de ese identificador ajeno. Ahora cada usuario declara los suyos en los ajustes y de fábrica la lista está vacía.
  • Con la lista vacía el detector ya no acusa a nadie: informa de las redes que encuentra e invita a declarar los identificadores propios.
  • El escaneo profundo del navegador ya distingue la publicidad propia de la ajena, como hacía el del servidor. Antes cualquier red salía como aviso leve, así que una red inyectada por JavaScript —el caso típico de infección— se quedaba sin marcar como grave.
  • El escaneo del navegador también mira los scripts que una capa de consentimiento deja en espera (data-cmplz-src, data-src), que antes se le escapaban.

5.0.2

  • Corregido (importante): el plugin se señalaba a sí mismo como infectado. Su código contiene, escritas como expresiones regulares, las mismas firmas que busca, y el monitor de integridad las interpretaba como una infección real. Ahora los archivos del propio plugin quedan fuera del análisis.
  • Corregido: la cuarentena automática no llevaba la protección que sí llevaba la manual, así que podía retirar archivos del propio plugin y dejarlo inservible.

5.0.1

  • Corregido: el resumen de seguridad ya se actualiza al instante al pulsar «Ejecutar todas las revisiones» (puntuaciones por bloque y lista de lo más urgente). Antes había que recargar la página.

5.0.0

  • Nuevo: resumen de seguridad con puntuación por bloques, lista de lo más urgente y botón para ejecutar todas las revisiones seguidas.
  • Nuevo: auditoría de configuración (12 comprobaciones locales, sin peticiones de red).
  • Nuevo: auditoría de usuarios (nombres previsibles, exceso de administradores, nombre público igual al de acceso).
  • Nuevo: sonda de archivos sensibles expuestos, que interroga al propio sitio por 10 rutas de riesgo.
  • Nuevo: revisión de cabeceras de seguridad HTTP con explicación de cada una.
  • Todas las secciones son ahora desplegables y se abren desplegadas, con un botón para plegarlas o desplegarlas de golpe.
  • Cada comprobación explica qué se ha visto y qué conviene hacer, en lenguaje llano.

4.0.0

  • Todas las funciones son libres y están operativas: no hay claves de licencia ni funcionalidad bloqueada.
  • Eliminada la descarga remota de firmas. Las definiciones son las integradas en el plugin, ampliables con el filtro sempc_dam_code_signatures.
  • Las copias de seguridad y la línea base de integridad pasan a la base de datos. El plugin ya no escribe archivos en disco.
  • CSS y JavaScript del panel encolados como archivos externos con wp_enqueue_style y wp_enqueue_script.
  • Todas las rutas se resuelven a través de funciones propias que normalizan con wp_normalize_path(). Corrige un fallo por el que en servidores con separadores de ruta mixtos se mostraban rutas absolutas en lugar de relativas.
  • La carpeta de plugins se deriva de __FILE__ en vez de leer la constante WP_PLUGIN_DIR.
  • Validación por campo de los resultados de escaneo recibidos por AJAX.
  • El buffer de salida de la protección en tiempo real se cierra siempre en shutdown.
  • Prefijo unificado sempc_dam_ en clases, funciones, opciones, acciones AJAX, nonces y cron.
Back to top