ugrás a tartalomhoz

Naív spam védelem

Marcell · 2007. Jún. 13. (Sze), 17.26
Ma reggel jutott eszembe a következő (lehet, h már ősrégi ötlet):

Adott egy hozzászólás rész, ahova login nélkül is lehet írni. Nem szeretnék spamet, de szeretném elkerülni az össze-vissza torzított képeket és a "Milyen színű az ég?" jellegű kérdéseket, mert ezek véleményem szerint elriasztják a felhasználót (meg persze rondítják az oldalamat :)).

A gyors hozzászólás jellegéből adódóan a delikvens e-mail címére nincs szükségem, tehát nem is kérem be tőle. Viszont mégis berakok egy 'email' nevű INPUT-ot (direkt sok "beszédes" résszel, id="email", name="email" class="required"...), és CSS-sel display:none tulajdonságot adok neki. Tehát egy humán ember nem fogja kitölteni, viszont egy robot jó eséllyel benézi. Ha ki van töltve, akkor spamnek minősítem és büntit szabok ki, ha nincs akkor elfogadom.

Hol bukhat meg ez a szűrés? A robotok képesek visszafejteni a CSS szabályaimat (nyilván külön fájlban, esetleg vmi tök fura kiválasztóval karöltve)?
 
1

Elrejtés ...

Max Logan · 2007. Jún. 13. (Sze), 18.18
Miért nem input type="hidden" és akkor nem kell CSS?
2

sztem

inf · 2007. Jún. 13. (Sze), 18.28
mert arra egyszerűbb felkészíteni a botokat. nyilván logikus, hogy hidden inputba nem ír a felhasználó levelet, viszont a css kiolvasása kicsit komplikáltabb dolog, mint az input type megnézése.
3

robotok?

Marcell · 2007. Jún. 13. (Sze), 18.30
Arra gondoltam, hogy ezt túl könnyen felismernék a robotok is (hogy humán személy sem tud írni ebbe).
4

Na igen ...

Max Logan · 2007. Jún. 13. (Sze), 18.41
... van benne vmi.
6

Szerintem csak a HTML-lel foglalkoznak

Nagy Gusztáv · 2007. Jún. 13. (Sze), 21.58
a robotok. Annyi oldal van, ahol ez elég, nem fognak szórakozni a kevés egyedi védelemmel rendelkező oldallal.
5

jó ötlet

zzrek · 2007. Jún. 13. (Sze), 20.42
Szerintem jó ötlet. Ha tutira akarsz menni, tüntesd el JS-sel a mezőt, azt biztosan nem tudják visszafejteni a robotok (ha furfangos kódot írsz, főleg).
Az viszont nem tuti, hogy egy bot kitölti a mezőt. Lehet hogy így is, úgy is kipróbálja. Az viszont tuti, hogy ha beír, akkor azt kitilthatod.
De rátehetsz még 1-2 lapáttal:
Csinálj több formot, sokkal több mezővel, mint amennyi szükséges. És csak azokat a mezőket hagyd fenn visible, amikbe adatot vársz. Egy bot nem fogja tudni eldönteni, hogy hova írjon és hova ne, így biztosan fog majd oda is valamit írni, ahova nem kéne és lebukik...
Megcsinálhatod úgy is, hogy véletlenszerű neveket adsz az inputoknak, és a JS kódot is változtatgathatod egy algoritmussal, hogy mintavételezéssel (stb) ne derüljön ki belőle sose, hogy mely mezők az engedélyezettek.
Visszaadni pedig mindig ugyanazt a szöveget kell, ha detektált bot, ha nem: így ez esetben azt sem tudja majd (direktben), hogy sikeres volt-e az akció.

Ezt nagyon jól meg lehet csinálni (akár olyanra, hogy biztonságos(abb?) legyen, mint a KAPTCHA cuccok). (Egyébként mit jelent ez a szó, hogy "kaptcha"?)

Hátránya lehet, hogy mivel nem tudja a robot, hogy nem működik, lehet, hogy ugyanúgy próbálkozik és forgalmat generál, mint a "kihasznált" formok.
9

több kamu mező

