0 Пользователей и 1 Гость просматривают эту тему.
  • 21 Ответов
  • 753 Просмотров
*

rsn

  • Захожу иногда
  • 245
  • 13 / 0
В повседневной работе столкнулся с необходимостью определить на уровне PHP поддержку JS у посетителя сайта.
Например, чтобы не разрешать определённые действия (допустим Поиск на сайте) тем, у кого нет поддержки JS, - всяким ботам, парсерам и т.д., бывают злоупотребления с их стороны.
Так вот, оформил это в виде плагина. Решил поделиться.
Строго не судите, это мой первый публичный плагин )

Код минимальный, доп. нагрузки практически не создаёт, время загрузки страницы практически не увеличивает.

Принцип действия, вкратце:
В рамках Joomla сессии, если это первое обращение, добавляем небольшой html-код перед закрытием body.
Если у посетителя есть поддержка JS - происходит обращение к плагину, который записывает в сессию значение java_define = true.
Если нет поддержки JS - соответственно, записывает в сессию значение java_define = false.
Для удобства применения значение (опционально) можно записывать не только в сессию, но и в php константу J_JAVA_DEFINE. Данная константа будет доступна практически в любом файле, которые обычно правятся при настройке Joomla - в файлах шаблона, в файлах расширений и т.д.
Таким образом, есть возможность, например, поправить модуль поиска по сайту (или страницы с результатами поиска), чтобы он не работал, когда J_JAVA_DEFINE !== true. Это лишь один из вариантов использования.

Дополнительное описание см. в настройках плагина.

Ссылка для скачивания: https://www.dropbox.com/s/tzdx3yuc9rd198j/plg_javadefine_1_0.zip
Текущая версия: 1.0
Совместимость: Joomla 3

Каркас плагина сделал с помощью сервиса inet-reklama.com, за что ему спасибо!

Кому интересно, предлагаю протестировать, посмотреть код.
Готов к предложениям и замечаниям  ;)

Есть одна хорошая компания, с которой приятно иметь дело )
*

robert

  • Живу я здесь
  • 4759
  • 437 / 18
IMHO, проблема надумана - в 2019 году трудно представить браузер без поддержки JS.
А что касается логики, то проще отправить 1 раз скрипт, который должен установить custom cookie, и дальше проверять наличие этого cookie.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

rsn

  • Захожу иногда
  • 245
  • 13 / 0
IMHO, проблема надумана - в 2019 году трудно представить браузер без поддержки JS.
А что касается логики, то проще отправить 1 раз скрипт, который должен установить custom cookie, и дальше проверять наличие этого cookie.
robert, конечно, браузерами без JS сейчас никто не пользуется - из людей.
Выше я написал, что в основном всё это - чтобы отсеить ботов и парсеров.
Выдумывать надуманные проблемы желание возникает крайне редко )

Насчет cookie - согласен, тоже вариант.
Тут уже дело вкуса, наверно.
Но куку тоже надо как-то поставить - либо дописывать js в html, либо в дописывать в js шаблона, либо так же - плагином.
В принципе можно и в этот плагин добавить выбор - проверять через куки или через сессию.

Ещё один момент: тот, кто будет разрабатывать/настраивать парсер, куку видит и может в связи с этим предпринять что-то дополнительное. А запись в сессии не видит.
« Последнее редактирование: 02.11.2019, 19:21:49 от rsn »
Есть одна хорошая компания, с которой приятно иметь дело )
*

robert

  • Живу я здесь
  • 4759
  • 437 / 18
отсеить ботов и парсеров
^-^ JS прекрасно видит тэг noscript и его содержимое.
Попробуйте
Код
<noscript>I am noscript. Do you see me?</noscript>
<script>
alert(document.getElementsByTagName("noscript")[0].innerHTML);
</script>
Не будь паразитом, сделай что-нибудь самостоятельно!
*

rsn

  • Захожу иногда
  • 245
  • 13 / 0
Не совсем понял, к чему это?
Видит, и?
Есть одна хорошая компания, с которой приятно иметь дело )
*

robert

  • Живу я здесь
  • 4759
  • 437 / 18
К тому, что бот легко обойдет ваш плагин ^-^.
Не берите близко к сердцу, я не собирался критиковать вас или ваш плагин. Все хорошо, только не распыляйтесь.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

rsn

  • Захожу иногда
  • 245
  • 13 / 0
robert, если Вам показалось, что я распыляюсь, то это Вам показалось )
И за критику я Вас не упрекаю, а наоборот, рад ей, спасибо  ;)
Просто отвечаю на сообщения, мне это интересно, не зря же я тему создал )

Но всё же вернусь к сути вопроса:
Цитировать
К тому, что бот легко обойдет ваш плагин
Если у бота нет поддержки JS (а как правило, это именно так), он не обойдёт плагин.
По крайней мере по указанной Вами причине.

