Перехватывать и фильтровать HTTP-запрос

Я хочу перехватывать/обнюхивать входящие HTTP-запросы и фильтровать/изменять их содержимое (до того, как они достигнут приложения).

«Fiddler», похоже, имеет эту функциональность, но для интеграции и переносимости я бы предпочел иметь для этого какую-то библиотеку на Java/C. Как JPCAP, например. Он перехватывает IP-пакеты, но, как уже говорилось, мне нужно перехватывать HTTP-запросы более высокого уровня.

Кроме того, как можно таким же образом читать/изменять запросы с шифрованием SSL (HTTPS)?

Заранее спасибо.


person Thomas    schedule 15.02.2013    source источник
comment
Это может оказаться полезным чтением - stackoverflow.com/ вопросы/2260710/.   -  person Perception    schedule 15.02.2013
comment
@Perception, это действительно выглядит полезно. Реализация в JPCAP определенно не обязательна. Должен ли я изучить несколько простых примеров HTTP (S) - прокси / фильтра?   -  person Thomas    schedule 15.02.2013
comment
Что точно вам нужно здесь сделать? Например, фильтрация для удаления «плохих» HTTP-запросов? Какое содержимое вам нужно изменить?   -  person Andrew Alcock    schedule 15.02.2013
comment
@Thomas - очень сложно сказать без конкретных требований. Вы пытаетесь отфильтровать все HTTP-запросы, поступающие на сервер? Домен? На сервер приложений? Или приложение, работающее на сервере приложений? Суть в том, что вам нужен обратный HTTP-прокси, написанный на Java, но уровень перехвата будет определять, какой трафик вы можете отслеживать, а также определять уровень фильтрации, которую вы сможете выполнять.   -  person Perception    schedule 15.02.2013
comment
@Perception, мне нужно будет прочитать входящий HTTP-запрос и определить, может ли он перейти, например, к веб-службе. Это потребует чтения источника и адресата (IP, порты), а также содержимого запроса (SOAP, XML-документ). Итак, в основном, проверка на вредоносное поведение и контент.   -  person Thomas    schedule 15.02.2013
comment
@Thomas - это больше похоже на то, что вам нужен механизм маршрутизации, например Apache Camel.   -  person Perception    schedule 15.02.2013
comment
@ Восприятие, я так не думаю. Не мне определять маршрут к конечной точке веб-сервиса. Я должен определить, является ли запрос, направленный к веб-сервису, вредоносным или нет. И сбросить, если надо.   -  person Thomas    schedule 15.02.2013
comment
@Thomas: веб-службы находятся на одном сервере приложений или на нескольких? На каких технологиях работают веб-сервисы (Java, C#, Python, PHP и т. д.)?   -  person Andrew Alcock    schedule 15.02.2013
comment
@Thomas - давайте продолжим этот разговор в чате.   -  person Perception    schedule 15.02.2013


Ответы (1)


Пробовали ли вы фильтры сервлетов?

Они обертывают HTTP-запрос и поэтому могут изменять запрос до того, как он попадет в сервлет, а также могут изменять ответ. Они могут использоваться (и используются) для обертывания сторонних сервлетов и JSP.

Поскольку они находятся в контейнере сервлетов, у вас есть безопасный незашифрованный доступ как к запросу, так и к ответу.

person Andrew Alcock    schedule 15.02.2013
comment
Я не знаком с сервлетами. Потребуется ли для этого быть частью какого-то конкретного Java-сервера? Потому что я бы хотел, чтобы он был полностью независим от того, куда направляется http-запрос. Насколько я понимаю, это требование полностью исключает возможность фильтрации содержимого, зашифрованного с помощью SSL? - person Thomas; 15.02.2013
comment
Ааа, я догадался по тегу java в вопросе, что вы пытались проверить HTTPRequest для сервера Java, поэтому сервлеты будут работать нормально. Чтобы ответить на ваш вопрос, сервлеты - это классы Java, обрабатывающие HTTP-запросы и находящиеся в контейнере веб-приложений (например, Tomcat, WebSphere, Weblogic и другие). Однако фильтры можно добавлять в существующий контейнер веб-приложений без какой-либо модификации кода существующих приложений. - person Andrew Alcock; 15.02.2013