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, вам нужно явно запрашивать ответы от вашего приложения.