Сколько ярусов вам нужно? - PullRequest
3 голосов
/ 22 февраля 2011

У нас есть веб-приложение, состоящее из веб-уровня (PHP), уровня приложения (Java) и БД (mysql).Веб-уровень связывается с приложением И с БД для получения некоторых данных.Один из наших клиентов настаивает на разделении каждого уровня брандмауэром и блокировании трафика с веб-уровня на БД.Они утверждают, что это небезопасно, и приложение-уровень должно иметь функцию «получить данные», которая будет использоваться веб-уровнем вместо чтения данных непосредственно из БД.

Это похоже на реальную трата для туннелирования данныхчерез уровень приложения, когда веб-уровень легко доступен непосредственно из БД.Данные только для чтения могут поступать из высокооптимизированных представлений и могут быть представлены как есть.Это значительно упрощает дизайн и устраняет дополнительные проблемы, такие как подкачка.Этот метод известен как Fast-Lane-Reader и позволяет извлекать табличные данные только для чтения непосредственно из БД.Для обновлений уровень приложений используется там, где применяются бизнес-правила.

Поэтому мой вопрос заключается в том, можно ли настроить эту трехуровневую изолированную брандмауэром топологию и разрешить прямой трафик из сети на уровни БД?

Заранее спасибо, Филопатор.

Ответы [ 4 ]

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

Я бы посоветовал вам объяснить вашему клиенту, как вы определяете «ценность», и позволить им объяснить вам, как они его определяют.Я думаю, вы не на той же странице.Похоже, вы цените быстро и дешевле качества (дизайна).Ваш клиент согласен с этим подходом?Похоже, они больше заботятся о качестве дизайна, чем о быстром и дешевом.Если это так, я бы выслушал вашего клиента (так как они платят вам, и они должны быть готовы платить за это качество).Возможно, после разговора об определении ценности ваш клиент увидит это по-вашему.Возможно, нет.

Существуют веские причины - а именно ремонтопригодность и расширяемость - для того, чтобы держать уровень PHP вдали от уровня БД (и получать доступ только к данным через средний уровень Java).

Просто подумайте опричина ремонтопригодности:

Средний уровень, такой как ваш уровень Java, действует как фасад .Схема базы данных может быть изменена (по любой причине) в любое время, и ваш уровень PHP не должен заботиться об этом (то есть вам не нужно ничего обновлять в вашем PHP-коде).Только слой Java должен быть обновлен.Уровень Java поддерживает непротиворечивый интерфейс (для написания вашего PHP-кода).

Теперь, если вы измените схему БД, в то время как уровни Java и PHP обращаются к ней напрямую, ОБА слои должны быть обновлены.Это хрупкий дизайн (кошмар обслуживания), и он особенно плох, если вы не отвечаете ни за уровень приложений Java, ни за уровень PHP.

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

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

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

Во-вторых, это помогает в будущем доказать вашу заявку. Например, если вы перешли с PHP на ASP.NET или интерфейс передвижной ОС, это сведет к минимуму работу, связанную с соответствующими частями для отображения данных.

В общем, в любом случае, это хорошая идея. Если есть некоторые преимущества с точки зрения архитектуры безопасности. Бонус.

0 голосов
/ 23 февраля 2011

Чтобы получить реальную, "проверяющую сегодня" выгоду от прохождения уровня приложения, думайте об этом как о инкапсуляции.У вас должен быть только один способ установки / получения определенного фрагмента данных, потому что вы хотите только проверку / форматирование / фильтрацию в одном месте.

Представьте, что в вашем Java-коде есть служебный метод WidgetService.addWidget ().,Вы хотите убедиться, что все виджеты относятся к типам, с которыми разрешено работать текущему пользователю, поэтому addWidget () проверяет разрешения для этого.Теперь, если ваш PHP-код пытается напрямую добавить виджет в базу данных, он обходит эти проверки.

0 голосов
/ 23 февраля 2011

Филопатор, я бы сказал, что дело не в том, чтобы иметь брандмауэры для блокировки связи между FrontEnd (PHP) и DataLayer (MySql), даже без какого-либо брандмауэра, как правило, нехорошо иметь интерфейс прямой связи -> База данных.

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

Не бойтесь производительностиОбычно проблем не существует, или они могут быть решены, и я думаю, что вы можете делать все, например, доступ к представлениям или хранимым процедурам, сортировку по страницам и так далее, начиная ваши вызовы с компонента java, а не с уровня представления php.

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