|
Spring Security имеет неверную архитектуру
|
|||
---|---|---|---|
#18+
mayton dakeiras пропущено... Потому что они как раз и замещаются. См. ниже ссылки. Где конкретнее смотреть? На что они замещаются? Вот пример приложения, защищённого с помощью Ascend: https://github.com/INFINITE-TECHNOLOGY/ORBIT Конкретнее, вот тут вся конфигурация Spring Security, делегирующая проверки в Ascend. https://github.com/INFINITE-TECHNOLOGY/ORBIT/tree/master/orbit-sdk/src/main/groovy/io/infinite/orbit/configurations/security ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2020, 22:39 |
|
Spring Security имеет неверную архитектуру
|
|||
---|---|---|---|
#18+
SpringMan ТС имеет в виду, что все замещается одним фильтром OrbitJwtTokenAuthenticationFilter Да, спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2020, 22:39 |
|
Spring Security имеет неверную архитектуру
|
|||
---|---|---|---|
#18+
А, кстати вот пример клиентской реализации в Swing. (код самого GUI плохой, прошу не ругаться - он для демонстрации концепта только). https://github.com/INFINITE-TECHNOLOGY/ORBIT/tree/master/orbit-gui ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2020, 22:42 |
|
Spring Security имеет неверную архитектуру
|
|||
---|---|---|---|
#18+
dakeiras mayton пропущено... Где конкретнее смотреть? На что они замещаются? Вот пример приложения, защищённого с помощью Ascend: https://github.com/INFINITE-TECHNOLOGY/ORBIT Конкретнее, вот тут вся конфигурация Spring Security, делегирующая проверки в Ascend. https://github.com/INFINITE-TECHNOLOGY/ORBIT/tree/master/orbit-sdk/src/main/groovy/io/infinite/orbit/configurations/security Разве так делаются презентации? Чувак ты серъезно? Ты пришел критиковать SpringSecurity и вместо 3 слайдов - ты предлагаешь ОЗНАКОМИТЬСЯ с исходным кодом чегото там такого. И после этого сделать выводы что фреймворк с мировым именем имеет неверную архитектуру? Ты серъезно, родной? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2020, 22:43 |
|
Spring Security имеет неверную архитектуру
|
|||
---|---|---|---|
#18+
mayton dakeiras пропущено... Вот пример приложения, защищённого с помощью Ascend: https://github.com/INFINITE-TECHNOLOGY/ORBIT Конкретнее, вот тут вся конфигурация Spring Security, делегирующая проверки в Ascend. https://github.com/INFINITE-TECHNOLOGY/ORBIT/tree/master/orbit-sdk/src/main/groovy/io/infinite/orbit/configurations/security Разве так делаются презентации? Чувак ты серъезно? Ты пришел критиковать SpringSecurity и вместо 3 слайдов - ты предлагаешь ОЗНАКОМИТЬСЯ с исходным кодом чегото там такого. И после этого сделать выводы что фреймворк с мировым именем имеет неверную архитектуру? Ты серъезно, родной? Не делаются, согласен 100%. Интерес есть, я очень рад. Теперь есть мотивация сделать норм. документацию и презентацию. Чуть подождите (1-2 месяца). Ещё раз спасибо за комментарии. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2020, 22:49 |
|
Spring Security имеет неверную архитектуру
|
|||
---|---|---|---|
#18+
Мне кажется за тобой должок. Ты еще по своему Толстому Робину-Бобину обещал выкатить доклад. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2020, 22:51 |
|
Spring Security имеет неверную архитектуру
|
|||
---|---|---|---|
#18+
энтузиазм похвален и в чем-то даже вызывает зависть. но позиционирование в стиле "Д'артаньян прибывает в Париж" неизменно наталкивают на мысли, что имеешь дело с каким-то городским сумасшедшим. Ничего личного ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2020, 11:46 |
|
Spring Security имеет неверную архитектуру
|
|||
---|---|---|---|
#18+
chpasha энтузиазм похвален и в чем-то даже вызывает зависть. но позиционирование в стиле "Д'артаньян прибывает в Париж" неизменно наталкивают на мысли, что имеешь дело с каким-то городским сумасшедшим. Ничего личного ;) я сам себя очень долго убеждал что я не поехал. И даже до сих пор немного убеждаю. Но вроде всё срослось и решение отлично работает на омологационном проекте. Это при том что это же решение несколько лет в банке на проде крутится (реализованное индусами по моему ТЗ). И тогда та же самая ситуация была. Это реально опасно для мозга такими проектами заниматься, ночами не спишь - продумываешь решения. Кстати поэтому и такая интонация у меня, немного с чувством несправедливости :) С другой стороны, сделав прошлой осенью мега проект на много миллиардов баксов без единого бага (написав транспилятор Кобола в Яву), уверенность в себе оч. возраста, да... ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2020, 14:15 |
|
Spring Security имеет неверную архитектуру
|
|||
---|---|---|---|
#18+
dakeiras chpasha энтузиазм похвален и в чем-то даже вызывает зависть. но позиционирование в стиле "Д'артаньян прибывает в Париж" неизменно наталкивают на мысли, что имеешь дело с каким-то городским сумасшедшим. Ничего личного ;) я сам себя очень долго убеждал что я не поехал. И даже до сих пор немного убеждаю. По поводу всех велосипедов связанных с безопасностью. Я брошу 5 копеек. Очень многие Кулибины и Бахметьевы делают свои фреймворки и библиотечки. Но их разработки не имеют никакого значения до тех пор пока не будет экспертизы со стороны людей которые инфо-безопасностью занимаются. И ругать здесь Spring - не продуктивно. Spring это связующий клей для фреймворков. Он просто предлагает самый верхний уровень абстракций. Если я аннотирую метод @Secured - то я не регламентирую никоим образом ни алгоритм ни протокол проверки сертификата пользователя. Я отдаю его на откуп библиотеке и конфигурации. Сюда-же до кучи фильтры сервлетов и прочее. Это просто абстракции. Ответсвтенность за реализацию и за то как сконфигурировано девелопер берет на себя. Это тоже самое что внедрить неправильно симметричное шифрование и спалить ключ прямо в сорцах. Вроде ты и юзал сертифицированные технологии. Но спалился по глупости. А если ты нашел в JWT Token дефект безопасности - пожалуйста пиши баги сюда https://github.com/lcobucci/jwt/issues если это действительно баг или предложения по изменениям. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2020, 14:31 |
|
Spring Security имеет неверную архитектуру
|
|||
---|---|---|---|
#18+
Mayton, насчёт "не изобретать свой фреймворк безопасности и не экспериментировать" - это правильно и общеизвестный факт. И я с ним согласен. Кстати я занимаюсь безопасностью в частности. Но это не отменяет вышенаписанное. Могу сказать одно: есть разрыв между теоретическим аппаратом Веб Безопасности и прикладными моделями предметных областей (ООП, та же Java). Это кстати вызвано отмороженностью (отбитостью) некоторых безопасников, за ними замечено уже :) Но тем не менее эта проблема имеет место и применима и к Spring Security. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2020, 14:38 |
|
Spring Security имеет неверную архитектуру
|
|||
---|---|---|---|
#18+
Дада. Это в первую очередь относится к теме топика Spring Security имеет неверную архитектуру Тема слишком громкая и вызывающая. Я думаю что ее стоит смягчить. Этот топик - закрыть. А тебе - поднять новый. По безопасности карточных продуктов. Насколько я понял это твой основной поинт. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2020, 14:46 |
|
Spring Security имеет неверную архитектуру
|
|||
---|---|---|---|
#18+
dakeiras, Кстати, посмотрел мельком код вашего очередного решения Правильно ли я понимаю: 1) При изменении пути к контроллеру в случае вашего решения необходимо так же писать скрипт для обновления базы данных (изменение urlTemplate или как он там) 2) Если у меня в body передается что-то в формате, не представимом в виде строки (например - protobuf) - ваше решение не позволяет проверить содержимое body 3) Что с проверкой безопасности в случае multipart request? 4) Что с проверкой безопасности, если в body text/plain, но размеров в пару гигабайт?:) 5) Кеширования регулярных выражений нет, то есть паттерны разбираются на каждый запрос? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2020, 12:21 |
|
Spring Security имеет неверную архитектуру
|
|||
---|---|---|---|
#18+
Lelouch, Привет, спасибо за хорошие вопросы. автор1) При изменении пути к контроллеру в случае вашего решения необходимо так же писать скрипт для обновления базы данных (изменение urlTemplate или как он там) Это будет делаться через гуй, которого пока нет. Поэтому пока через базу там. Гуй уже в процессе создания, на Vue.js. автор2) Если у меня в body передается что-то в формате, не представимом в виде строки (например - protobuf) - ваше решение не позволяет проверить содержимое body Проверка Body концептуально хитрая задача. Взять хотя бы Spring ACL - это ужас, и к тому же не все случаи поддерживает (HATEOAS тот же нормально не поддержать). Поэтому предлагается следующая конвенция: - Ownership of parent entity проверяется через URL regex, при этом рекомендуется "Myself" approach: "{chanelName}/videos" - Ownership of nested entities проверяется через Body regex, но при этом используется только HATEOAS/HAL, т.к. это позволяет избежать нормализации Body и всяких атак на regex. Т.е. вот так предлагается делать (пишу по памяти): Код: sql 1. 2. 3. 4. 5. 6. 7.
Где john.doe это authorizedCredential в токене. И т.о. настройка безопасности: "urlRegex": "https:\/\/somehost\/someroot\/%username%\/.*" "bodyRegex": "https:\/\/somehost\/someroot\/%username%\/.*" Даёт юзеру ключать только свои ресурсы в свои ресурсы. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 09:47 |
|
Spring Security имеет неверную архитектуру
|
|||
---|---|---|---|
#18+
авторЧто с проверкой безопасности в случае multipart request bodyRegex работает с прочитанным inputStream. Но как выше написано, предлагается bodyRegex использовать только с HATEOAS/HAL. Иначе легко допустить уязвимость в написании regex для JSON или XML. авторЧто с проверкой безопасности, если в body text/plain, но размеров в пару гигабайт?:) Кастомный валидатор нужен будет вместо regex. В реализации которую индусы делали по моим спекам так было сделано. Я пока это убрал для простоты. авторКеширования регулярных выражений нет, то есть паттерны разбираются на каждый запрос? Завёл задачу: https://github.com/INFINITE-TECHNOLOGY/ASCEND/issues/2 Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 09:54 |
|
Spring Security имеет неверную архитектуру
|
|||
---|---|---|---|
#18+
dakeiras Lelouch, Привет, спасибо за хорошие вопросы. автор1) При изменении пути к контроллеру в случае вашего решения необходимо так же писать скрипт для обновления базы данных (изменение urlTemplate или как он там) Это будет делаться через гуй, которого пока нет. Поэтому пока через базу там. Гуй уже в процессе создания, на Vue.js. Нежизнеспособно. Разработчик должен при выполнении рефакторинга каким-то образом узнать, что нужно пойти в какой-то там UI/базу и поменять там URL. При этом еще и требуется написать инструкцию для обновления (например, для релизного стенда - "при выкатывании версии 2 сходите в UI и поменяйте URL"). dakeirasПроверка Body концептуально хитрая задача. Только вот в случае спринга я могу это сделать в контроллере, аспектом, HandlerInterceptor. Скорее всего есть еще способы, лень искать. У вас - только во внешней системе. И кастомный фильтр не спасает - в таком случае мне необходимо обновлять этот фильтр всякий раз при изменении контракта. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 14:43 |
|
Spring Security имеет неверную архитектуру
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 14:54 |
|
Spring Security имеет неверную архитектуру
|
|||
---|---|---|---|
#18+
авторНежизнеспособно. Разработчик должен при выполнении рефакторинга каким-то образом узнать, что нужно пойти в какой-то там UI/базу и поменять там URL. в этом весь смысл. Разработчик НЕ должен управлять доступом. Им должен управлять офицер безопасности. авторТолько вот в случае спринга я могу это сделать в контроллере, аспектом, HandlerInterceptor. Повторюсь, Спринг не предоставляет никаких встроенных механизмов автоматизации проверки доступа в ACL, это отдаётся на усмотрение разработчика и сводится к написанию кода безопасности. Это создаёт риск ошибок, вовлекает разработчиков в управление доступом, а также не платформонезависимо и не централизованно. А также разрывает атомарность авторизационной транзакции, деля её на Аутентификацию (JWT) и будущую Авторизацию по факту каждого обращения к ресурсу. Это приводит к тому, что изменения правил доступа получают Обратную Силу, т.е. аутентифицированные пользователи получают новые права автоматически - что нежелательно из-за меньшей предсказуемости и контроля настройки. Ну и нагружает бизнес предложение, которое вынуждено отрабатывать атаки по доступу, т.к. безопасность смешана с бизнес логикой. А правильно было бы проверять доступ в гейтвее, на уровне инфраструктуры. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 14:59 |
|
Spring Security имеет неверную архитектуру
|
|||
---|---|---|---|
#18+
Ну нету гуя пока, уже делаю. Даже Vue.js освоил ради этого. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 15:01 |
|
Spring Security имеет неверную архитектуру
|
|||
---|---|---|---|
#18+
dakeiras Причем тут гуй? 1) Ключ вообще лучше хранить в настройках 2) Для накатывания состояния базы есть liquibase например 3) Вы чистите состояние при каждом рестарте приложения, то есть любые изменения стираются dakeirasА правильно было бы проверять доступ в гейтвее, на уровне инфраструктуры. И что делать с вашим "решением", если логика работы зависит от прав пользователя?:) dakeirasРазработчик НЕ должен управлять доступом. Им должен управлять офицер безопасности. 1) Разработчик должен корректно реализовать ПРОВЕРКИ доступа пользователя. Управлять доступом конкретных пользователей он естественно не должен 2) Что делать в случае не http протокола?:) Например в одном из моих проектов можно взаимодействовать с системой через JDBC/ODBC драйвер. Каким образом это вообще реализуемо в вашей системе - никаким?:) dakeiras Спринг не предоставляет никаких встроенных механизмов автоматизации проверки доступа в ACL, это отдаётся на усмотрение разработчика и сводится к написанию кода безопасности. 1) Ну то есть вы в этом топике сравниваете апельсин и лопату? 2) @PreAuthorize("isFullyAuthenticated() and @mySecurityBean.hasAccessTo(#objectId)") - не является "автоматизацией проверки доступа в acl"? или имеется в виду, что таки нужно реализовать этот самый mySecurityBean? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 15:17 |
|
Spring Security имеет неверную архитектуру
|
|||
---|---|---|---|
#18+
авторПричем тут гуй? 1) Ключ вообще лучше хранить в настройках 2) Для накатывания состояния базы есть liquibase например 3) Вы чистите состояние при каждом рестарте приложения, то есть любые изменения стираются Это публичный ключ, его без разницы где хранить. Как только появится гуй, этот класс вообще исчезнет, т.к. настройки будут правится через ГУЙ только. Зато видно наглядно как настраивается на кокнетных примерах. авторИ что делать с вашим "решением", если логика работы зависит от прав пользователя?:) Это неправильная архитектура. Логика не должна зависеть от прав доступа. Т.е. Админ - это не Юзер, совсем. Это - другая сущность и другая identity. И у админа должно быть отдельное админское приложение. Всё что должно быть - авторизация и step up авторизация. При этом step up не влияет на логику никак - лишь даёт доступ к существующей логике, но не меняет её. Пример - менюшки. Неправильно делать так: Код: java 1. 2. 3. 4. 5. 6.
Правильно делать отдельные приложения для юзеров и отдельные для админов. Это улучшает качество кода, упрощает тестирование и внесение изменений. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 15:31 |
|
Spring Security имеет неверную архитектуру
|
|||
---|---|---|---|
#18+
авторРазработчик должен корректно реализовать ПРОВЕРКИ доступа пользователя. Управлять доступом конкретных пользователей он естественно не должен Логика проверки доступа является частью управления доступом, т.е. разработчик может умышленно сделать backdoor. авторЧто делать в случае не http протокола?:) Например в одном из моих проектов можно взаимодействовать с системой через JDBC/ODBC драйвер. Каким образом это вообще реализуемо в вашей системе - никаким?:) Ascend - система Веб безопасности, поддерживает только протокол HTTP. авторили имеется в виду, что таки нужно реализовать этот самый mySecurityBean? Да, имеется в виду реализация логики. Вообще, давайте на секунду абстрагируемся от Спринга. Ascend встроенный в Reverse Proxy или в гейтвей платформонезависим, и обеспечивает безопасность любых Веб приложений, например PHP, Python, и т.д. Достаточно контейнеризовать legacy приложение и спрятать его в частной подсети в контейнере. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 15:36 |
|
Spring Security имеет неверную архитектуру
|
|||
---|---|---|---|
#18+
dakeiras аутентифицированные пользователи получают новые права автоматически - что нежелательно из-за меньшей предсказуемости и контроля настройки. Приведите пример, когда это плохо? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 15:39 |
|
Spring Security имеет неверную архитектуру
|
|||
---|---|---|---|
#18+
dakeiras, dakeirasЛогика не должна зависеть от прав доступа. Логика легко может зависеть от роли пользователя. Вы видимо считаете, что роли безопасности не могут быть частью "бизнес процессов". Это не так. dakeirasПравильно делать отдельные приложения для юзеров и отдельные для админов. Это улучшает качество кода, упрощает тестирование и внесение изменений. "Менеджер" в автосалоне может сделать 2 скидки в день, а "старший менеджер" - 10. Одновременно с этим "менеджер" не может продать машину без одобрения "старшего менеджера". 1) Видимо кто-то из них "админ", а кто-то "юзер"?:) 2) Вы видимо предлагаете реализовать 1 ограничение минуя правовую модель, а второе - в ней? А как у вас можно проверить состояние одобрения? 3) нужно для каждого по отдельному приложению сделать?:) P.S. Пример выше - выдуманный У меня ощущение что вы взяли из нормальных SECAAS только 1 функцию - ограничение доступа к ресурсам - и пытаетесь ее продать githubMonthly: 0-5000 successfully granted authorizations - free Each extra: $0.01 per each successful authorization grant Кстати, а что будет, если я защищу что-либо вашей системой, а ее взломают? Сколько вы мне денег в таком случае заплатите? P.S. А что если у меня приложение с сессиями и url + body ни разу не достаточны для понимания, что делает пользователь? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 15:42 |
|
Spring Security имеет неверную архитектуру
|
|||
---|---|---|---|
#18+
mayton dakeiras аутентифицированные пользователи получают новые права автоматически - что нежелательно из-за меньшей предсказуемости и контроля настройки. Приведите пример, когда это плохо? Вы купили Единый проездной на 1 неделю, он включает: - Автобус - Трамвай - Метро Но через 3 дня из тарифа убирают Трамвай. Ваш Единый это тоже затрагивает, т.к. он содержит только привязку к тарифу, но не указывает какие конкретно он разрешает виды транспорта. А по хорошему, должно было затронуть только билеты выпущенные после изменения правил доступа. Можно добавить проверку на дату\время конечно, но это костыль в данном случае. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 15:52 |
|
Spring Security имеет неверную архитектуру
|
|||
---|---|---|---|
#18+
dakeiras mayton пропущено... Приведите пример, когда это плохо? Вы купили Единый проездной на 1 неделю, он включает: - Автобус - Трамвай - Метро Но через 3 дня из тарифа убирают Трамвай. Ваш Единый это тоже затрагивает, т.к. он содержит только привязку к тарифу, но не указывает какие конкретно он разрешает виды транспорта. А по хорошему, должно было затронуть только билеты выпущенные после изменения правил доступа. Можно добавить проверку на дату\время конечно, но это костыль в данном случае. Классный пример из сторонней области. Вот вам более релевантный: 1) Злоумышленник узнал мой логин и пароль. Я срочно звоню админу с просьбой срезать мне все права. Злоумышленник продолжает спокойно работать со старым токеном. Прекрасное решение, я считаю. 2) Стажеру Васе случайно дали право на функцию "Achtung!!! Налоговая! Отправить сервер с черной бухгалтерией в космос!!!", но спохватились и через 10 секунд забрали. Но у Васи видимо доступ должен остаться :) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2020, 15:54 |
|
|
start [/forum/topic.php?fid=59&msg=39956876&tid=2120795]: |
0ms |
get settings: |
24ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
55ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
416ms |
get tp. blocked users: |
2ms |
others: | 296ms |
total: | 828ms |
0 / 0 |