Настройка одноразового номера на сервере Tomcat - PullRequest
0 голосов
/ 09 апреля 2020

Прежде чем я начну, прошу прощения за мою неграмотность в отношении безопасности. Я нашел решение в Google, но я не совсем знаю, какие или как решения могут быть применены. У меня есть приложение, которое звонит на мой сервер Tomcat (он обслуживает отчеты JasperReport). Вызов выглядит примерно так:

http://example.com/ReportServlet?report_id=123&param1=a&param2=b

Если вы позвоните, сервлет вернет отчет. Моя проблема в том, что пока вы продолжаете делать этот звонок, он будет возвращать отчет независимо от того, сколько раз вы его называете. Я хочу, чтобы отчет можно было запускать только при нажатии кнопки «Запустить отчет» внутри моего приложения. Так что если вы запустите этот URL в браузере, он не должен работать. Я думал об использовании какого-то одноразового номера, что при нажатии кнопки она генерируется и может быть использована для вызова отчета только один раз. Прямо сейчас у меня есть решение, реализованное, когда кнопка нажата, генерируется случайная строка, вставляется в базу данных, эта строка передается в URL как параметр (http://example.com/ReportServlet?report_id=123&param1=a&param2=b&nonce=somesha256, сервлет читает этот параметр и проверяет базу данных, если он действительно помечает строку как недействительную. Это не чистое решение, мне было интересно, есть ли у tomcat (или даже JasperReports) решение, похожее на nonce?

1 Ответ

1 голос
/ 09 апреля 2020

Мне было интересно, есть ли у tomcat (или даже в JasperReports) решение, похожее на одноразовый номер?

Tomcat: Нет.

JasperReports: я не знаю , Я не ожидаю, что он будет иметь это, потому что его сфера отличается от ограничения доступа к чему-либо. (Кто-то исправит меня, если я ошибаюсь, добавив к вопросу тег jasper-reports)

Вы можете легко реализовать это в своем приложении, хотя, например, в качестве фильтра сервлетов, который проверяет все, что вы решили go с: Если одноразовый номер присутствует: проверьте его действительность, затем продолжите обработку обычного запроса, в противном случае просто вернитесь с сообщением об ошибке.

Обычно для этого требуется, чтобы вы сохранили действительные одноразовые номера (потенциально для которых отчет и / или параметры также действительны) в некотором хранилище (обычно в базе данных) и удалили / пометили его при загрузке или тайм-ауте.

Я почти ожидаю, что сторона проверки (например, ServletFilter) будет тривиальной, по сравнению с дополнительной административной работой, которая вам понадобится для распространения невостребованных URL, но это не тот вопрос, о котором вы спрашиваете.

...