Телефон: 8-800-350-22-65
WhatsApp: 8-800-350-22-65

Статья опубликована в рамках: XXI Международной научно-практической конференции «Научное сообщество студентов: МЕЖДИСЦИПЛИНАРНЫЕ ИССЛЕДОВАНИЯ» (Россия, г. Новосибирск, 18 мая 2017 г.)

Наука: Информационные технологии

Скачать книгу(-и): Сборник статей конференции

Библиографическое описание:
Иванов А.А. ОБЕСПЕЧЕНИЕ БЕЗОПАСНОСТИ ДОСТУПА К ДАННЫМ В WEB-ПРИЛОЖЕНИЯХ, РАЗРАБОТАННЫХ НА ОСНОВЕ SPRINGFRAMEWORK // Научное сообщество студентов: МЕЖДИСЦИПЛИНАРНЫЕ ИССЛЕДОВАНИЯ: сб. ст. по мат. XXI междунар. студ. науч.-практ. конф. № 10(21). URL: https://sibac.info/archive/meghdis/10(21).pdf (дата обращения: 17.10.2021)
Проголосовать за статью
Конференция завершена
Эта статья набрала 0 голосов
Дипломы участников
У данной статьи нет
дипломов

ОБЕСПЕЧЕНИЕ БЕЗОПАСНОСТИ ДОСТУПА К ДАННЫМ В WEB-ПРИЛОЖЕНИЯХ, РАЗРАБОТАННЫХ НА ОСНОВЕ SPRINGFRAMEWORK

Иванов Анатолий Алексеевич

студент магистратуры, кафедра информационных систем НИУ ИТМО,

РФ,  г. Санкт-Петербург

Вопрос безопасности важен в приложениях, в которых предусматривается несколько ролей пользователей с разными пулами возможностей. В таких приложениях возникают ситуации, когда пользователям, обладающим ролью только из определенного набора ролей, нужно предоставить доступ к определенной функциональности. Остальным пользователям необходимо отказать в доступе. В web-приложениях очень важно предусматривать возможность подмены параметров в url-запросах. Подобные случаи разрешаются не логикой ограничения доступности определенных url-адресов, а внутренней логикой приложения. Качественно разработанное с точки зрения безопасности приложение не должно позволять посторонним лицам получать доступ к непредназначенному для них функционалу.

Для обеспечения безопасности в приложениях, разработанных на основе SpringFramework существует компонент SpringSecurity. Данный компонент предоставляет механизмы построения систем аутентификации и авторизации, а также другие возможности обеспечения безопасности для приложений, созданных с помощью SpringFramework. Для конфигурирования настроек безопасности используется файл securityContext.xml. Данный файл располагается в папке webapp/WEB-INF/spring вместе с файлом applicationContext.xml, конфигурирующим приложение.

Безопасность в системе на программном уровне осуществляется на 2 уровнях:

  • При помощи фиксирования доступности определенных url-паттернов пользователям с определенными ролями в системе;
  • При помощи использования директив для методов PreAuthorize.

В файл securityContext.xml  необходимо добавить секцию security:http, в которой можно задавать доступность того или иного url-паттерна. Под url-паттернами подразумеваются регулярные выражения семейств url-запросов. Доступность url-паттернов задается путем добавления строки вида: <security:intercept-urlpattern="<url-паттерн>" access="<логическое выражение>"/>. [1]

Если логическое выражение ложно, то текущему пользователю запрещено просматривать web-страницу, доступную по url-адресу, соответствующему данному url-паттерну. Иначе - разрешено. Класс SecurityExpressionRoot из пространства имен org.springframework.security.access.expression предоставляет набор статических методов, возвращающих логическое значение, которые можно использовать при конфигурировании доступности url-паттернов. Наиболее используемые статические методы из класса SecurityExpressionRoot:

  • permitAll – метод, возвращающий логическое значение,  характеризующее, разрешен ли просмотр web-страницы, доступной по url-адресу, соответствующему данному url-паттерну, всем пользователям;
  • denyAll - метод, возвращающий логическое значение, характеризующее, запрещен ли просмотр web-страницы, доступной по url-адресу, соответствующему данному url-паттерну, всем пользователям;
  • isAnonymous - метод, возвращающий логическое значение,  характеризующее, разрешен ли просмотр web-страницы, доступной по url-адресу, соответствующему данному url-паттерну, всем пользователям, не осуществившим вход в систему;
  • hasRole - метод, принимающий в качестве параметра системное имя роли и возвращающий логическое значение, характеризующее, разрешен ли просмотр web-страницы, доступной по url-адресу, соответствующему данному url-паттерну, всем пользователям, имеющим роль, системное имя которой соответствует переданному в метод параметру;
  • hasAnyRole - метод, принимающий в качестве параметра список системных имен роли и возвращающий логическое значение, характеризующее, разрешен ли просмотр web-страницы, доступной по url-адресу, соответствующему данному url-паттерну, всем пользователям, имеющим одну из ролей с системным именем из списка параметров метода.

Класс директивы PreAuthorize находится в пространстве имен org.springframework.security.access.prepost и позволяет отменить выполнение тела метода, если условие, передаваемое в качестве параметра директивы, ложно. [2, c. 656]

Для реализации более сложной логики ограничений доступа к web-страницам необходимо создать иерархию классов, изображенную на диаграмме классов на рисунке 1.

Все классы для ограничений реализуют интерфейс Permission. В интерфейсе объявлен один метод isAllowed, возвращающий логическое значение, характеризующее разрешен ли пользователю доступ к функционалу или нет. В классе PermissionResolver реализован метод hasPermission, который можно использовать в директиве PreAuthorize. Этот метод принимает 2 параметра: список параметров метода, к которому предоставляется доступ и строковый псевдоним ограничения. Пары «псевдоним ограничения – класс» фиксируются в файле securityContext.xml. Стоит отметить, что имя класса в данных парах должно начинаться с прописной буквы, а не с заглавной как это принято в именах классов с точки зрения языка программирования. Класс PermissionResolver имеет поле permissionNameToPermissionMap, которое является программным отображением пар «псевдоним ограничения – класс». Метод hasPermission возвращает итог выполнения метода isAllowed одного из классов, реализующих интерфейс Permission. Метод, к которому применяется директива будет выполняться только в том случае, если результат выполнения данного метода будет истинным. Пример использования директивы: @PreAuthorize("isAuthenticated() and hasPermission(#params, 'permissionAlias')"), при условии, что псевдоним «permissionAlias» в файле securityContext.xml ссылается на один из классов, реализующих интерфейс Permission.

 

Рисунок 1. Диаграмма классов, обеспечивающих безопасность доступа к данным

 

Список литературы:

  1. Spring MVC и Spring Security. Пример настройки страницы логина, настройка ролей [электронный ресурс] – Режим доступа - URL: http://javastudy.ru/spring-mvc/security/ (дата обращения 12.05.2017)
  2. Хо К. Spring 3 для профессионалов  / К. Хо. – М.: ООО «И.Д. Вильямс», 2013 г. – 880 с.
Проголосовать за статью
Конференция завершена
Эта статья набрала 0 голосов
Дипломы участников
У данной статьи нет
дипломов

Оставить комментарий

Форма обратной связи о взаимодействии с сайтом