OWASP AppSensor: отправка событий не вызывает ответы

Я запускаю AppSensor согласно инструкциям на https://github.com/jtmelton/appsensor/blob/master/sample-apps/DemoSetup.md.

Все выглядит красиво, когда я запускаю генератор данных клиента.

Я добавляю события из http://localhost:8085/api/v1.0/events из моего настольного приложения, и они отображаются на приборной панели, а также на карте. Но они не вызывают ответы.

Запросы, которые я отправляю из моего приложения, идентичны запросам, сгенерированным генератором данных клиента. Несколько примеров ниже:

{"user":{"username":"bob","ipAddress":{"address":"10.10.10.1","geoLocation":{"latitude":37.596758,"longitude":-121.647992}}},"detectionPoint":{"category":"Input Validation","label":"IE1","responses":[]},"timestamp":"2017-05-08T17:07:06.076Z","detectionSystem":{"detectionSystemId":"myclientapp"},"metadata":[]}

{"user":{"username":"bob","ipAddress":{"address":"10.10.10.1","geoLocation":{"latitude":37.596758,"longitude":-121.647992}}},"detectionPoint":{"category":"Input Validation","label":"IE2","responses":[]},"timestamp":"2017-05-08T17:07:06.076Z","detectionSystem":{"detectionSystemId":"myclientapp"},"metadata":[]}

{"user":{"username":"bob","ipAddress":{"address":"10.10.10.1","geoLocation":{"latitude":37.596758,"longitude":-121.647992}}},"detectionPoint":{"category":"Request","label":"RE3","responses":[]},"timestamp":"2017-05-08T15:56:47.473Z","detectionSystem":{"detectionSystemId":"myclientapp"},"metadata":[]}}

{"user":{"username":"bob","ipAddress":{"address":"10.10.10.1","geoLocation":{"latitude":37.596758,"longitude":-121.647992}}},"detectionPoint":{"category":"Authentication","label":"AE4","responses":[]},"timestamp":"2017-05-08T17:07:06.076Z","detectionSystem":{"detectionSystemId":"myclientapp"},"metadata":[]}

Я не могу понять, почему мои запросы не вызывают ответы от сервера, где идентичные запросы от инструмента генератора данных делают.

ОБНОВЛЕНИЕ 1: меня спросили, посылаю ли я достаточно событий, чтобы вызвать ответ, и ответ - да.

ОБНОВЛЕНИЕ 2: меня попросили поделиться журналом сервера, и вот оно.

ОБНОВЛЕНИЕ 3: меня попросили попробовать cURL, и я сделал. Те же результаты. То есть события записываются, но ответ не запускается. Я отправил запрос curl (с идентичной отметкой времени) ниже примерно 50 раз.

curl -v --header "Content-Type: application/json" --header "X-Appsensor-Client-Application-Name2: myclientapp" -X POST -d '{"user":{"username":"bob","ipAddress":{"address":"10.10.10.1","geoLocation":{"latitude":37.596758,"longitude":-121.647992}}},"detectionPoint":{"category":"Input Validation","label":"IE1","responses":[]},"timestamp":"2017-05-08T15:56:47.473Z","detectionSystem":{"detectionSystemId":"myclientapp"},"metadata":[]}' http://localhost:8085/api/v1.0/events

Тот же запрос отформатирован для Windows

curl -v --header "Content-Type: application/json" --header "X-Appsensor-Client-Application-Name2: myclientapp" -X POST -d "{\"user\":{\"username\":\"bob\",\"ipAddress\":{\"address\":\"10.10.10.1\",\"geoLocation\":{\"latitude\":37.596758,\"longitude\":-121.647992}}},\"detectionPoint\":{\"category\":\"Input Validation\",\"label\":\"IE1\",\"responses\":[]},\"timestamp\":\"2017-05-08T15:56:47.473Z\",\"detectionSystem\":{\"detectionSystemId\":\"myclientapp\"},\"metadata\":[]}" http://localhost:8085/api/v1.0/events

ОБНОВЛЕНИЕ 4: Спасибо @jtmelton за его помощь. Глядя на код, я понял, что мой сервер appsensor и мое клиентское приложение используют разные часовые пояса. Как только я добавил часовой пояс к своим временным меткам, это сработало!!!

2 ответа

Решение

Обратитесь к обновлению 4 по этому вопросу. Всегда включайте часовой пояс в вашу метку времени. В моем случае метки времени запроса были раньше времени сервера, поэтому они игнорировались.

C#

DateTime.Now.ToString ("гггг '-' ММ '-'dd'T'HH':' мм ':'ss.fffzzz")

В моем понимании демонстрация appsensor не даст вам никакого значимого ответа REST на ваш запрос.

Сервер REST / WebSocket из демоверсии зависит от appsensor-ws-rest-server-2.2.0.jar который предоставляет конечные точки в классе RestRequestHandler. Любой пост в /api/v1.0/events или же /api/v1.0/attacks ответил с HTTP 201 - created по методу public void addEvent(Event event), По некоторым причинам в моих тестах CURL я наблюдал HTTP 204 - no content, но не бери в голову.

Ответы можно прочитать из /api/v1.0/responses конечная точка, например, используя метод EventManagerpublic Collection<Response> getResponses(String earliest) где earliest является значением DateTime. поскольку earliest является единственным параметром запроса, вы получите ответы для всех пользователей, которые хранятся на сервере, начиная с указанного dateTime. С демоверсией REST / WebSocket из демо-версии я не вижу возможности получать уведомления от appsensor, вам нужно явно запрашивать ответы от вашего приложения.

Другие вопросы по тегам