Marcell · 2007. Jún. 13. (Sze), 22.44
A CAPTCHA = "Completely Automated Public Turing test to tell Computers and Humans Apart" (http://en.wikipedia.org/wiki/Captcha).

Erre nem gondoltam, de ahogy mondod, akár azt is bevethetjük, hogy több ilyen kamu mezőt adunk meg. Tehát megadok még egy "website" nevűt is (vagy még több tipikus mezőt), és akkor még ha többfajtaképpen is próbálja meg kitölteni, akkor is nagy eséllyel beletörik a foga, mert mindegyikre szűrök (teljesítmény szempontjából ez csak egy OR ág a feltételben).

A visszaadott oldalon még akár azt is el lehet játszani, hogy a SPAM-nek minősített tartalmat letárolom SESSION-ben és kiírom neki legfrissebb hozzászólásként. Tehát elmentésre nem kerül, de a robot látja, hogy húdejó, megjelent az oldalon a POST-ja és megnyugszik. A régebbi POST-jait meg nyilván nem ellenőrzi....

Ez persze felvet egy újabb kérdést: ha látják, hogy sikeresek, akkor tovább próbálkoznak, tehát teljesítményt esznek? Ha pedig nem, akkor leráztam egy darabig? Tehát melyik a jobb politika: színlelni, hogy sikerült, vagy nyíltan elküldeni a búsba?
10

átirányítás

Marcell · 2007. Jún. 13. (Sze), 22.52
Az is eszembe jutott, hogy ha kiderül, hogy robot, akkor egy header("Location: xxx") fejléccel átküldöm az egyik ellenségemhez. :D Ezt mennyire veszik zokon a robotok, ez kizzökkenti őket, vagy mintha mi se történt volna, nálam folytatják tovább a cseverészést?

Tudom, hogy sok a kérdés, csak nincs igazán gyakorlati tapasztalatom. Engem szerencsére még egyszer sem találtak meg, de jó előre szeretnék felkészülni ellenük.
12

JS nem

attlad · 2007. Jún. 14. (Cs), 00.46
Nem jó ötlet ha JavaScript függővé teszed emiatt az webhelyet, amikor anélkül is megoldható.
7

Letölthető kód

w3net · 2007. Jún. 13. (Sze), 22.00
Próbáld ki ezt:
Anti-SPAM technique for contact forms that works
A Google Analytics szerint a Contact oldalamat kb. havi 600-szor kérik le, mégis 0 e-mailt kapok.
Gondolom a 600 oldalletöltésből legalabb 590 SPAM próbálozás, de eddig nem sikerült nekik :).
8

nem jó

Marcell · 2007. Jún. 13. (Sze), 22.24
Biztos nekem túl nagyok az igényeim, de én akarok egy felesleges mezőt sem belerakni az űrlapba! A Te verziód cirka ugyanaz, mint a "Milyen színű az ég?", csak épp automatikusan kitölti egy válasszal. Attól hogy ki van töltve, még ugyanolyan zavaró (és felesleges, ha kiváltható máshogy)...
11

Eléggé összetett a kérdés

ada · 2007. Jún. 14. (Cs), 00.25
Rengeteg lehetőséged van, de úgy gondolom, hogy atomstabil védelmet a jelenleg elérhető eszközökkel nem nagyon lehet készíteni.

Például, a te módszered ott akad meg, hogy ha bármilyen okból a CSS nem jelenik meg (rengeteg oka lehet, karakteres, esetleg régi böngésző), lesz egy input mező ami egy email címet vár, és ugye ezt ki fogják tölteni azok akik tudnak róla. Persze oda lehetne írni hogy KÉREM NE TÖLTSE KI, de nem biztos hogy csak magyarok akarják azt a formot kitölteni, sőt, vagy lehet csak átsiklanak felette.

Van olyan megoldás is hogy a formodba, Javascripttel beszúrsz egy új hidden mezőt, aminek a megléte nélkül a form érvénytelen. Ez a módszer ismét kirekeszti a felhasználók egy részét.

Mostanában elterjedtek a Milyen színű az ég, vagy az egyszerű matematikai feladatokat kérő beviteli mezők. Jó ötletnek tartom, azonban ez is felveti az idegennyelvű problémát. Nyilván probálnak(unk) olyan kérdéseket feltenni, amiket mindenki meg tud válaszolni, azonban pontosan ezzel nyújtunk egy újabb támadási felületet, mégpedig azt hogy ezek jó eséllyel kijátszhatóak (a matematikai rész egy parserrel, a többi pedig pl. egyszerű szótári szavakat próbál végig).