(а фрагмент с noscript можно вообще выкинуть, изначально делал немного по другому, оттуда он остался)

Да, Вы правы в том, что Javascript прекрасно видит noscript и его содержимое. Но у бота нет обработки JS.
По крайней мере у тех ботов, с которыми в моём случае надо справиться.

Да и не в этом дело, по большому счету. А дело в том, что плагин безотказно справляется со своей задачей - определить, есть JS у «посетителя» или нет.
(после первой загрузки в рамках сессии)
Есть одна хорошая компания, с которой приятно иметь дело )
*

rsn

  • Захожу иногда
  • 245
  • 13 / 0
Давайте поясню на примере использования плагина.

Недавно на одном (немаленьком) сайте мы решили начать фиксировать, что люди ищут через Поиск по сайту.
(Данный поиск по сайту реализован через Яндекс API, ищет товары, информация о которых выгружается ему в XML)

Информация о том, что ищут посетители, как именно они вводят запросы, важна для нас, чтобы дальше улучшать этот поиск и свои товарные предложения.
Я настроил фиксацию запросов (с отдельной логикой, без дублирования от каждого «автора» и т.д.) в БД.
Дальше мы будем анализировать эти запросы и принимать решения.

Какого же было удивление, когда я увидел, что нашим поиском «пользуются» боты (тогда это была лишь гипотеза, потом она подтвердилась). Я точно не знаю, зачем это им. Есть лишь предположения, но сейчас не об этом.

Эти запросы ботов - они вводят нас в заблуждение, они искажают статистику запросов реальных людей.
Вот как это выглядит:



Соответственно, я поставил себе задачу - выявить отличительные черты реальных и фейковых запросов.
Стал фиксировать в БД: страну, регион, город, и поддержку Javascript на стороне посетителя - которую получаю этим плагином.

В таблице Вы можете увидеть столбец js, в нём и фиксируются показания о поддержке JS.

Как видите, всё работает. У ботов однозначно стоит 0 (преобразование из FALSE).
Теперь я точно знаю, что доработаю скрипт выдачи результатов поиска так, чтобы обломать этих ботов )
И поможет мне в этом данный плагин, который будет для ботов выдавать значение константы, доступной в любом php файле J_JAVA_DEFINE = false.

Как-то так )
Это лишь один из многих вариантов применения.
Также можно избавится от спама через комментарии и формы. По крайней мере уменьшить кол-во спама.
Уменьшить нагрузку на сайт и ещё много чего.
Главное не переусердствовать, и поисковикам, и нужным парсерам всё отдавать, как положено )
Есть одна хорошая компания, с которой приятно иметь дело )
*

ProtectYourSite

  • Завсегдатай
  • 1989
  • 106 / 4
  • Безопасность вебсайтов
Вопрос такой, а поиск реализован на JS или содержит форму либо тег a со ссылкой на сами страницы поиска ?
*

rsn

  • Захожу иногда
  • 245
  • 13 / 0
Вопрос такой, а поиск реализован на JS или содержит форму либо тег a со ссылкой на сами страницы поиска ?
И то, и другое. И быстрые варианты на JS, и ссылки на страницы с результатами.
Есть одна хорошая компания, с которой приятно иметь дело )
*

Septdir

  • Живу я здесь
  • 3172
  • 155 / 3
Кому интересно, предлагаю протестировать, посмотреть код.
На github выложите, а то качать, чтобы глянуть исходник совсем не торт.

Что же до самого решения, идея и задумка прикольная, думаю реализация тоже в порядке, вот только уже не актуально.
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
Мои Контакты | Мой GitHub | Workshop
*

robert

  • Живу я здесь
  • 4759
  • 437 / 18
Неисполнение javascript - устаревшее решение: современные боты уже не различишь от браузеров.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

rsn

  • Захожу иногда
  • 245
  • 13 / 0
Действительно, почему-бы выложить на github.
Спасибо за предложение, Septdir. Потом отпишусь.

Цитировать
Неисполнение javascript - устаревшее решение: современные боты уже не различишь от браузеров
robert, не спорю.
Но в ряде случаев, определить есть поддержка JS или нет - этого уже достаточно.
Поэтому и сделал такой плагин, он с этой задачей справляется.

Совсем не претендую на статус «Must Have» для него )
Есть одна хорошая компания, с которой приятно иметь дело )
*

Fedor Vlasenko

  • Живу я здесь
  • 3827
  • 721 / 7
  • Все начинается с Value
*

Septdir

  • Живу я здесь
  • 3172
  • 155 / 3
Joomla.getOptions("csrf.token")
Уже и этот вариант пробили.
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
Мои Контакты | Мой GitHub | Workshop
*

a-vikalingvo

  • Осваиваюсь на форуме
  • 32
  • 2 / 0
