Kā tikt galā ar komentāru spamu bez Akismet palīdzības?

Pēc tam, kad biju spēris šo drosmīgo soli un nomainījis sava bloga tēmu, man komentāros sāka gāzties iekšā spama jūra.

Un nekādi nevarēju saprast, kas nav tā kā vajag, jo it kā visu esmu salicis savās vietās, bet spameri tik plosās. Nācās pat aktivizēt Akismet spraudni, ko visi tik ļoti slavē.

Tad es sāku šķetināt pēc pavediena un atcerējos vienu mazu viltību, ko aizguvu no Laacz pieredzes un ieviesu arī savā blogā. Pēc šīs nelielās viltības es varēju droši slēgt ārā Akismet, jo toreiz šis spraudnis par spamu uzskatīja norālus ierakstus.

Iespējams, ka vēl kādam tas varētu noderēt. Mēģināšu uz pirkstiem parādīt, kā tad īsti darbojas šī viltība.

Ideja ir gaužām vienkārša. Izmantojot JavaScript burvību mēs nomainām NEīsto komentāru pievienošanas adresi uz īsto.

Izskatās tas šādi.

1. Izveidojam jaunu lapu savā blogā, kurā vajag aprakstīt to kāpēc cilvēks šeit ir nonācis. Iedomājies situāciju, kad kāds kuram ir atslēgts JavaScript atbalsts, mēģina pievienot komentāru. Tā vietā, lai pievienotos komentārs, viņš tiek aizmests uz citu lapu. Šajā lapā vajag populārzinātniski izskaidrot to kāpēc viņš tur nokļuva. Es rupji nokopēju no Laacz šo tekstu un tur ieliku. Man šī adrese ir pods.lv/spam/.

2. Ejam uz sava WordPress tēmas mapi un meklējam par komentāriem atbildīgo failu.

Ja nekas tuvākajā laikā nemainīsies, tad tas ir /themes/temas_nosaukums/comments.php fails.

3. Veram to vaļā un meklējam šādu rindiņu.

<form action="<?php echo get_option('siteurl'); ?>/wp-comments-post.php" method="post" id="commentform">
Šo daļu aizstājam ar šo.
<form action="<?php echo get_option('siteurl'); ?>/spam/" method="post" id="commentform">

Tagad mēs būsim ieguvuši to efektu, ka visi komentāri tiks sūtīti uz augstākminēto adresi /spam/, kurā būs populārzinātniski izskaidrots iemesls. Ja nu gadījumā atrodas kāds indivīds, kurš ir atslēdzis JavaScript atbalstu.

4. Lai normāli lietotāji varētu pievienot komentārus, mums ir nepieciešams nodrošināt komentāru formu ar patieso komentāru pievienošanas formu.

Tāpēc te mums nāk talkā JavaScript funkcija, kas nomaina formā ierakstīto neīsto adresi pret īsto.

<script type="text/javascript">
document.getElementById('commentform').action = "<?php echo get_option('siteurl'); ?>/wp-comments-post.php";
</script>

Nu un, lai ievērotu visas pieklājības normas un piekoptu labo programmēšanas toni, pievienosim brīdinājumu par šo sistēmu.

Tāpēc uzreiz zem JavaScript izvietosim lūk šādu paziņojumu:

<noscript>
<p><strong class="postdate">Lai izmantotu komentēšanas iespēju, pārlūkā jābūt ieslēgtam JavaScript atbalstam!</strong>. Kaut kā taču ir jāmēģina cīnīties ar komentāru piedrazotājiem.</p>
</noscript>

Tas parādīsies tikai tiem lietotājiem, kas ir atslēguši JavaScript atbalstu.

Un viss kods kopā izskatās šādi:

<form action="<?php echo get_option('siteurl'); ?>/spam/" method="post" id="commentform">
<script type="text/javascript">
document.getElementById('commentform').action = "<?php echo get_option('siteurl'); ?>/wp-comments-post.php";
</script>
<noscript>
<p><strong class="postdate">Lai izmantotu komentēšanas iespēju, pārlūkā jābūt ieslēgtam JavaScript atbalstam!</strong>. Kaut kā taču ir jāmēģina cīnīties ar komentāru piedrazotājiem.</p>
</noscript>

Pēc šīs darbības vēl paies noteikts laiks, kamēr meklētāji noindeksēs jauno /spam/ adresi, tāpēc efekts var arī nebūt tūlītējs. Savukārt, ja tas ir jauns blogs, kas tikko ir parādījies, tad man ir pārliecība, ka tas nostrādās uz 90%.

Jābrīdina uzreiz, ka spams samazināsies par visiem 90% vai vairāk, bet pilnībā neatbrīvos no ļaunajiem botiem, jo ir arī dažs labs, kas tiek cauri arī šai sistēmai.