Stb, stb...

Úgy gondolom, hogy ameddig az alternatív antispam megoldások nincsenek eléggé elterjedve, nincs mitől tartanunk, de amint feltűnően sok (és fontos) helyen megjelennek, meg fogják rá írni a megfelelő programot.

Egyetlen megoldást látok az ügyre, aminek megvalósulására sajnos kevés esély van, ez pedig az, hogy mind a webhelyek üzemeltetői, mind a rendszergazdák, mind az érintett hatóságok és szolgáltatók közösen összefognának, és könyörtelenül megbüntetnék a spamelőket (1. szívlapátos agyonverés, 2. börtönbüntetés, 3: iszonyú pénzbírság, vagy ezek keverékei).
14

Nem jogi kérdés sztem

attlad · 2007. Jún. 14. (Cs), 01.07
Ez a jogi megoldás elég gáz egy _technikai_ problémára. Főleg, hogy a zombigépekről küldve nem könnyen azonosítható be a küldő.
15

Nem csak a jogról van szó

ada · 2007. Jún. 14. (Cs), 01.18
Hanem arról is, hogy ha nem lenne ennyi spam, és ha büntetnék keményen, akkor tudnák a spammerek mihez tartani magukat, azaz 'elvileg' sokkal kevesebb eset lenne.

Igen, technikai probléma, ha úgy vesszük. Tudomásom szerint a mai napig nincs tökéletes megoldás a spam ellen, bár e-mail esetén már dolgoznak az ügyön.

Csak azért mert lehet, nem muszáj spamelni. Hasonló problémák előfordulnak a valós életben is, a nagyvárosban élők minden nap szembesülnek vele, de ezt most nem szeretném ide keverni.
19

Nem kell atombiztos védelem

Marcell · 2007. Jún. 14. (Cs), 14.59
Például, a te módszered ott akad meg, hogy ha bármilyen okból a CSS nem jelenik meg (rengeteg oka lehet, karakteres, esetleg régi böngésző), lesz egy input mező ami egy email címet vár, és ugye ezt ki fogják tölteni azok akik tudnak róla. Persze oda lehetne írni hogy KÉREM NE TÖLTSE KI, de nem biztos hogy csak magyarok akarják azt a formot kitölteni, sőt, vagy lehet csak átsiklanak felette.
A karakteres böngészőknek tényleg tudom egy rövid mondatban közölni, hogy ne töltsék ki. Ha figyelmetlen, akkor már nem én tehetek róla.. másodszorra majd csak elolvassa a kiírást, azért nem feltételezem, hogy csupa retardált létogatja az oldalt. Amúgy egy echte magyar közösségi oldalról van szó, így aki nem tud magyarul, az miért is akarna hozzászólást írni? :)

Persze, lehet addig csűrni-csavarni, hogy egy vak holland érkezik az oldalra, a böngészője nem támogatja sem a CSS-t, sem a JS-t, de erre csak azt tudom mondnai, hogy így járt. Azért valahol meg kell húzni szerintem a határt, hogy kiknek fejlesztjük az oldalt.
20

Felesleges határhúzás, mellékhatások

attlad · 2007. Jún. 14. (Cs), 15.38
Persze, lehet addig csűrni-csavarni, hogy egy vak holland érkezik az oldalra, a böngészője nem támogatja sem a CSS-t, sem a JS-t, de erre csak azt tudom mondnai, hogy így járt.

Ez érthető is lenne ha nem lenne olyan megoldás ami kb. semmivel sem bonyolultabb, mégis mindenkinek elérhető marad az oldal.

Amúgy tesztelted, hogy az Opera Mágusa (sic!) és egyéb ilyen automatikus űrlap kitöltők (van egy rakás Greasemonkey szkript is erre) hogyan kezelik a CSS-sel elrejtett beviteli mezőket? Szerintem biztos van olyan ami nem ellenőrzi, hogy látható-e és kitölti jól. Így valid hozzászólások is a spamvédelmed martalékává válhatnak.

#7 kiegészítve JS eltüntetéssel FTW.
21

kísérleti stádium

Marcell · 2007. Jún. 14. (Cs), 16.07
Én örülnék az előző verziónak is, de ha JS-sel tüntetem el az idő közben kitöltött mezőt, akkor az elején még bejön és csak onload-ra tűnik el, ami egy nagyobb oldalnál simán észrevehető és a hozzá nem értő felhasználóknak kifejezetten zavaró.

