Реально ли сделать антиспамилку на js?

Роберт

Аналитик
> Форум, вообще-то по PHP!
Тема находится НЕ в "Вопросы по программированию на РНР" , а в "Offtopic".
и РНР в данной теме не поднимался ни разу...
Если ты говоришь что работаешь "с конечной объектной моделью" - привиди фрагмент примера из своей программы. Иначе ты просто лжёшь...
 

Роберт

Аналитик
HraKK
Я тоже так считаю...
Но если более точно - я считаю его способ нереальным в не зависимости от того что он подразумеват под фразой "объектная модель" (что , действительно , при работе с объектами , что при работе с графичискими образами).
Таких програм можно не бояться - на её написание уйдут месяцы , и она перестанет работать при малейшем изменении дизайна.
 

Major

Новичок
Роберт

может мы не поняли немного друг друга и может я не так выразился. Но вообще я имел ввиду DOM. Суть в том что твой JS выполнится исоздаст все поля что ты хотел. Если это поле каким-тообразом передается в скрипт, то всегда есть возможность его получить.

Таких програм можно не бояться - на её написание уйдут месяцы , и она перестанет работать при малейшем изменении дизайна.
Какраз таки наоборот. Он не зависит от дизайна. Доступ к полям формы осуществлется не через парсер html. То, что спамилка будет не совсем универсальной согласен, от массовых грабберов-роботов защита будет работать. Но я это сказал к тому, что если вдруг кому-то захочется заспамить конкретно твой сайт. Исправить программу будет намного проще, чем ты думаешь (пару часов работы, ато и быстрее, смотря что ты изменишь в защите). Программе будет пофиг, собственно, где располагаются твои формы, ей главное указать нужные поля, которые надо заполнить.

Что касается кода, то, как тут принято на форуме говорить, гугли... Я могу лишь сказать что все формы и поля от них легко получаются через:

PHP:
forms := WebBrowser1.OleObject.Document....
-~{}~ 11.10.07 20:25:

Почему я назвал конечной объектную модель документа? Только потому что я имел ввиду что я уже могу получить весь DOM документа, вместе с интерпретированным JS и всеми результатами его работы, с теми полями, что сформированы динамически этим самым JS.
 

Роберт

Аналитик
Major
Я ещё раз повторю - это ничего не поменяет!
Ты по прежнему увидишь что передающая форма твоей web-страницы имеет объекты Login и Parol , и ты будешь их заполнять... В то время как на форме в какой-то момент вдруг появляется
<input type=text name=Test>
и ложится идеально перекрывая объект Parol по всем координатам. Пользователь визуально ничего не заметил и ввёл данные в поля Login и Test , а ты по прежнему заполнил Login и Parol , и полчил пожизненный бан. Потому что 5 раз до этого никакого поля Test небыло... А следующий раз (случайным образом по рандомайзу) вместо теста весь TABLE станет хидденом , и вмето него создастся другой TABLE с другим названием формы и полями EMail и Reklama , но ты по прежнему будешь заполнять Login и Parol потому что никогда ранее не видел чтобы такое было. А отлавливать такое ты не сможешь , так как так как первая же твоя ошибка приведёт к бану...
Более того при каждой загрузке будут создаваться 3-4 ничего не значащих поля , которые то сливаются с фоном , то прячутся за другие компоненты , то просто сразу после вывода становятся хидденами.
Есть стандартная фраза - Время написания защиты примерно равно времени взлома программы. Но тут написать защищающие модули гораздо проще чем их обнаружить и понять. Это как уровни к SokoBan'у - проходить тяжело , а написать за час можно столько что и за год не пройдёшь все...
А ещё ты забыл что объекты могут реагировать на события движения мышки - например при наведении на поле Parol оно поменяет название (или заменится) на поле Mir2. Этого объекта ты вообще не увидишь через DOM поскольку он изначально не существовал , а создастся от движения мышки , от onClick или onFocus или как-то по другому (причём каждый раз по разному)...
А создать всё вышеописанное вместе с генератором случайного вывода , в случайном месте , и каждый раз в новом формате с новыми названиями - это один вечер...
 

Андрейка

