Mēģinu apčakarēt botu, kas kakā komentāros

Nu tā, ir vēl pāris mājaslapās palicies tā, ka taisīts viss uz pašbrūvēta, pašmocīta dzinēja. Tā kā nekādas ūberlietas tur nekad neesmu paredzējis, tad arī rezultātu parasti ir samērā vienkārši sasniegt—pietiek Google pameklēt kaut ko, kas varētu atbilst risinājumam. Šeku reku kafejnīcas Leningrad mājaslapā arī savu paštaisīto rezultātu mēģinu sasniegt un līdz kādam brīdim viss darbojās vienkārši lieliski, līdz lapa nekļuva populāra arī spameru botu aprindās. Tagad ir pa laikam nākas patīrīt no spama komentāru datubāzi.

Visu laiku spameru aizsardzība tikai veikta samērā elementāri—ieviešam vēl vienu formas lauku, kurā jautājam cilvēkam kaut kādu sakarīgu jautājumu, uz kuru tas spēj atbildēt. Nu un tā kā lapu apmeklē arī latviešu valodu neprotošie, tad, lai iztiktu bez pārpratumiem Google Translator vai kādā līdzīgā rīkā, izmantoju kā jautājumu parastu matemātisku uzdevumu, kuru tad tā arī noformēju:

<label for="parbaude">12+8=</label>
<input id="parbaude" name="parbaude" type="text">

Līdz noteiktam brīdim tas palīdzēja, bet tad tie kuņas, protams, atkoda, ka šitā es daru un sāka mācīties matemātiku. Tikām līdz pat reizināšanas uzdevumiem, bet spams vēl joprojām parādījās. Sarežģīt līdz kvantu fizikas cienīgiem vienādojumiem šķita neloģiski, tāpēc izdomāju šitādu variantu:

<label for="parbaude">&#49;&#50;&#43;&#56;&#61;</label>
<input id="parbaude" name="parbaude" type="text">

Kaut kad labu laiciņu atpakaļ biju jau dzirdējis par šo variantu, bet nekad to nebiju izmantojis, tāpēc domāju izmēģināt tagad, redzēs, kā palīdzēs. Patiesībā risinājums ir smieklīgi vienkāršs—aizstāju simbolus ar šo simbolu HTML numuriem. Pagaidām palīdz.

Varbūt kādam ir vēl kāds loģisks, bet programmatūriski ne pārāk smagnējs risinājums, kā varētu novērst spama masveida parādīšanos?

