У меня есть обычный Apache / MySQL, обслуживающий веб-приложение, в которое входят компании и пользователи этих компаний. Таким образом, все из всех компаний находятся в одной таблице Users.
Хотя мой код пытается изолировать компании в PHP, например SELECT * FROM Users WHERE Company=$COMPANY
, Я считаю, что вероятность внедрения SQL-кода для получения личных данных от других клиентов весьма высока, поскольку кодовая база весьма обширна. Мы проверяем код, но с такой скоростью мы закончим через годы.
Тем временем я искал Docker, чтобы, надеюсь, дать каждому из моих клиентов свой собственный контейнер с сервером Apache (с крошечным буфером и двумя рабочими php) и MySQL с жалкими 32 или 64 МБ буферного пула. Затем этот контейнер будет разрешать только 1 TCP-соединение для HTTPS, которое будет подвергаться обратному проксированию на основе имени хоста (например, customer-a.mycompany.com). На диск не записываются никакие файлы. А исходный код PHP будет обновляться с помощью git, так что, возможно, мы могли бы даже предоставить избранным клиентам, например, нашу бета-версию.
Мне сообщили, что Docker не предназначен для описанного выше сценария и не обеспечит мне необходимую безопасность.
Я понимаю, что хакер может ввести код в один контейнер и повлиять на этого одного клиента. Но разве Docker не предотвратил бы обнаружение виртуальных хостов, используемых для других клиентов, немного уменьшив вероятность того, что хакер может повлиять на большинство моих клиентов. Только с одним, с которым мы могли бы справиться, но не с 12.
Помимо безопасности, я был взволнован возможностью выделения пула буферов MySQL для каждой компании, которая собиралась сделать веб-приложение в целом быстрее, потому что, когда клиент A делает безумный отчет SQL, я предполагаю, что пул буферов перезаписывается безумным отчетом , поэтому, когда клиент B выполняет следующий простой запрос, данные должны быть снова получены с диска.
В будущем мне бы хотелось видеть эти «контейнеры» в графическом интерфейсе пользователя и иметь возможность перетаскивать их на другой сервер (быстрее, с меньшим количеством контейнеров) .. например, чтобы предлагать «более высокие» скорости некоторым опытным клиентам .
Входит ли в реальность какая-либо из вышеперечисленных мечтаний на 2017 год?
Какую платформу / инструмент, по вашему мнению, мне следует рассмотреть?
Как правило, хорошие провайдеры веб-хостинга используют Облако Linux для обеспечения изоляции и ограничения ресурсов для мультитенантного хостинга. Однако в вашем масштабе (12) я бы посоветовал вам пойти по докеру. Мне кажется, что наличие одного контейнера (или двух) для каждого клиента для обслуживания своего сайта - это хорошо. Не уверен, о какой проблеме безопасности вы имеете в виду, но вы в отличной форме, если:
Если ваши клиенты совместно используют базу данных (по какой-либо причине), они, очевидно, должны иметь строгие разрешения, чтобы убедиться, что их пользователь не может запрашивать базы данных, к которым у них не должно быть доступа. Базы данных, которые ТОЛЬКО ОДИН запросы клиентов должны быть разделены в другой контейнер для максимальной безопасности. Держать ТОЛЬКО ОБЩИЕ база данных в общем контейнере.