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

rsn

  • Захожу иногда
  • 249
  • 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

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

rsn

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

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

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

robert

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

rsn

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

robert

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

rsn

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

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

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

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

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

rsn

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

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

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

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

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



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

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

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

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

ProtectYourSite

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

rsn

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

Septdir

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

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

robert

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

rsn

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

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

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

Fedor Vlasenko

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

Septdir

  • Живу я здесь
  • 3185
  • 156 / 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

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

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

Fedor Vlasenko

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

Director.Gq

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

rsn

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

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

dmitry_stas

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

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

Fedor Vlasenko

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

dmitry_stas

  • Легенда
  • 13098
  • 1227 / 8
где доводы и аргументы? что за общие фразы?
какие вам именно аргументы и доводы нужны? еще раз: csrf токен вообще НЕ предназначен для защиты от спама, у него абсолютно другая функция. применять его для защиты от спама не только неполезно, а и вредно. этот токен НЕ должен быть доступен яваскрипту

читайте раздел защита
что именно мне там читать? какое именно отношение имеет подделка межсетевых запросов к спаму?

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

Fedor Vlasenko

  • Живу я здесь
  • 3829
  • 721 / 7
  • Все начинается с Value
еще раз: csrf токен вообще НЕ предназначен для защиты от спама
проcтите, но вы как ребенок
любое действие затрудняющее действие называется противодействием и защитой
без токена контроллер не отработает это и есть защита (здесь мы не вдаемся в методы обхода защит)
этот токен НЕ должен быть доступен яваскрипту
это ваше личное мнение? разработчики так не считают. Внедрили его поддержку в js, отправляем AJAX запросы используя токен
для прочтения пару статей
https://habr.com/ru/post/235247/
https://habr.com/ru/post/318748/
на этом откланиваюсь, нет времени
*

dmitry_stas

  • Легенда
  • 13098
  • 1227 / 8
Цитировать
разработчики так не считают
и что? они догма? :) доступность csrf токена равносильна его отсутствию. надеюсь вы это понимаете? зачем вы мне приводите статье об csrf защите, когда у нас разговор о спаме? нет времени - я могу понять. не могу понять когда пытаются что-то доказать не понимая темы :)
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

robert

  • Живу я здесь
  • 4788
  • 438 / 18
Ну, вы оба понимаете, что каждый прав по-своему, не прав только тон разговора ^-^. А токен у Joomla только 1, как бы он там не назывался.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

dmitry_stas

  • Легенда
  • 13098
  • 1227 / 8
та нее... на самом деле все норм :) у нас просто с Федором привычка так общаться :)
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Модуль обратного звонка для Joomla 3.0 mod_simplecallback (с SMS уведомлениями)

Автор bolonia

Ответов: 272
Просмотров: 38252
Последний ответ 14.01.2020, 00:20:24
от beliyadm
jYProExtra - Плагин расширяющий возможности YOOtheme Pro

Автор Septdir

Ответов: 9
Просмотров: 1051
Последний ответ 08.01.2020, 15:39:41
от Septdir
Бесплатный плагин импорта экспорта данных в поля материалов Joomla - CFI

Автор zikkuratvk

Ответов: 2
Просмотров: 278
Последний ответ 04.01.2020, 21:27:32
от zikkuratvk
Есть расширения для создания форума на сайте Joomla?

Автор Barmal

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

Автор Septdir

Ответов: 18
Просмотров: 1240
Последний ответ 06.12.2019, 16:56:33
от Septdir