Naív spam védelem
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)?
■ 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)?
Elrejtés ...
sztem
robotok?
Na igen ...
Szerintem csak a HTML-lel foglalkoznak
jó ötlet
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.
több kamu mező
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?
átirányítás
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.
JS nem
Letölthető kód
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 :).
nem jó
Eléggé összetett a kérdés
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).
Nem jogi kérdés sztem
Nem csak a jogról van szó
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.
Nem kell atombiztos védelem
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.
Felesleges határhúzás, mellékhatások
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.
kísérleti stádium
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).
onload helyett ondomload
Nem jó ...
de jó
Kimaradt, hogy nekem / szerintem ...
nekem/szerintem
lehet, hogy villan egyet (egy szóval nem mondtam, hogy soha nem villant nekem sem), de nézd meg mire válaszoltam:
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.
Tökéletesség
van amiben tökéletes
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.
Megtaláltam ...
pont erről van szó
pont erről van szó, hogy létezik ilyen, az a neve, hogy DOMContentLoaded.
megjeleníteni
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.)
Két submit gomb
Jó az
Megoldás
Humán ember
Előrelátó vagyok...
ha már js, akkor egyszerűbb
JS off
dehogyis
(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.)
#7, #13