Az automatikus kitöltőket még nem néztem, az egész dolgon még csak elméleti szinten filózom. De ezen kívül a megoldásom szerintem megfelelne a reális igényeknek (magyar oldal - magyar felhasználók, nincs felesleges zavaró mező, elérhető JS és CSS nélkül is).
22

onload helyett ondomload

gex · 2007. Jún. 14. (Cs), 16.37
ondomload-nál nem hiszem, hogy olyan zavaróan sokáig látszódna.
25

Nem jó ...

Max Logan · 2007. Jún. 14. (Cs), 17.04
... az onDOMload sem. Én pár hónapja kísérleteztem vele, de adott esetben ugyanúgy bevillan az elem. Ha valóban lenne olyan eseménykezelő (natívan), hogy onDOMload, akkor talán megfelelne ilyen eltüntetős célokra.
26

de jó

gex · 2007. Jún. 14. (Cs), 17.14
lehet hogy te kísérleteztél vele és neked bizonyos böngészőn a te kódod esetleg bevillant, én viszont úgy vélem, az esetek túlnyomó részében kiválóan működik.
27

Kimaradt, hogy nekem / szerintem ...

Max Logan · 2007. Jún. 14. (Cs), 17.31
Tény és való hogy másnak, más kód estén jó lehet. Ezért lenne jó a natív támogatás (akkor elvileg mindehol ugyanúgy működne) ...
28

nekem/szerintem

gex · 2007. Jún. 14. (Cs), 18.08
nem hiszem, hogy azért mert nem támogatja minden elterjedt böngésző natívan a DOMContentLoaded-ot, egyből el kéne vetni, mint lehetőséget. ilyen alapon nem használnál png-t (és átlátszóságot), css2 nagy részét, és még sorolhatnám.
lehet, hogy villan egyet (egy szóval nem mondtam, hogy soha nem villant nekem sem), de nézd meg mire válaszoltam:
akkor az elején még bejön és csak onload-ra tűnik el, ami egy nagyobb oldalnál simán észrevehető és a hozzá nem értő felhasználóknak kifejezetten zavaró.

a simán észrevehető-re ajánlottam ezt a módszert, mert bár lehet, hogy a sz*rabb böngészőkben villan, ff-ben észre sem lehet venni (és ha jól emlékszem operában sem), de sehol nem lesz kint annyi ideig az az input, hogy felfogja a júzer, hogy az ott van, és ezért összezavarodjon.
29

Tökéletesség

Max Logan · 2007. Jún. 14. (Cs), 19.03
Én tökéletességre törekszem (ami ugye csak illúzió) ezért is vetettem el a teljes oldal betöltése előtti manipulálást (mert ha 10-ből 3x bevillant FF alatt is, akkor inkább keresek más megoldást). Egyébként én ezt használtam.
30

van amiben tökéletes

gex · 2007. Jún. 14. (Cs), 19.43
elég baj, ha neked 10-ből 3-szor bevillant ff alatt. mondjuk miután elolvastam a - több, mint 2 éves - módszert, amit kipróbáltál
Every X milliseconds the script tries to run your code again, looking for the DOM elements you provided.

nem is nagyon csodálkozom...
ha megtaláltad volna ezt a bejegyzést, akkor tudnád, hogy ff (mozilla) és opera9 alatt van egy beépített DOMContentLoaded esemény. ez szerintem még a te tökéletességre törekvésednek is megfelel, de próbáld ki nyugodtan!
ezen kívül ie-re és safarira van megoldás, azok lehet hogy nem annyira tökéletesek, de az én tapasztalatom alapján nem sokat fog látni a júzer abból az inputból (mert ugyebár ez volt a téma).

szerk: megtaláltam a témát, amikor már érdeklődtél erről, és hogy-hogynem ott is feltűnt Dean Edwards bejegyzésének a linkje.
33

Megtaláltam ...

Max Logan · 2007. Jún. 14. (Cs), 20.36
... de, akkor ott nekem az a leírás elég idegen volt. Én azt hittem amikor belfutottam a villogás problémába, hogy létezik onload mellett ondomload esemény (mert ugye mindenki ajánlgatta, csak azt felejtették el leírni, hogy valójában ilyen nincs). Aztán rájöttem, hogy nincs egységes megoldás és nem is foglalkoztatott a dolog tovább, meg amit éppen akkor csináltam idő hiányában azóta is talonban van ...
34