Доброго Дня всем !!
Вставлю свои 5 копеек !
Цитировать
Joomla.getOptions("csrf.token")
1. Ну если бот загрузил к себе страницу - то Токен у него точно будет !
2. Ну смотрите ! Если как вы говорите что Ваши ЗЛО-Боты - не понимают JS - то просто сделайте отправку поиска - JS слушателя на клик по кнопки .... и все досвидос !
3. по коду 
Код
   
str_replase('</body> .....
Так лучше не делать ! Используйте для этого DOMDocument ; так как str_replase заменит везде где найдет </body> - а если это плагин к примеру у кого то будет текст описания HTML страницы - Вы ему и туда скрипт вставите !! )))
4.Если реальный джехад ботам то смотрите что у него за юзер-агент.  И их можно сбивать на линии подлета к серваку - а не в самом сервере душить ! )))
5. Токен лучше проверять так
if(!\JSession::checkToken('get')) exit; - Для метода GET - (Или если токен  отправлен в URL )
if(!\JSession::checkToken()) exit; - Для POST Можно просто так ))
6. По поводу каркасов
Цитировать
Каркас плагина сделал с помощью сервиса inet-reklama.com, за что ему спасибо!
Ну тоже нормально для начала !!

Вот могу посоветовать на Github
Каркасы для всего Плаги, модули, компоненты, шаблоны.

Просто заменяете названия - ну в общем читайте описания !!
Для плагов то самое оно !! - но все равно каркасы это как с костылями бегать - но для начала помогает !
Все Удачи Всем !! rsn Молодец ! Делай ! )))


« Последнее редактирование: 06.11.2019, 11:04:44 от a-vikalingvo »
*

a-vikalingvo

  • Осваиваюсь на форуме
  • 32
  • 2 / 0
тут подумал -  так грузите в обще все форму поиска js -ом !! И все !
*

dmitry_stas

  • Легенда
  • 13064
  • 1225 / 8
csrf token для этого предназначен
csrf token как бы вообще не для этого предназначен...

Уже и этот вариант пробили.
да его и пробивать не нужно, понятия не имею откуда пошло что это защита от ботов, это вообще не так... csrf токен нужен для защиты от межсайтовой подделки запросов. а от ботов которые спам шлют в формы он вообще никак не защищает, от слова совсем
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

Fedor Vlasenko

  • Живу я здесь
  • 3827
  • 721 / 7
  • Все начинается с Value
вы наверное читает только то, что хотите сами видеть
я ведь написал строкой  ниже
Код
Joomla.getOptions("csrf.token")
этот код выполняется на клиенте с поддержкой js
и сверяется с сессией
для реализации такого бота вам нужно, чтобы бот работал c js и поддерживал cookies
*

Director.Gq

  • Осваиваюсь на форуме
  • 30
  • 1 / 1
Да в общем Интересно что у вас получится к чему это приведет...
удастся ли Вам победить ваших БОТОВ ?
Будем следить за Темой держите нас в курсе
*

rsn

  • Захожу иногда
  • 245
  • 13 / 0
Да в общем Интересно что у вас получится к чему это приведет...
удастся ли Вам победить ваших БОТОВ ?
Будем следить за Темой держите нас в курсе
Всё никак руки не дойдут выложить на Git. А так, вообще: теперь ботов 0.

Выше были определенные высказывания в пользу правильности/неправильности. Потом ещё тоже отвечу )
Есть одна хорошая компания, с которой приятно иметь дело )
*

dmitry_stas

  • Легенда
  • 13064
  • 1225 / 8
вы наверное читает только то, что хотите сами видеть
я вижу только то, что вы написали. и то, что вы написали - это неверно.

для реализации такого бота вам нужно, чтобы бот работал c js и поддерживал cookies
а это редкость сейчас? любой нормальный бот для спама такое умеет, это не 2011 год
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Есть расширения для создания форума на сайте Joomla?

Автор Barmal

Ответов: 2
Просмотров: 168
Последний ответ 07.12.2019, 23:57:11
от wishlight
SW JProjects - Менеджер цифровых проектов для Joomla! CMS™

Автор Septdir

Ответов: 18
Просмотров: 1167
Последний ответ 06.12.2019, 16:56:33
от Septdir
Бесплатный плагин импорта экспорта данных в поля материалов Joomla - CFI

Автор zikkuratvk

Ответов: 0
Просмотров: 150
Последний ответ 26.11.2019, 13:30:51
от zikkuratvk
jYProExtra - Плагин расширяющий возможности YOOtheme Pro

Автор Septdir

Ответов: 7
Просмотров: 849
Последний ответ 19.11.2019, 15:03:52
от Septdir
JL Like - Социальные кнопки для Joomla (новый взгляд)

Автор zikkuratvk

Ответов: 617
Просмотров: 77280
Последний ответ 18.11.2019, 12:30:29
от zikkuratvk