1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/kekingcn-kk-anti-reptile

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Обзор

KK-Anti-Reptile — это открытый интерфейс защиты от сканирования, основанный на компоненте Spring-Boot для распределённых систем.

Открытые адреса

https://gitee.com/kekingcn/kk-anti-reptile

https://github.com/kekingcn/kk-anti-reptile

Системные требования

  • На основе разработки Spring-boot (поддерживаются версии Spring-boot 1.x и 2.x).
  • Требуется использование Redis.

Рабочий процесс

KK-Anti-Reptile использует SpringMVC-перехватчик для фильтрации запросов через механизм расширения Spring-Boot. Это позволяет создать экземпляр Spring HandlerInterceptor Bean и внедрить его в Servlet-контейнер. Таким образом, запросы фильтруются.

В фильтре KK-Anti-Reptile используется цепочка ответственности для интеграции различных правил фильтрации. Предоставляется абстрактный интерфейс, который может быть расширен вызывающей стороной.

Перехват вызовов по цепочке фильтрует запросы. Если запрос не проходит фильтрацию, он блокируется с кодом состояния 509. Затем отображается страница ввода проверочного кода. После правильного ввода проверочного кода правила фильтрации сбрасываются.

На данный момент в цепочке правил есть два правила:

  • ip-rule: правило ip-rule подсчитывает количество запросов в текущем временном окне и разрешает доступ, если оно меньше установленного максимального количества запросов. Можно настроить временное окно, максимальное количество запросов и белый список IP-адресов.
  • ua-rule: правило ua-rule анализирует User-Agent запроса, чтобы получить информацию об операционной системе, устройстве, браузере и т. д. Доступ можно настроить для различных аспектов.

Страница проверки

После срабатывания правил защиты от краулеров и антифрода генерируется проверочный код, который блокирует запрос. Существует несколько комбинаций проверочных кодов, и доступ предоставляется после правильного ввода кода.

Проверочные коды могут быть представлены в виде китайских или английских букв и цифр, а также в виде простых арифметических задач. Каждый тип проверочного кода может быть представлен статическим изображением или анимированным GIF-изображением. В настоящее время существует шесть типов проверочных кодов. Все типы проверочных кодов появляются случайным образом. Современные технические средства распознавания имеют очень высокую сложность, что эффективно предотвращает крупномасштабное сканирование данных краулерами.

Использование

Использование очень простое. Необходимо только добавить зависимость maven KK-Anti-Reptile и настроить включение KK-Anti-Reptile.

  1. Добавление зависимости maven:
<dependency>
    <groupId>cn.keking.project</groupId>
    <artifactId>kk-anti-reptile</artifactId>
    <version>1.0.0-RELEASE</version>
</dependency>
  1. Настройка включения KK-Anti-Reptile: в файле конфигурации spring-boot добавьте следующую конфигурацию anti.reptile.manager.enabled.
anti.reptile.manager.enabled = true
  1. Конфигурация интерфейса, требующего защиты от сканирования: можно настроить защиту от сканирования двумя способами: через файл конфигурации или аннотацию. Оба метода можно использовать одновременно.
  • Использование файла конфигурации: в файле конфигурации spring-boot добавьте следующий параметр anti.reptile.manager.include-urls, указав URI интерфейса, подлежащего защите от сканирования (например, /client/list). Поддерживается сопоставление с регулярными выражениями (например, ^/admin/.*$). Несколько значений разделяются запятыми.
anti.reptile.manager.include-urls = /client/list,/user/list,^/admin/.*$
  • Использование аннотации: добавьте аннотацию @AntiReptile к соответствующему интерфейсу контроллера требуемого интерфейса. Пример:
@RestController
@RequestMapping("/demo")
public class DemoController {

    @AntiReptile
    @GetMapping("")
    public String demo() {
        return "Hello,World!";
    }

}
  1. Обработка страницы проверки на стороне клиента: необходимо добавить перехват запросов на стороне клиента. При возврате статуса ответа 509 необходимо отобразить новую страницу. Содержимое ответа должно быть передано на эту страницу. Затем необходимо передать параметр baseUrl в интерфейс на этой странице. Например, при использовании axios:
import axios from 'axios';
import {baseUrl} from './config';

axios.interceptors.response.use(
  data => {
    return data;
  },
  error => {
    if (error.response.status === 509) {
      let html = error.response.data;
      let verifyWindow = window.open("","_blank","height=400,width=560");
      verifyWindow.document.write(html);
      verifyWindow.document.getElementById("baseUrl").value = baseUrl;
    }
  }
);

export default axios;

Примечание

  1. Для пользователей Apollo Client необходимо включить Bootstrap. Для пользователей Apollo Client, поскольку компонент использует @ConditionalOnProperty, необходимо добавить следующую конфигурацию в файл application.properties или bootstrap.properties (версия Apollo Client должна быть 0.10.0 или выше). Подробнее см. в документации Apollo (https://github.com/ctripcorp/apollo/wiki/Java%E5%AE%A2%E6%88%B7%E7%AB%AF%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97#3213-spring-boot%E9%9B%86%E6%88%90%E6%96%B9%E5%BC%8F%E6%8E%A8%E8%8D%90).
apollo.bootstrap.enabled = true
  1. Требуется подключение к Redisson. Если проект использует Redisson, KK-Anti-Reptile автоматически получит экземпляр объекта RedissonClient. Если нет, необходимо добавить следующие параметры подключения Redisson в файл конфигурации.
spring.redisson.address = redis://192.168.1.204:6379
spring.redisson.password = xxx

Таблица конфигурации

Все конфигурации в spring-boot имеют автоматические подсказки и описания. Имя всех конфигураций начинается с anti.reptile.manager. Вот таблица всех параметров конфигурации и их описаний:

NAME 描述 默认值 示例
  • Примечание: в тексте перевода могут встречаться неточности или ошибки, связанные с особенностями исходного текста или техническими ограничениями. | Включено | 是否启用反爬虫插件 | Да | Да | | --- | --- | --- | --- | | Режим глобального фильтра | 是否启用全局拦截模式 | Нет | Да | | Включить URL-адреса | 局部拦截时,需要反爬的接口列表,以','分隔,支持正则匹配。全局拦截模式下无需配置 | Пусто | /client,/user,^/admin/.$ | | Включен IP-фильтр | 是否启用 IP Rule | Да | Да | | Время истечения срока действия (мс) | 时间窗口长度(ms) | 5000 | 5000 | | Максимальный размер запроса | 单个时间窗口内,最大请求数 | 20 | 20 | | Автоматическое снятие блокировки после срабатывания правила (с) | 命中规则后自动解除时间(单位:s) | 10 дней | 20 | | Игнорировать IP | IP 白名单,支持后缀''通配,以','分隔 | Пусто | 192.168.*,127.0.0.1 | | Включён фильтр по User-Agent | 是否启用 User-Agent Rule | Да | Да | | Разрешён доступ для Linux | 是否允许 Linux 系统访问 | Нет | Нет | | Разрешён доступ с мобильных устройств | 是否允许移动端设备访问 | Да | Да | | Разрешён доступ со стационарных компьютеров | 是否允许移 PC 设备访问 | Да | Да | | Разрешён доступ для устройств интернета вещей | 是否允许物联网设备访问 | Нет | Нет | | Разрешено использование прокси | 是否允许代理访问 | Нет | Нет |

Свяжитесь с нами

Если у вас возникнут какие-либо вопросы во время использования, вы можете присоединиться к официальному QQ-чату: 613025121 для консультаций и обсуждений.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Быстро подключаемые компоненты для защиты от краулеров и интерфейсного скрэтчинга в среде Spring Boot Stater. Развернуть Свернуть
Apache-2.0
Отмена

Обновления (1)

все

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/kekingcn-kk-anti-reptile.git
git@api.gitlife.ru:oschina-mirror/kekingcn-kk-anti-reptile.git
oschina-mirror
kekingcn-kk-anti-reptile
kekingcn-kk-anti-reptile
master