Senior pomidor developer
Роберт
или как-то по другому (причём каждый раз по разному).
ну это у тебя там чета выводится по разному, а тебе отправят сотню одинаковых запросов с одинаковыми, заведомо работавшими на момент отправки вручную параметрами. и?
 

Major

Новичок
Роберт

Вместо напрасных споров, давно бы поднял испытательный стенд, со своей чудо-защитой, хоть на бесплатном хостинге и показалбы как все это реально работает и на сколько это удобно.

А форумчане поглядели бы, посмотрели бы, понюхали, покусали... и сделали выводы для себя. Интересно как вес это работает, то что ты описал, на практике и сколько времени занимает программирование сего чуда...
 

cDLEON

Онанист РНРСlub
На сколько я понял - вместо капчи использовать рандомное, генерящееся яваскриптом поле и проверять существует ли оно =)
 

Роберт

Аналитик
Андрейка
Так ведь сервер будет ожидать от пользователя совершенно не тех ответов что были "заведомо работавшими на момент отправки вручную параметрами". Это тоже самое как распознать графические цифорки Rapidshare.com и отослать их серверу. Результат будет такой же... Ибо сервер каждый раз ожидает получить от пользователя что-то новое , только обычно это нарисованные цифорки , а у меня пароль должен быть в поле с определённым названием. Хотя на форме будет десяток других подставных полей. Только визуально пользователь их не заметит , а программа подбора не будет знать какое из них надо заполнить (если не учитывать что это поле может быть выбрано не из существующих , а создаться само по какому-то событию движения мыши или клавиатуры).

Major
Споры не напрасны. Ты ведь не можешь через DOM определить какое поле будет создано вместо поля Parol после прохождения мышки через несколько объектов к этому полю.

cDLEON
Почти. Так как в твоём случае можно просто посмотреть список объектов на форме и при запросе к серверу добавлять вводимый тобой объект (это даже проще делать просто читая в твоём html'e содержимое полей <script.*?>(.+?)</script> и находя там функцию создания этого поля.
Но если ты создаёшь несколько полей , разными методами и в разных местах - тогда уже сложенй.
А если ты ещё частью из них подменяешь поля которые надо реально заполнять - тогда обойти практически невозможно (хотя Major считает что легко)
 

Major

Новичок
Роберт

Споры не напрасны. Ты ведь не можешь через DOM определить какое поле будет создано вместо поля Parol после прохождения мышки через несколько объектов к этому полю.
Если ты чего-то не умеешь делать или ни разу не делал, то не стоит утверждать что этого никто не делал/делает и что это невозможно...

Я спорить устал. Или ты поднимаешь испытательный стенд... Или каждый из нас отсатется при своем мнении... Много ты спамботов написал ? Хотя бы 1го писал? Просто чтобы уметь защищать, надо уметь ломать. Втеории ты на каждый вопрос, заданный тебе, всегда найдешь ответ. А ты бы на практике показал как работает твоя теория.

Я так же склонен поверить что твоя защита и правда работает, но пока не могу...

З.Ы: Если честно, мне всеравно кто как делает защиту. Я просто предложил 1 из вариантов обхода. Я делал капчу и буду делать... =) Пока не изобретут способа лучше...
 

HraKK

Мудак
Команда форума
лучше не делать капчу а иметь бригаду хакеров которые найдут того кто спамит и погладят помогилке.
 

Major

Новичок
Ну да, ну да... Лучше сразу искоренить всю преступность на планете и начать надо с правительства... Даешь мир во всем мире! Мир, труд, май, жоперс, драндуледс энд машин... все дела.


З.Ы.:Если бы, да кабы... на Земле был коммунизм...
 

HraKK

Мудак
Команда форума
Элементарно. Надо всего нечего, влететь на боинге 747 в крупную атомную станцию. Вся преступность изчезнет сразу.
 

cDLEON

Онанист РНРСlub
Роберт
Почему только майор ? Я тоже так считаю.
Вот, например возьмём задачу по получению ИП адреса прокси сервера на платном прокси листинге.
Там тоже защита на яваскрипте стояла.
PHP:
YfKfzBmjpcK = new Array(56,753,780,59,96);
NUvXBYBEG = parseInt((parseInt(((((689)*YfKfzBmjpcK[0]+YfKfzBmjpcK[1]-YfKfzBmjpcK[2])*YfKfzBmjpcK[3])*YfKfzBmjpcK[4])*10)/10)-218386843);

