G|Translate: English EN Français FR Deutsch DE Italiano IT Русский RU Español ES

Защищаем скрипт PHP от прямого вызова

5/5 - (1 голос)

В папке плагинов WordPress лежит замечательный файл index.php

Защищаем скрипт PHP от прямого вызова

«Молчание — золото»…

Это как раз для любителей вызвать папку «/wp-content/plugins/» напрямую.

В скриптах WordPress проверяется служебная переменная ABSPATH перед запуском

if (!defined ('ABSPATH')) exit;

При попытке выполнить скрипт вне пространства WP — на выход

А как быть с самодельным скриптом ,который запускается с Вашего сайта, но не из WP?

Для начала очевидное:

  1. Сделаем свой index.php
  2. Будем показывать его любопытным при прямом запуске

Вариант файла index.php

<?php
header($_SERVER['SERVER_PROTOCOL']." 404 Not Found");
echo 'Silence is golden';
exit;
?>

при показе файла дополнительно сообщаем боту, что ошибка 404 «файл не найден» — для разнообразия

Т.к Ваш скрипт запускается с какой-либо страницы Вашего сайта — то там должен быть рефер  с именем этой страницы. При прямом запуске — рефер будет пустой.

$backurl = $_SERVER['HTTP_REFERER'];
if (empty ($backurl)) { 
   include 'index.php';  
   exit;
}

Но это еще не все. Боты научились подделывать рефер (что бы их так просто не выгоняли), там может быть:

  • или Ваш домен mysite.ru с ошибкой вида www.mysite.ru
  • или URL адрес Вашего скрипта вида http://mysite.ru/test.php

С последним вариантом бот бился 6 часов с интервалом 1 сек… Подбирая разные варианты запуска php.

Атака шла с IP v6 — так что версия fail2ban 0.9 ничего тут не смогла сделать (поддержка IP6 только с версии 10.0).

Добавим дополнительные проверки

$backurl = $_SERVER['HTTP_REFERER'];
$domen_link = ((!empty($_SERVER['HTTPS'])) ? 'https' : 'http') . '://' . $domen;
//----------
if (empty ($backurl)) { 
   include 'index.php'; 
   exit;
}
if (mb_strpos($backurl, $domen_link)=== FALSE) { 
   include 'index.php'; 
   exit;
}
if (mb_strpos($backurl, '.php') > 0) { 
   include 'index.php'; // 
   exit;
}

где $domen_link — домен Вашего сайта с протоколом и поищем:

  • или отсутствие правильного домена в строке рефера (откуда был вызван скрипт)
  • или символы ‘.php’ в рефере

Если хотя бы одна из трех ловушек сработает — бот получит страницу index.php и 404 ошибку.

Бинго!

ВАЖНО: «символы ‘.php’ в рефере» ! 

Иногда вредные боты подменяют рефер и там вписывают название Вашего скрипта вида https://mysite.ru/script.php

А у Вас например, скрипт script.php после выполнения перезагружает страницу, откуда он был запущен https://mysite.ru

А там теперь, в рефере (бот подделал) — название Вашего же скрипта. Что произойдет? После захода такого бота сервер уйдет в цикличный вызов скрипта и ему будет нехорошо…

P.S.

Если разработчики ботов еще что придумают — допишем ловушки :)


Вы можете сохранить ссылку на эту страницу себе на компьютер в виде htm файла



В Вашем браузере должна быть настроена обработка ссылок mailto

Пишите на электронную почту (тема и email будут добавлены автоматически в письмо)
site_post@bk.ru

или просто скопируйте адрес e-mail




Нажмите "Подписаться"

Последние публикации

  • Статьи от: Автор
  • Рубрика: Блог
  • Сортировка: дата публикации по убыванию

Приключение пробелов и TAB в html

11.12.2021
Публикация 6 месяцев назад
Крайне забавная тема. Вот они. Мнемоника - специальный синтаксис для указания символов в html коде. Читаем Мнемоники в HTML Символ пробела, ASCII / UNICOD код 32 В спецификации HTML сделана интересная схема отображения пробелов: несколько пробелов между символами отображается как один несколько пробелов до символа отображаются как один один пробел на пустой строке не отображается внутри тэгов <pre> показываются все пробелы Зачем это сделано? Для удобства редактирования кода html руками :) Вот пример кода в тегах <pre> <p><b> пример текста пример текста пример текста </b></p> данный текст отобразится как пример текста...
(Читать полностью...)

Алгоритм суммы одинаковых элементов массива (на примере Python)

09.12.2021
Публикация 6 месяцев назад
Простая задача - посчитать количество одинаковых элементов массива Глазами легко видеть, что суммы правильные :) Попробуем теперь сделать тоже самое программно. Используем  Python.  Логика кажется очень простой: делаем счетчик складываем при смене элемента счетчик обнуляем выводим то, что насчитали Поехали. Будет картинками, правильный код в виде текста будет в конце статьи. Используем интерпретатор Питона по ссылке https://www.online-python.com/ Конечно, массив надо сначала отсортировать, что бы одинаковые элементы были рядом. Будем считать, что это сделано заранее. Позвольте, а где элемент "Три"? Так как он в конце массива, наше условие не сработало для...
(Читать полностью...)

