Jump to content

Условие при котором узнаем, бот или реальный посетитель


Zuldek199

Recommended Posts

{{if }} 

{{endif}}

Как в шаблонных условиях прописать, узнать является текущий посетитель поисковым ботом или нет. Вроде в php есть функция useragent, по которой возможно узнать браузер и тп. И если в строчке присутствует 'bot'. То есть если есть вхождения, тогда в данный момент возможно узнать что текущую страницу подгрузил бот.

Link to comment
Share on other sites

В режиме разработчика в плагинах создаем такой хук не шаблона (не помню как он называется) и выбираем там класс \IPS\core\modules\front\system\plugins

В этом хуке создаем метод класса:

public function isBot() {
	$userAgent = $_SERVER['HTTP_USER_AGENT'];
    $bots = [
        'Googlebot',
        'Bingbot',
        'Slurp',
        'DuckDuckBot',
        'Baiduspider',
        'YandexBot',
        'Sogou',
        'Exabot',
        'facebot',
        'ia_archiver',
        'Twitterbot',
        'facebookexternalhit',
        // Добавьте другие строки, которые могут быть в юзер-агентах ботов
    ];

    foreach ($bots as $bot) {
        if (stripos($userAgent, $bot) !== false) {
            return true;
        }
    }

    return false;
}

public function getBotName() {
	// добавьте тут вывод имени поискового бота по аналогии с методом выше
	return $bot;
}

 

В шаблоне:
 

{{$plugins = new \IPS\core\modules\front\system\plugins;}}                     
{{if ($plugins->isBot())}} 
	<p>Это бот: {{$plugins->getBotName();}}</p>
{{endif}}

 

Link to comment
Share on other sites

7 часов назад, Zuldek199 сказал:

И если в строчке присутствует 'bot'

а вот насчет этого хочу предупредить.

Любой пользователь может писать в юзер агент все что угодно. В том числе html и js код. Поэтому не должно быть никаких проверок на bot и прочих универсальных решений. Все боты должны быть четко прописаны и все имена ботов для вывода на страницу должны быть храниться на сервере.

Если найдено совпадение в юзерагенте - вывести имя бота из своего списка. Строки и подстроки из юзерагента выводить категорически запрещено.

Даже если вы запретите спецсимволы чтобы предотвратить вывод кода, посетитель может засунуть туда просто 100500 символов и они отобразятся на странице.

Link to comment
Share on other sites

17 часов назад, Zuldek199 сказал:
{{if }} 

{{endif}}

Как в шаблонных условиях прописать, узнать является текущий посетитель поисковым ботом или нет. Вроде в php есть функция useragent, по которой возможно узнать браузер и тп. И если в строчке присутствует 'bot'. То есть если есть вхождения, тогда в данный момент возможно узнать что текущую страницу подгрузил бот.

самый простой вариант методом ips

{{if \IPS\Http\UserAgent::parse()->spider}}
ты спидер
{{endif}}

но там мало ботов, для добавления регулярок нужно расширять $searchEngineUseragents в \IPS\Http\UserAgent
 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Ваша ссылка была автоматически строена.   Отображать как обычную ссылку

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...