Безопасность Java Web App с использованием файлов cookie - PullRequest
1 голос
/ 28 мая 2011

Я заканчиваю задание Cattle Drive, где небольшое веб-приложение Java управляет библиотекой фильмов для клиента.Задача состоит в том, чтобы обеспечить некоторую безопасность приложения, использующего файлы cookie, чтобы «хакер» не мог просто угадать один из URL-адресов, который приведет к другой части приложения.Пользователь будет перенаправлен на сайт и не сможет просматривать другие страницы до входа в систему.

Части веб-приложения:

1. index.html
2. VideoServlet
3. listvideos.jsp
4. addvideo.jsp
5. videologin,jsp

Точка входа - запросURL http://localhost:8080/videos,, который загружает файл index.html.На этой странице просто есть ссылка, которая перенаправляет пользователя на VideoServlet.Оттуда сервлет перенаправляет HTTP-запрос и ответ на listvideos.jsp, в котором есть ссылка для добавления видео, если пользователи хотят это сделать.

У меня проблемы с пониманием того, как реализовать защиту с помощью файлов cookie, сохраняя все в шаблоне MVC2 (сервлет является контроллером, jsp - это представление).

Вот поток программ, который я придумал, но я думаю, что где-то упускаю суть:

  1. пользователь вводит URL http://localhost:8080/videos,, который по умолчанию извлекает файл index.html.

  2. файл index.html в основном отправляетHTTP Get to VideoServlet.Сервлет каким-то образом знает, что пользователь еще не вошел в систему, поэтому перенаправляет запрос / ответ на videologin.jsp.

  3. , логин представляется и запрашивает у пользователя пароль (этоэто стандартная форма HTML).Пользователь вводит пароль и нажимает кнопку отправить.Это отправляет HTTP-сообщение сервлету.

  4. сервлет проверяет пароль и, если он правильный, пользователь входит в систему и сервлет пересылает на listvideos.jsp.

Я не понимаю, откуда приходят файлы cookie или как они могут помочь не дать хакеру угадать URL-адрес и получить прямой доступ, например, к addvideos.jsp.Используется ли cookie для проверки того, что пользователь уже вошел в систему?

Ответы [ 2 ]

3 голосов
/ 28 мая 2011

Cookies - это некоторые текстовые значения (обычно хранящиеся в текстовых файлах в кеше браузера), которые вы можете использовать для хранения данных на стороне клиента.Когда пользователь отправляет запрос на определенный URL-адрес, все cookie-файлы, хранящиеся на этом сервере (домене), передаются вместе с ним, чтобы сервер мог считывать эти значения.

В Java вы можете установить cookie, напримерэто в вашем сервлете (в вашем случае, когда пользователь входит в систему, создайте cookie и сохраните в нем значение (например, username = josh). Вы можете сделать это в своем сервлете для входа в систему после успешного входа в систему.

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    // Verify login, and get the username. Assume it's josh

    Cookie cookie = new Cookie("username", "josh");
    cookie.setMaxAge(60*60*24); // 24 hours for expiry
    response.addCookie(cookie);

}

Позже вы можете проверить наличие куки, и если он существует, то пользователь уже вошел в систему. Если нет, вы можете отправить перенаправление на страницу входа.

Вы можете проверитьтакие куки в вашем сервлете.

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    Cookie[] cookies = request.getCookies();

    String username = null;

    for (Cookie c : cookies) {
        if ("_username".equals(c.getName())) {
            username = c.getValue();
            break;
        }
    }

    if (username == null) {
        // Not Logged in. Redirect to Login
    }

    // User Logged In. Proceed
}

Вместо того, чтобы помещать этот код во все ваши сервлеты + JSP, вы можете легко поместить его в класс фильтра сервлетов. Подробнее об этом можно прочитать здесь: http://javaboutique.internet.com/tutorials/Servlet_Filters/

В идеале вы могли бы также предоставить функцию выхода из системы, которая удалит значение, назначенное для файла cookie с именем пользователя, заменив его на null.

Я показал приведенный выше пример, потому что yoВы упомянули, что вам нужно использовать куки для вашего назначения.Но если вы можете, попробуйте использовать сеансы (которые, в свою очередь, большую часть времени используют файлы cookie) для хранения зарегистрированных данных пользователя.В сеансах вы можете использовать тайм-ауты сеансов, чтобы гарантировать, что незанятые пользователи будут автоматически выходить из системы через некоторое время и т. Д.

0 голосов
/ 28 мая 2011

файл index.html в основном отправляет HTTP Get в VideoServlet. Сервлет почему-то знает, что пользователь еще не вошел в систему, поэтому перенаправляет запрос / ответ на videologin.jsp.

как-то знает, связано с поиском cookie в запросе. Убедитесь, что содержимое cookie-файла защищено кодом аутентификации сообщения , поэтому вы можете быть уверены, что ваш сервер действительно выдал cookie-файл. Также было бы неплохо зашифровать в cookie определенный IP-адрес, используемый клиентом, чтобы злоумышленник не смог похитить cookie . (Если клиент меняет IP-адрес во время сеанса, требовать повторного входа в систему не так уж и страшно. Возможно, это раздражает, но не неожиданно.)

сервлет проверяет пароль и, если он правильный, пользователь входит в систему и сервлет пересылает на listvideos.jsp.

пользователь вошел в систему - установить cookie в браузер для будущих запросов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...