20 thoughts on “Kā tikt galā ar komentāru spamu bez Akismet palīdzības?

  1. 4e4en

    Vajadzēja arī pārsaukt to wp-comments-post.php, jo daudzi spameri sūta SPAMu pa taisno uz to failu, nevis ķeksē ārā no html.

    Atbildēt
  2. CooLynX Raksta autors

    ramuuns, atliek tikai nosūtīt uz šo te komentāru, ko savulaik man laacz pateica.

    Kopš uzliku šo te sistēmu vairs gandrīz neviens spameris nav neko komentējis. Pirms tam stundā kādi 10 gab. vismaz kaut ko iespļāva.

    Ja tā ir jau gadiem ilgi dzīvojusi sistēma, tad jāiet nākamais ceļš un jāmaina noklusētais nosaukums uz citu. Ja tas vairs nestrādā, tad jāievieš neliels PHP skripts ar random fīčām. Pēc tam var vēl šo to ieviest. Pats pēdējais, ko darīt ir captcha.

    Atbildēt
  3. Anonīms

    Vadzi, bet ja jau JavaScript šim risinājumam ir tāpat nepieciešams, tad kādēļ neizmantot daudz vienkāršāko metodi ar obligāto checkbox ieķeksēšanu?

    Atbildēt
  4. CooLynX Raksta autors

    Anonymous, tas ir nākamais solis, kad nestrādā visas normālās sistēmas “bez lietotāja” iesaistes. Šeit ir runa par aizsardzību, kas neprasa lietotāja iejaukšanos, lai apstiprinātu, ka viņš ir dzīva būtne.

    Protams, ja visi standarta veidi nestrādā, tad ir jāķeras pie lietotāju piesaistes. Man personīgi nepatīk ķeksēt checkboxus un ievadīt captchas, bet, ja nekas cits nedarbojas, tad nekas neatliek…

    Atbildēt
  5. narkomanC

    nais. neatceros, kas ieminējās blogos, bet lieliska fiška bija arī ieviest formai papildus hidden lauku ar kādu defualt vērtību vai tukšu (ar css paslēpt, lai parastie lietotaaji neredz). Bots aizpildīs tos laukus ar kādiem linkiem vai vēl ko. Tev postā paliek pārbaudīt vai palikusi default vērtība.
    Es vienā no savām formām (ne wordpresam gan) biju ielicis trīs laukus (bišķ pārspīlēju) un saliku tur vērtības + tos input laukus nosaucu botiem labvēlīgākus: name, url, homepage, email. Tad tik čekoju postu. Palasīju laacz komentāros tajā rakstā, tad problēma laikam sanāktu pie WP update tur chakareeties.
    bet varētu…
    salikt fake inputus: divus redzamus un divus atvērtus, tad uzlikt JS , kas samaina formas apstiprināšanas lapu uz step2.php, kur atkal php pārbauda visus inputus, tad Jquery nosūta $.post uz step3.php, kur atkal nočeko visus inputus un atsūta atbildi. Tad ja viss oke, viss vajazīgais tiek sūtīts caur ajaxu uz wp-comments.php kā posts. uhh. Un katram trešajam lai izmet kapču : ))

    Atbildēt
  6. CooLynX Raksta autors

    narkomanC, tie ir jau sarežģītāki risinājumi un prasa nedaudz programmēšanu servera pusē, kas būtu kāds no nākamajiem soļiem, ja šie elementārie vairs nestrādā. 🙂

    Atbildēt
  7. narkomanC

    es jau jokā 😉 sākot no “bet varētu..”. līdz tam kā variants man patika. sāku domāt, ka varbūt tas bija endija blogā.

    Atbildēt
  8. black

    Iesaku vienkāršu, bet ģeniālu veidu:

    1) pārsauc e-pasta lauku uz ‘elektroniskaisPasts’.
    2) pie komentāra saglabāšanas ieliec pārbaudi – ja ‘elektroniskaisPasts’ ir aizpildīts, tad laukā obligāti jābūt ievadītam e-pastam (@ zīme, domeins, utt.). Ja tas nav e-pasts, vienkārši izdrukā lūgumu – lūdzu aizpildiet e-pasta lauku.

    Boti parasti darbojas, mēģinot aizpildīt formu laukus ar random vērtībām (+pievienojot URL uz spama lapām). Bots, protams, mēģināt aizpildīt arī lauku ‘elektroniskaisPasts’, taču nezinās, ka tajā obligāti jāieraksta e-pasts. Sistēma darbojas vienkārši brīnišķīgi – pēdējo 4 mēnešu laikā neesmu saņēmis nevienu spamu.

    Atbildēt
  9. CooLynX Raksta autors

    black, arī šis veids ir pārāk sarežģīts + tiek pieprasīts no lietotāja e-pasts, kuram pie tam vēl ir jābūt korekti aizpildītam. Es neprasu e-pasta adreses lauku aizpildīt, jo man nav nepieciešami lasītāju e-pasti.

    Attiecīgi tas, pirmkārt, ir sarežģītāks variants, jo pieprasa papildus programmēšanu servera pusē, otrkārt, pieprasa epasta adreses ievadīšanu no lietotāja un, treškārt, apgrūtinās dzīvi, ja gribēsi izmantot spraudņus, kas saistīti ar komentāru formu un epasta lauku. Vismaz man tā šķiet.

    Bet es piekrītu, ka citos risinājumos tas varētu būt labāks variants jau kā nākamais solis.

    Atbildēt
  10. black

    Nē, tas neprasa obligāti no lietotāja e-pastu. Lauku var atļaut atstāt arī tukšu (boti vienmēr aizpilda VISUS laukus), taču ja kaut kas ir ievadīts, tad gan ir jāatbilst e-pastam.

    Par programmēšanas nepieciešamību piekrītu, taču arī Tevis ieteiktajā variantā tas ir (minimāli, skat. “get_option(‘siteurl’);”) nepieciešams. Domāju, ka lauka pārbaudi var pielikt arī cilvēks bez 10 gadu pieredzes programmēšanā.

    Par spraudņiem – tas tiešām varētu apgrūtināt dzīvi.

    Atbildēt
  11. Atbalss: Atbrīvojamies no komentāru spama | IT sviestapika

  12. Atbalss: hacked by n2n | IT sviestapika

Ieraksti komentāru

Tava e-pasta adrese netiks publicēta. Obligātie lauki ir atzīmēti kā *