Рубрики
Без рубрики

ColdFusion isIPInRange() UDF для поддержки IPv4, IPv6, CIDR и регулярных выражений

Сегодня утром я получил сообщения о 502 ошибках сервера после того, как наша платформа веб-приложений случайно… Помеченный coldfusion, cidr, регулярным выражением, java.

Сегодня утром я получил сообщения о 502 ошибках сервера после того, как наша платформа веб-приложений случайно внесла в черный список нашего поставщика CDN/WAF. Я хотел убедиться, что это больше не повторится, занеся их IP-адреса в белый список, но у них много IP-адресов, и их данные были доступны только в обозначениях CIDR IPv4 и IPv6.

ColdFusion не имеет никаких встроенных инструментов, связанных с IP, кроме определения IP текущего хоста… так что я отправляюсь на поиски потенциального существующего решения.

Я проверил CFDocs и обнаружил, что существует функция isIPInRange (без каких-либо примеров), но это была функция только для Lucee . Функция Lucee принимает либо список, разделенный запятыми, либо массив определений IP, но не поддерживает CIDR или регулярные выражения.

Я проверил CFLib и обнаружил, что существует isIPInRange UDF с тем же именем с 2005 года, который использовал список значений регулярных выражений, но он не поддерживал CIDR или диапазон, разделенный тире (ну, если вы не хотите писать для этого регулярное выражение).

Я использовал метод, который Анджо Гахар написал в блоге в 2008 году, что демонстрирует использование |/недокументированного coldfusion.util. Класс утилит IP-адреса для определения того, является ли строка допустимым IP-адресом IPv4 или IPv6 или нет.

Затем я нашел сообщение в блоге 2018 года от Бен Нидл документирует свою реализацию использования Commons IP Math для проверки, существует ли IPv4 или IPv6 IP в диапазоне CIDR |/, но это зависит от отдельной библиотеки java (MIT), называемой Commons IP Math . Пример кода также поддерживал только один диапазон CIDR.

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

  • Выполняет проверку IPv4 и IPv6
  • Поддерживает обозначение диапазона CIDR IPv4 и IPv6
  • Поддерживает список или массив диапазонов
  • Поддерживает правила диапазона регулярных выражений
  • Поддерживает диапазон IP-адресов, разделенных тире
  • Поддерживает один IP (по сравнению с диапазоном)
  • Требуется Общин Файл IP Math JAR

Поскольку все мои веб-приложения находятся за CDN/WAF и могут быть негативно затронуты, если CDN будет занесен в черный список, я решил, что для меня лучше добавить JAR в глобальный путь вместо использования Javaloader. Я также не писал это как отдельный CFC, как это делает Бен. Большинство моих проектов используют глобальную библиотеку UDF, и это был самый простой подход к интеграции, поскольку мне не пришлось бы вручную обновлять каждый проект.

исходный код

Вот ссылка на суть . Из-за требования к JAR, это, к сожалению, не может быть продемонстрировано с помощью TryCF .

Оригинал: “https://dev.to/gamesover/coldfusion-isipinrange-udf-to-support-ipv4-ipv6-cidr-regex-212h”