Защита в глубине против СУХОЙ - PullRequest
3 голосов
/ 28 февраля 2011

Принцип «глубокоэшелонированной защиты» гласит, что ограничения должны применяться в нескольких местах, так что если часть данных обходит или проскальзывает через один слой, она попадает в следующий.Хороший пример - в веб-приложении: вы помещаете проверку в javascript на стороне клиента, в код на стороне сервера (PHP / Ruby / ASP / любой другой) и помещаете эти правила в базу данных (например, ограничения внешнего ключа).Таким образом, любые данные, которые проходят проверку Javascript, перехватываются на стороне сервера.Любые данные, прошедшие проверку сервера, фиксируются ограничениями базы данных.

Однако это, похоже, нарушает принцип СУХОЙ (не повторять себя).Здесь у вас есть три места, где повторяются одни и те же правила проверки.Я понимаю, что существуют способы генерации JavaScript на стороне клиента, так что он обеспечивает проверку на стороне сервера.Мой вопрос: как объединить ограничения базы данных и серверный код?Есть ли способ сгенерировать код так, чтобы он автоматически применял ограничения базы данных?

Ответы [ 2 ]

3 голосов
/ 28 февраля 2011

Мы сделали это, сделав один модуль владельцем «правил безопасности», а затем создав для него интерфейс AJAX, чтобы код на стороне сервера вызывал его напрямую, а затем вызывали компоненты интерфейса пользователяинтерфейс AJAX, но все они разговаривают с одним и тем же модулем.Таким образом, правила доступа всегда находятся в одном месте (модуль безопасности), и вы все равно применяете правила повсюду.Это дает дополнительное преимущество, заключающееся в том, что правила хранятся вне загружаемого клиентом кода.

1 голос
/ 28 февраля 2011

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

Обеспечение ссылочной целостности в базе данных не является реальным нарушением DRY, потому что:

  • база данных не является частью исходного кода
  • стоит самостоятельно
  • может быть получен доступ и изменен многими другими способами помимо представления на стороне клиента. Например. механизмы запросов и отчетности
...