Используем PHP и псевдографику для простой гистограммы

05.12.2021
Публикация 6 месяцев назад
Вот такой вывод "гистограммы" на основе данных массива   Нет никаких графических библиотек, чистый PHP и символ псевдографики ▓ (ASCII 2593). Разная насыщенность: значение более 70% от размера ячейки значение менее полного размера ячейки нет значения - фон Для построения используется цифровой массив - могут быть положительные и отрицательные данные. Массив ниже - данные вначале более актуальные по времени, поэтому в коде используется реверс (что бы эти данные оказались справа на гистограмме) $arr_count = array (150,145,20,10,5,0,99,85,41,34,21,56,75,46,78,34,125,130,128,10,15,24,50,30,20,0,10,20,30,50,30,20,10,5,0,5,10,20,30,50,150,145); Да  - точность не особо...
(Читать полностью...)

В Debian 11 нет команды iptables

09.10.2021
Публикация 8 месяцев назад
При вводе команды iptables получаем “command not found”. Это  как? А вот так :) По умолчанию теперь есть nftables. Включена в ядро Linux, начиная с версии 3.13, выпущенной 19 января 2014 года. Является заменой четырех команд: iptables ip6tables arptables ebtables Базовых отличий два: в одной команде объедена работа с протоколами IPv4 и IPv6 теперь нет изначально созданных таблиц - нужно создавать самостоятельно Таблицы могут быть одного из 6-ти семейств (families): ip — для обработки пакетов IPv4 ip6 — IPv6 inet — обрабатывает сразу и IPv4 и IPv6 (чтобы не дублировать одинаковые правила) arp — пакеты протокола ARP bridge — пакеты, проходящие через мост netdev...
(Читать полностью...)

Использование тройного === в программировании (PHP)

05.05.2021
Публикация 1 год назад
Любопытный пример. Программисты знают, что есть несколько вариантов "равно": присваивание $a = 10 сравнение if ($a == $b) {........} тождественное сравнение if ($a === $b) {........} Если с первыми двумя вариантами достаточно понятно, то третий вариант вызывает вопросы.  Тождественно равно - должны совпадать не только значения, но и типы переменных. Основные типы в PHP: число $a = 10; строка $b = '10'; // кавычки показывают, что внутри строка логическая переменная $c = FALSE; И например, условие $a == $b будет верным, т.к. сравниваются значения и интерпретатор PHP "понимает", что это десять. А вот условие $a === $b будет ложным, т.к....
(Читать полностью...)

Переадресация с https на http

11.03.2021
Публикация 1 год назад
Зачем это нужно? Есть несколько причин:  у нас сайт в разработке, пока работает на http, но поисковые боты проверяют и протокол https (и делают заглушку основным "зеркалом"...) у нас сайт в процессе переезда на другой сервер, а сертификат SSL может выпускаться от 10 мин до 1 часа (если проверка по DNS) - а в поиске все страницы сайта выдаются в виде https://site.ru Нужно как-то и поисковым машинам сказать, что это временно. И посетителям сайта, которые в этот момент перейдут с поиска - тоже об этом сказать. Основная статья по перевода на HTTPS Как включить HTTPS на сайте? ВАЖНО: браузер проводит проверку наличия SSL-сертификата раньше (при запросе https), чем...
(Читать полностью...)

Чем отличается сервер VPS от VDS

07.02.2021
Публикация 1 год назад
В чем разница VPS/VDS? Хитрые хостеры отвечают, что это одно и то же. А вот не совсем: VPS - (англ. virtual private server) - виртуальный частный сервер VDS - (англ. virtual dedicated server) - виртуальный выделенный сервер Server - он конечно сервер, но разный. Одна буква P/D - и разница есть. Читаем статью про хостинг Хостинг VPS Самые низкие тарифы VPS – на виртуализации OpenVZ Читаем статью Как выбрать VPS/VDS по параметрам Вот именно OpenVZ - это как раз виртуальный частный сервер VPS. Точнее - это контейнер (причем для его работы требуется модифицированное ядро Linux - в отличии от Docker), а не сервер. Внутри контейнера можно запускать только те программы, которые...
(Читать полностью...)

Что выбрать HDD или SSD у хостера?

08.12.2020
Публикация 1 год назад
Простой вопрос HDD vs SSD Казалось бы - что тут выбирать? Каждый, кто менял в своей Windows 7 на старом ПК диск HDD на SSD = радовался увеличению быстродействия системы. SSD - быстрее: нет механических систем да и электроны быстрее по микросхемам бегают Но у хостера - не домашний ПК, там сервер. И диски не по отдельности, а соединены в RAID-массив. Некоторые хостеры предлагаю очень простой выбор У некоторых выбор посложнее: SAS или SSD А что такое SAS HDD? Вот тут вся разница: SAS HDD - это серверные диски, которые работают по протоколу SAS (дуплекс - умеют писать и читать одновременно) SATA SSD - это диски, которые работают по протоколу SATA (полудуплекс -...
(Читать полностью...)