22 domas par “Mēģinu apčakarēt botu, kas kakā komentāros”

  1. Daudz kur izmantoju variantu ar javascript, jo boti javaskriptu nejēdz. Tas darbojas tā, ka hidden laukā tiek ar javaskriptu ielikts kaut kāds teksts, kuru tad pārbauda uz aizpildīšanu.
    Kods lapā:

    JavaScript kods:
    window.onload = function () {
    document.getElementById(‘parbaude’).value = “bot_ej_dirst”;
    }

  2. Protams, lapas kodu izvāca :D
    karoče tur ir input lauks ar sekojošiem parametriem:
    type=”hidden”, name=”parbaude”, id=”parbaude”, value=””
    Protams, arī php kods:
    if($_POST[‘parbaude’] === “bot_ej_dirst”) { …daram visas lietas… }
    else {echo “vai nu tev nav javaskripts vai arī tu esi kretīnisks bots!”}

  3. Piekrītu Koko – ar JS.
    Es to daru šādi: formas action vērtība ir norādīta kaut kāda kreisa, kur formu neviens neapstrādās, labajiem cilvēkiem JS to nomaina uz pareizo, lapas ielādes laikā.
    Tev vislabāk ar JS ielādes laikā nomainīt cipariņus, lai boti raksta vienu matemātiku, cilvēki citu.

  4. Tik pat labi var arī uztaisīt pāris span‘us ar formulas sastāvdaļām un ar CSS un float‘ošanu to visu mazliet vizuāli pārkārtot. Rezultātā botam ir viena kārtībā, bet vizuāli uz ekrāna ir pavisam cita.

    Šim variantam gna ir viena liela accessibility problēma—tas ir dikti nedraudzīgs pret skrīnrīderiem, jo tie jau tikai lasa no kreisās uz labo.

  5. Es visu laiku izmantoju M teikto variantu, līdz kādai lapai spams tik un tā parādījās. Pēc logiem sapratu, ka spamots tiek pa tiešo no browsera – attiecīgi, logos parādījās, ka no tās ip, vispirms ielādē rakstu un visus nepieciešamos css un js, pēc kā, nopostē komentāru. Šajā gadījumā palīdzēja, tas, ka lai formas action nomainītos ir jānospiež poga komentēt, kas parastiem lietotājiem arī parāda komentēšanas formu, kas defaulti tiek slēpta. Pagaidām strādā.

  6. Principā pietiek ar javaskriptu piekabināt onloadā vai onsubmitā kādu ķesku klāt pie “/wp-comments-post.php”. Piemēram, “/wp-comments-post.php?shito-gjeneree-javaskripts” un tad pie komenta postēšanas to visu pārbaudīt ar “if (!isset($_GET[‘shit-gjeneree-javaskripts’])) die();

  7. BlackHalt, es mēģināšu skatīties, kā man ar manu ūbergudro variantu pagaidām strādās, bet, tiklīdz sapratīšu, ka aplauzos, mēģināšu izurbties cauri tam džavaskriptam.
    Kaspar, es jau rakstīju, ka man ir pašbrūvēts dzinis apakšā, tāpēc nekādi WordPresa gudrumi īsti nepalīdzēs.

  8. Kāds tur WordPress gudrums? Ar WordPress Kaspara teiktajam nav sakara, galvenais bija ideja. Ja jau saki, ka pats būvēji dzini, tad Tev bija jāsaprot, ko Kaspars saka. Tā ir elementāra lieta, daudz, daudz elementārāka par dziņa būvi. Rezultātā, man rodas šaubas, ka pats kaut ko esi brūvējis.

  9. endrju, man ir stabili absolūti pajāt, vai tev rodas šaubas, jo īpaši tāpēc, ka es tiešām neesmu sapratis viņa variantu līdz galam un ar džavaskriptu vispār nemāku strādāt. Bet BlackHalt variantu pamēģināšu gan, a ja nu sanāk.

  10. Vēl viens papildu drošības līdzeklis, kas palīdz tik vaļā no lielas daļās spama, ir pielikt input lauku, ar nosaukumu, piemēram, web vai url, paslēpt to ar CSS un tad nočekot, vai tas ir tukšs. Centīgie spamboti šo lauku būs aizpildījuši, bet parastajiem lietotājiem tas nav redzams. Nav gan gluži 100% efektīvi, toties nesāpīgi lietotājiem .

  11. Tā pat var darīt ar nika lauku, piemēram slēpts lauks ar vārdu “nick” vai “username”, bet īstais, redamais vārda lauks “kaut_kada_figna”.

  12. Cik visaadaas mazajaas sisteemaas taisu, paliidz “ljevie” lauki kaa te arii Maadinsh teica. Ielikt piem. divus teksta laukus “name” un “text” un tad nosleept tos ar css (drosh paliek nedrosh, lietot nevis display:none bet piem width: 1px, height:1px).
    iistos laukus nosaukt par “vaards” un “ljureklis” un pie posteeshanas iechekot – ja name un text satur kaut vienu bitu – suutiit tekstu nah.
    Visdroshaakais pasaakums. vienaa lapaa 3 gadu laikaa vispaa neviena spama.

  13. Serge, labi, neiedomājos, ka JavaScript nezini. Ideja, ko Kaspars ieteica ir tāda: kad tiek submitota forma (piemēram, šeit, komentāros, spiests “Submit”), JavaScript pārķer to pieprasījumu (ar “onsubmit” atribūtu) un pieliek url’im, uz kuru submito (form action=url), klāt kaut kādu tekstu, ko pēc tam servera pusē (PHP vai kas Tev tur ir) pārbauda – ir vai nav. Boti JavaScript neizpilda, tāpēc varēsi zināt, ka formu submitojis ir bots. Protams, paliek cilvēki, kuri JavaScript nelieto vai kuriem tas vienkārši nav. Ja par to ir jāuztraucas, tad vari apvienot šeit ieteiktos CSS trikus.

  14. Tikko apskatījos leningrad.lv datubāzi. Kopš manis paša izdomātās figņas uzstādīšanas nav parādījies neviens spama komentārs. Ir pagājusi nedēļa un tas izskatās cerīgi, jo pirms tam boti mocīja katru dienu ar ~1000 komentāriem.
    Izmantot slēptos elementus nevēlos tikai tāpēc, ka cenšos arvien taisīt tādu HTML kodu, kuru spēj citi saprast, savukārt par JavaScript variantu esmu domājis, ka varētu pamēģināt, kaut gan veselais saprāts saka, ka tāpat kaut ko greizi nostrādāšu un man nekas neies.
    Paldies visiem par padomiem.

  15. Mr. Serge , apsveicu ar uzvaru par botiem.

    Mēs vienā forumā pirms gada atrisinājām problēmu ar botiem ierakstot frāzi pie autorizēšanās pogas – Lūdzu ievadiet portāla pirmo burtu. Spams vairs netika redzēts.

  16. Kā jau minēju, man frāzes neder, jo komentēt mēdz arī latviski nelasošā auditorija. Bet tas bija pirmais variants, ko es biju iedomājies.

  17. Žēl, ka nevar tos pašus spambotus uzlaist virsū HC.LV testa nolūkos – līdz šim 5 gadu laikā aritmētisko uzdevumu vēl neviens bots nav atrisinājis.

Komentāri ir slēgti.