WordPress spam hozzászólások tömeges törlése

WordPress 5 perc olvasás

Egy régóta futó webhelyen a spam hozzászólások tízezres nagyságrendben is felgyűlhetnek. A WordPress admin felülete néhány ezer sorig kényelmes, efölött viszont elakad. Az alábbi lépésekkel a cPanel tárhelyen futó webhelyek hozzászólás-tábláit biztonságosan kitakaríthatja, és beállíthatja, hogy a spam ne gyűljön újra.

A parancsokat 2026 októberében egy aWh cPanel tesztfiókon, WordPress 7.1-gyel próbáltuk ki.

1. Mennyi a spam?

Az admin felületen a Hozzászólások oldal fülei (Függőben, Jóváhagyott, Szemét, Lomtár) mutatják a darabszámot. Ugyanezt phpMyAdminban (cPanel Adatbázisok csoport) az SQL fülön is lekérdezheti:

SELECT comment_approved, COUNT(*) AS db
FROM 1vL7334_comments
GROUP BY comment_approved;

A táblaelőtag (a példában 1vL7334_) a WP Toolkittel telepített webhelyeken véletlenszerű. A sajátját a wp db prefix parancs írja ki, vagy a phpMyAdmin bal oldali listájában látja. A comment_approved oszlop értékei:

Érték Jelentése Törölhető tömegesen?
spam Spamként megjelölt (a Szemét fül) Igen
trash Lomtárba helyezett Igen
0 Moderálásra vár (Függőben) Nem, valódi hozzászólások is lehetnek köztük
1 Jóváhagyott, megjelenik az oldalon Nem
post-trashed A bejegyzésével együtt került a lomtárba Csak a bejegyzéssel együtt

2. Mentés

SQL-lel törölt sort nem lehet visszavonni, ezért előbb mentse el az adatbázist, a phpMyAdmin Exportálás fülén vagy mysqldump paranccsal. A parancs jelszó nélküli használatát a WP-CLI használatáról szóló cikk írja le.

cd ~/public_html
P=$(wp db prefix); DB=$(wp config get DB_NAME)
mysqldump --single-transaction --no-tablespaces "$DB" > ~/hozzaszolasok-elott-$(date +%F).sql
tail -1 ~/hozzaszolasok-elott-$(date +%F).sql

Az utolsó sor legyen -- Dump completed on ….

3. Válassza ki a törlés módját

Kevés spam: az admin felület

A Hozzászólások › Szemét fülön a Spam-tároló ürítése gomb néhány ezer sorig elég. Teszteink szerint 1000 sort 8 másodperc alatt törölt, 20 000 sornál viszont négy perc után sem végzett, és addig csak nagyjából a harmadukat törölte. Ha a gomb időtúllépéssel leáll, ne kattintgasson rá újra, hanem használja a lenti módszerek egyikét.

Sok spam, SSH-val: WP-CLI

Az SSH-hozzáféréssel rendelkező csomagokon (cP Premium, cP Pro, cP Pro 100) a WP-CLI a legkényelmesebb, mert a hozzászólásokkal együtt a hozzájuk tartozó metaadatokat is törli. Kis adagokban, szünetekkel dolgozzon:

cd ~/public_html
while IDS=$(wp comment list --status=spam --number=500 --format=ids) && [ -n "$IDS" ]; do
  wp comment delete $IDS --force | tail -1
  sleep 1
done

A --force kihagyja a lomtárat. A lomtárban lévő hozzászólásokhoz ugyanezt a ciklust futtassa --status=trash kapcsolóval.

Nagyon sok spam: SQL adagokban

Több tízezer sornál az SQL a leggyorsabb: teszteinken 13 000 sor három másodperc alatt törlődött.

while :; do
  N=$(mysql "$DB" -N -e "DELETE FROM ${P}comments WHERE comment_approved = 'spam' LIMIT 5000; SELECT ROW_COUNT();")
  echo "törölve: $N"
  [ "$N" -eq 0 ] && break
  sleep 1
done

SSH nélkül a phpMyAdmin SQL fülén futtassa ezt, a saját táblaelőtagjával, és ismételje, amíg az érintett sorok száma nullára nem csökken:

DELETE FROM 1vL7334_comments WHERE comment_approved = 'spam' LIMIT 5000;

Az SQL-es törlés a commentmeta táblát nem érinti, ezért utána jöhet a következő lépés.

4. Az árva metaadatok törlése

A spamszűrő bővítmények minden hozzászóláshoz adatokat írnak a commentmeta táblába. Ha a hozzászólásokat SQL-lel törölte, ezek a sorok ott maradnak. Tesztünkben 13 000 törölt hozzászólás után 13 000 árva sor maradt. A számuk:

SELECT COUNT(*)
FROM 1vL7334_commentmeta cm
LEFT JOIN 1vL7334_comments c ON c.comment_ID = cm.comment_id
WHERE c.comment_ID IS NULL;

A törlésük:

DELETE cm FROM 1vL7334_commentmeta cm
LEFT JOIN 1vL7334_comments c ON c.comment_ID = cm.comment_id
WHERE c.comment_ID IS NULL;

Ha WP-CLI-vel törölt, ez a lépés kimaradhat, de az ellenőrző lekérdezést érdemes lefuttatni.

5. A szűrőn átjutott spam

Azok a spamek, amelyeket a szűrő nem ismert fel, jóváhagyott hozzászólásként látszanak az oldalon. A hivatkozott webcím vagy a feladó szerint találhatja meg őket. Először mindig SELECT-tel nézze meg, mit találna a lekérdezés:

SELECT comment_ID, comment_author, comment_author_url, comment_content
FROM 1vL7334_comments
WHERE comment_approved = '1'
  AND comment_author_url LIKE '%gyanus-oldal.hu%';

Az ismétlődő feladókat így keresheti meg:

SELECT comment_author_email, comment_author_IP, COUNT(*) AS db
FROM 1vL7334_comments
GROUP BY comment_author_email, comment_author_IP
HAVING db > 5
ORDER BY db DESC;

Ha a találatok valóban spamek, az admin felületen jelölje meg őket, vagy futtassa a lekérdezést DELETE FROM 1vL7334_comments WHERE … formában. Az utóbbi után végezze el a 4. és a 6. lépést.

6. A hozzászólásszámok javítása

A WordPress a bejegyzésenkénti hozzászólásszámot külön tárolja. A spam és a lomtár törlése nem változtatja meg, csak a jóváhagyott hozzászólások SQL-es törlése. Ha az oldalon rossz szám látszik:

wp comment recount $(wp post list --post_type=any --format=ids)

A wp comment recount parancsnak meg kell adni a bejegyzések azonosítóit, azok nélkül csak a használatát írja ki. SSH nélkül a phpMyAdminban:

UPDATE 1vL7334_posts p
SET p.comment_count = (
  SELECT COUNT(*) FROM 1vL7334_comments c
  WHERE c.comment_post_ID = p.ID AND c.comment_approved = '1'
)
WHERE p.post_type IN ('post', 'page');

7. A táblák tömörítése

A törölt sorok helye a táblákon belül felszabadul, de a fájlok a lemezen nem lesznek kisebbek, amíg a táblákat újra nem építi:

OPTIMIZE TABLE 1vL7334_comments, 1vL7334_commentmeta;

A Table does not support optimize, doing recreate + analyze instead megjegyzés normális, a lényeg az utolsó sor OK állapota. A művelet egy időre zárolja a táblákat, ezért kis forgalmú időszakban futtassa. Ha a webhely objektum-gyorsítótárat (például Redist) használ, ürítse is ki.

Hogyan előzze meg?

A Beállítások › Beszélgetés oldalon:

  • Mielőtt egy hozzászólás megjelenik: kapcsolja be A hozzászólást kézzel kell engedélyezni vagy legalább a hozzászólás írójának kell lennie korábban elfogadott hozzászólásának beállítást. Így a robotok hozzászólásai nem jelennek meg az oldalon.
  • Hozzászólások további beállításai: a Hozzászólási lehetőség automatikus lezárása régi bejegyzéseknél megszünteti a spamcélpontok nagy részét. A Hozzászólás írásához regisztráció és bejelentkezés szükséges még szigorúbb.
  • Hozzászólás moderálása: a visszatérő kifejezéseket és címeket a Nem engedélyezett hozzászólás kulcsok mezőbe veheti fel.
  • Ha nincs szüksége hozzászólásokra: kapcsolja ki az Engedélyezzük az embereknek, hogy hozzászóljanak az új bejegyzésekhez. beállítást. Ez csak az új bejegyzésekre vonatkozik, a régiekét külön kell lezárni.

A kézi moderálás a spamet nem állítja meg, csak elrejti, ezért érdemes spamszűrő bővítményt is használni. A WordPresszel érkező Akismet API-kulcsot kér, és a hozzászólások adatait külső szolgáltatásnak küldi elemzésre, ezt az adatkezelési tájékoztatóban fel kell tüntetni. A robotok kérései akkor is terhelik a tárhelyet, ha a hozzászólásuk nem jelenik meg: ha egy címről tömegesen érkeznek, tiltsa ki az IP-címet.

Az adatbázis további takarításáról a felduzzadt wp_postmeta tábláról és a wp_options automatikusan betöltött adatairól szóló cikkek, valamint a WordPress adatbázis-optimalizálásról szóló blogcikkünk szól.

Vissza: WordPress leírások (43)