pont erről van szó

gex · 2007. Jún. 15. (P), 09.52
Én azt hittem amikor belfutottam a villogás problémába, hogy létezik onload mellett ondomload esemény [...] valójában ilyen nincs

pont erről van szó, hogy létezik ilyen, az a neve, hogy DOMContentLoaded.
24

megjeleníteni

zzrek · 2007. Jún. 14. (Cs), 17.00
CSS-sel eltüntetni kell az összeset, és JS-sel megjeleníteni az "engedélyezett" mezőket (onload után).
Ha az oldal egyéb funkcióiban úgyis kell a JSt engedélyeznie a felhasználónak, akkor nem itt fogsz látogatót veszíteni. Az oldal elejére ki kell rakni, hogy a JS bekapcsolása szükséges az oldalhoz (ha nincs bekapcsolva) és ennyi. (Persze ha van egyszerűbb, biztonságosabb, felhasználóbarátabb megoldás ami JS nélkül is működik, hát akkor minek a JS?) (De én nemigazán szimpatizálok a JS letiltókkal: igenis engedélyezzék a JSt ha az oldalaimon járnak, a böngészőgyártók meg csinálják meg a JSt olyanra, hogy a felhasználóknak ne legyen mitől félniük: nem kéne ez a buta hercehurca és bátran lehetne JSt használni.)
23

Két submit gomb

Wabbitseason · 2007. Jún. 14. (Cs), 16.45
Én azt a módszert részesítem előnyben, hogy a rendes submit gombom elé beteszek egy name attribútummal ellátott, display:none-nal eltüntetett submit gombot valami olyan felirattal, hogy "ezt ne nyomd meg!". Ha a kapott form-adatok között megjelenik a rejtett gomb neve, akkor tudom, hogy vagy retardálttal, vagy spammer programmal találkoztam.
13

Jó az

attlad · 2007. Jún. 14. (Cs), 00.58
Pedig az egy működő megoldás és JS és CSS nélkül is megy, több helyen is van ilyen és használható, meg nem zár ki embereket (ami Turing teszt esetén nem egy hátrány). De úgy szokták, hogy JS el is tünteti azt a mezőt amit automatikusan kitölt. Ill. oldaltól függő hogy milyen kérdést célszerű feltenni.
17

Megoldás

w3net · 2007. Jún. 14. (Cs), 08.49
ha neked zavaró, akkor rejtsed el CSS-el.
16

Humán ember

vbence · 2007. Jún. 14. (Cs), 02.16
:D
18

Előrelátó vagyok...

Marcell · 2007. Jún. 14. (Cs), 12.37
...ezért már gondoltam a Terminátorokra is. :D
31

ha már js, akkor egyszerűbb

Fraki · 2007. Jún. 14. (Cs), 20.10
ha már js, akkor egyszerűbb eltüntetés helyett simán az értékes mezőket generálni, vagy a submitot, vagy a form action-t vagy az egész formot stb...
32

JS off

attlad · 2007. Jún. 14. (Cs), 20.22
Igen, csak ezek nem működnek JS nélkül is. Az eltüntetős meg igen.
35

dehogyis

Fraki · 2007. Jún. 17. (V), 10.17
Dehogyis, mert JS nélkül az eltüntetős se funkcionál, és a humán is ki fogja tölteni, és máris spam lesz! Az meg ugye nem játszik, hogy display:none, mert ezt a robot is tudja, épp ezért van szó JS-ről...

(Illetve az játszik, hogy kiírom szövegben, hogy ne töltse ki, de az már vállalhatatlanul idétlen. Akkor inkább azt írom ki, hogy kapcsolja be a JS-t, vagy inkább captcházom.)
36

#7, #13

attlad · 2007. Jún. 17. (V), 11.09
Mostmár nem tudom te melyik JS-es megoldásra gondoltál, mivel volt már itt mindenféle, de a #7 kiegészítve azzal amit a #13-ban írtam működik JS nélkül és semmi plusz teendője nincs a látogatónak, csak akkor jelenik meg plusz mező és kell kitöltenie ha JS off nála.