noC = new Array(30,326,803,317);
gobraMIhCsl = parseInt((parseInt(((375)*noC[0]-noC[1]+noC[2]+noC[3])*10)/10)-11882);

fknlPmjMaDE = new Array(254,249,47,523,310);
mBlrhCdS = parseInt((parseInt((425+fknlPmjMaDE[0]-fknlPmjMaDE[1]-fknlPmjMaDE[2]+fknlPmjMaDE[3]+fknlPmjMaDE[4])*10)/10)+13175);

djWIxhReN = new Array(314,506,284,876);
qnTVdER = parseInt((parseInt((866+djWIxhReN[0]+djWIxhReN[1]-djWIxhReN[2]+djWIxhReN[3])*10)/10)-2254);

uXIbS = new Array(258,748,23,520,278,455,849);
UOFGNDzrAF = parseInt((parseInt(((537+uXIbS[0]+uXIbS[1])*uXIbS[2]-uXIbS[3]-uXIbS[4]+uXIbS[5]+uXIbS[6])*10)/10)-35927);

rmf=qnTVdER+'.'+NUvXBYBEG+'.'+UOFGNDzrAF+'.'+gobraMIhCsl+':'+mBlrhCdS;
Все индефикаторы рандомные. Числа в вычислении тоже практически рандомные. Не повершиь. Я их обошёл.
А твоя система "защиты" поможет только от ботов нацеленных на весь инет, работающих по определённому шаблону. Если захотят спамить именно тебя - с лёгкостью обойдут.
 

gray07

Новичок
Лично из тех ботов, которые спамят меня, большинство не обходят даже ту простую джаваскриптовую защиту из первого поста. Причем они работают очень тупо, они не замечают даже, что у меня ссылки не парсятся, а так и выводятся простым текстом.
Тот один хитрый бот, который умел интерпретировать js, уже ушел с моего сайта (я регулярно удалял его "посты"), даже не успел испытать ни одного совета отсюда :)
Так что сделать вполне приемлимую защиту - реально.

Еще кстати способ - не давать размещать посты с текстом <a href= и Им же только то и надо, скинуть ссылку на свой сайт, чтобы поисковые системы подумали, что на него ссылаются много сайтов.
 

boombick

boombick.org
Еще кстати способ - не давать размещать посты с текстом <a href= и [/QUOTE] Ну вообще-то на большинстве известных мне форумов так и сделано :) Ссылки могут размещать узвери, набравшие определенное количество постов или/и имеющие определенный рейтинг.
 

Major

Новичок
На самом деле боты пишутся либо универсалы, и спамят инет в расчете попасть на угад, либо под определенный движок. Ссылки ищутся через гуГол. Такой бот сам сам составляет себе базу для спама и потом обходит ее. Все дело в том, от кого защита. От бота-краулера, спасет даже простая защита на JS без наворотов, от целенаправленного спама, даже капча может не спасти. Целенаправленный спам 1го движка будет очень эффективен.
 

gray07

Новичок
Автор оригинала: boombick
Ну вообще-то на большинстве известных мне форумов так и сделано :)
Ссылки могут размещать узвери, набравшие определенное количество постов или/и имеющие определенный рейтинг.
В моем случае, ссылки не может размещать никто, они выводятся простым текстом (через htmlspecialchars). Но спамерских ботов это не останавливает :) они тупо без разбору постят свой спам, даже не смотря, в каком виде он появился :)
Я предлагал просто при попытке разместить такой бред, не записывать его в БД, а выдать сообщение, типа запрещен текст <a href и
 

berkut

Новичок
я делал такое ограничение: если у юзверя нет постов, не разрешается публикация ни одной ссылки. если менее 5 - 1 ссылка, больше постов - лимитов нет. под ссылкой подразумевается не только бб-теги, но и просто валидный урл, с указанием протокола и без.
 
Сверху