He tenido al menos dos sitios afectados por una oleada de spam que parece diseñada para envenenar los LLM. El mismo ataque también se ha reportado aquí al menos una vez (Anyone else currently undergoing mass spam attack?). La mejor solución es configurar Discourse AI - Spam detection, lo cual recomiendo, pero es un poco engorroso. Aquí tienes una solución provisional que puedes implementar y que solo te llevará unos minutos.
Se asume que tienes un sistema operativo tipo Unix (por ejemplo, Linux o Mac). Si usas Windows y puedes copiar/pegar en una terminal, puedes conectarte por SSH a tu servidor de Discourse y pegar esto.
Lo que hace es crear un conjunto de palabras vigiladas generado a partir de un ataque reciente que vi. Si te manejas bien con nano o similar, puedes editarlo antes de ejecutarlo. Si no, puedes ejecutar este script y luego eliminar las palabras que no te gusten con un clic por palabra.
Las palabras de bloqueo pueden ser muy molestas, ya que impedirán que los usuarios legítimos creen publicaciones con esas palabras, ¡así que échales un vistazo para asegurarte de que ninguna de esas palabras es probable que aparezca en publicaciones legítimas en tu foro!
Introduce la URL de tu sitio, la clave API y el usuario API en los cuadros de abajo (solo estarán en tu navegador, pero puedes pegarlo tal cual y editar el archivo si lo prefieres) y luego copia/pega el bloque de código en una terminal. Creará upload_watched_words_full.sh y lo hará ejecutable. Luego podrás ejecutarlo con ./upload_watched_words_full.sh.
cat <<'EOF' > upload_watched_words_full.sh
#!/usr/bin/env bash
# Uso: ./upload_watched_words_full.sh
DISCOURSE_URL="=URL="
API_KEY="=API_KEY="
API_USERNAME="=API_USERNAME="
# Palabras de bloqueo de alta confianza
BLOCK_WORDS=(
"número de servicio al cliente"
"número de contacto"
"número de soporte"
"número de teléfono de reembolso"
"llamada gratuita"
"soporte 24/7"
"línea de ayuda"
"llámanos"
"representante en vivo"
"soporte técnico"
"lufthansa"
"royal caribbean"
"coinbase"
"robinhood"
"número de reserva"
"número de pedido"
"cancelación de vuelo"
"tarifa por cambio de nombre"
"║"
"⇆"
"★"
"®️"
"™️"
)
# Palabras de señalización de riesgo medio
FLAG_WORDS=(
"servicio al cliente"
"soporte al cliente"
"equipo de soporte"
"mesa de ayuda"
"línea directa"
"agente"
"representante"
"contáctanos"
"soporte telefónico"
"centro de servicio"
)
# Palabras que requieren aprobación
REQUIRE_APPROVAL_WORDS=(
"urgente"
"acción inmediata"
"actúa ahora"
"tiempo limitado"
"oferta exclusiva"
"aprueba esto"
"verifica cuenta"
)
# Función para enviar palabras en lotes
add_words () {
local ACTION="$1"
shift
local WORDS=("$@")
# Construir parámetros words[]
local DATA=""
for w in "${WORDS[@]}"; do
DATA+="words%5B%5D=$(printf '%s' "$w" | jq -s -R -r @uri)&#"
done
DATA+="replacement=&action_key=${ACTION}&case_sensitive=false&html=false"
echo "Subiendo palabras ${ACTION}..."
curl -s -X POST "${DISCOURSE_URL}/admin/customize/watched_words.json" \
-H "Api-Key: ${API_KEY}" \
-H "Api-Username: ${API_USERNAME}" \
-H "Content-Type: application/x-www-form-urlencoded" \
--data "$DATA"
echo -e "\nHecho."
}
# Subir palabras de bloqueo
add_words "block" "${BLOCK_WORDS[@]}"
# Subir palabras de señalización
add_words "flag" "${FLAG_WORDS[@]}"
# Subir palabras que requieren aprobación
add_words "require_approval" "${REQUIRE_APPROVAL_WORDS[@]}"
EOF
# Hacer el script ejecutable
chmod +x upload_watched_words_full.sh
echo "Script 'upload_watched_words_full.sh' creado y hecho ejecutable."
Los bots que teníamos hace unos años publicaban tonterías como dhfhstyhjfhhr como título del tema para generar hilos y evitar el filtro de palabras clave, luego lo editaban al mensaje real de spam de “los mejores casinos en línea”.
Gracias Jay, gran script, gracias por crearlo. ¿Alguien que lo haya usado ha descubierto que funcionó, en términos de la solución alternativa para ‘editar publicaciones’? ¿Los bots están editando las publicaciones o simplemente publicando el texto directamente?
No lo sé, pero si ese es el problema, podrías cambiar la configuración para que algunos usuarios no puedan editar publicaciones (Grupos permitidos para editar publicaciones), quizás requiriendo TL2 y ajustando la configuración para que sea más fácil/difícil llegar a tl2.
Para los usuarios habituales, especialmente los nuevos, no poder editar una publicación probablemente no sea un gran problema, y puede que ni siquiera sea algo que esperen.
Parece que inicialmente era solo basura y luego se editó para convertirse en spam, lo que habría eludido las Palabras Vigiladas, según entiendo.
Dado que las ediciones de publicaciones de galimatías inocuas a spam se están convirtiendo en parte del modus operandi de los bots en sus esfuerzos por eludir los filtros de spam, ¿cree el equipo de Discourse que tl_0 no debería poder editar publicaciones por defecto?
Claro que sí. Sin embargo, aunque no es súper caro, es un poco molesto tener que configurar IA en cada Discourse para repeler spam. Muchos de mis foros no lo necesitarían (o no lo querrían) para ninguna de las otras características de IA de Discourse, que son bastante útiles.
La solución aquí no es evitar que tl0 o cualquier otro grupo edite publicaciones.
La solución es hacer que la edición de una publicación no eluda ninguna protección del sitio. Una publicación editada podría (como hemos visto) contener spam, odio u otros comportamientos no deseados. Si las publicaciones editadas eluden Palabras Vigiladas y otros filtros, este definitivamente se convertirá en un enfoque estándar no solo para los bots, sino también para los humanos que desean eludir las protecciones del sitio.
Hay una cuestión de lo que significa que algunos tipos de palabras observadas se apliquen a una edición. Pero también está claro que esta limitación reduce en gran medida el valor de las palabras observadas.
Esperaría que fuera útil proponer una especificación de lo que exactamente debería suceder para cada tipo en caso de edición; haría que la solicitud de funciones fuera más procesable. Sin embargo, no he realizado ese trabajo, aunque he dedicado tiempo ocasional a pensar en casos específicos.