Как «Контекстный объект» шаблон дизайна используется для повышения безопасности?
-
16-09-2020 - |
Вопрос
Я знаком с использованием шаблона конструкции контекста - легкая упаковочная обертка вокруг объектов, прошедших между ярусами.
Если нужно использовать объект контекста для отслеживания Taint (ненадежный пользовательский ввод), или яйцекнул, я мог видеть, как приемный уровень может динамически фильтровать, кодировать или подтвердить соответственно.
Например: Пользователь отправляет «HTTP / HTML» данные контекста, которые в конечном итоге будут храниться в качестве файла в системе. Метод сохранения файлов может обнаружить контекст и декодировать HTML-объекты, назначить случайный идентификатор на загрузку файла и связывает действие пользователя и имя файла в базе данных.
Мой вопрос: как можно вашему умнее, чем применение всех фильтров, кодировкой и проверки по умолчанию? Какие случаи существуют, где знание контекста происхождения улучшает безопасность за пределами просто хорошей входной проверки / кодирования?
Я работаю в Java / J2EE / Struts, но это обобщается на другие языки и рамки.
Ссылки:
http://www.corej2eepatterns.com/patterns2nded/contextobject.htm
http://www.cs.wustl. EDU / ~ SCHMIDT / PDF / Context-Object-Pattern.PDF
http://www.owass.org/index.php/category:owase_security_Analish_of_core_j2eee_design_patterns_project
С благодарностью,
-бен
Решение
Я не знаю, что отслеживание Taint между уровнями применения является наилучшим приложением шаблона контекста. Насколько я понимаю, объект контекста - это объект, который остается в одном уровне и предоставляет услуги нескольким сообщениям, проходящим через этот уровень.
Где я мог видеть, что это использование в качестве механизма безопасности находится в создании явного уровня безопасности в вашем приложении. Представьте, что, поскольку каждый пользователь аутентифицируется с вашей системой, в пределах безопасности для этого пользователя создается объект контекста безопасности. Объект контекста безопасности содержит список разрешений всех пользователей. Каждый запрос, который входит в систему от любого пользователя, должен сначала пройти через уровень безопасности и оцениваться против объекта контекста безопасности пользователя.
Если запрос разрешен, уровень безопасности проходит его вверх по более высоким слоям для обработки. Если запрос отклоняется, уровень безопасности возвращает ошибку пользователю, а остальное приложение не является мудрее. Централизующиеся проблемы безопасности в пределах уровня безопасности предотвращает рассеивание проверки безопасности на протяжении всего бизнеса и сервисных слоев.
В этом случае объект контекста безопасности реализует шаблон объекта контекста. Объект контекста давно жил, обеспечивая контекст для нескольких пользовательских запросов, но не виден более высоким или нижним слоями в стеке запроса.