Сегодня утром я получил сообщения о 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”