Я участвую в создании веб-решения для бизнеса. Идея заключается в том, что клиенты будут использовать его, собирать свои бизнес-процессы и информацию в одном месте, а также получать добавленную стоимость для бизнеса за счет межсистемного взаимодействия. Короче говоря, они будут использовать его в качестве основного инструмента в своей повседневной работе и будут сильно от него зависеть.
Одна из проблем, требующих решения, заключается в том, как сделать эту веб-систему достаточно безопасной, чтобы стать альтернативой, которую мы и клиенты сочтем удовлетворительной. Я ищу хорошего совета от других, кто был или находится в такой же ситуации.
В нашем конкретном сценарии мы в настоящее время рассматриваем использование Java SE 6, Tomcat (в качестве контейнера сервлетов, необходимого, поскольку мы будем использовать Wicket), Hibernate (для взаимодействия с нашей базой данных) и MySQL (в качестве СУБД).
Думаю, проблема и советы будут интересны и другим пользователям техники. Поскольку многие из проблем являются общими, касающимися отказа жесткого диска, доступности сети и прочего.
Не стесняйтесь давать любые советы! Я все еще задаю несколько вопросов и мыслей, которые помогут нам начать работу:
Спасибо за уделенное время! Я надеюсь, что у вас есть какие-то материалы, которыми вы можете поделиться. Дополнительные вопросы могут быть добавлены позже.

Я тоже создаю веб-приложения в свое личное время и на работе, чтобы понять, почему вы задаете вышеуказанные вопросы. Хотя на работе ни один из вышеперечисленных вопросов не обсуждается, я уделяю им много внимания в своей личной работе. Я не могу ответить на все ваши вопросы, но для тех, кто может, скажу следующее:
Как бы вы отслеживали решение? Я разрабатываю веб-приложение ASP.NET, поэтому я использую мониторы производительности, ведение журнала, трассировку (только для разработчиков), мониторинг работоспособности и настраиваемую систему мониторинга производительности сервера Sql, которую я пишу (хотя до того, как это будет развернут, я буду использовать AppManager от AdventNet).
Which of these things do you think we should do in house and which should be out sourced? We will develop the core system our self's, of course.
Это отличный вопрос, поскольку я все время принимаю одно и то же решение. Я бы отдал на аутсорсинг то, что не входит в мои навыки (так что, если мне нужно делать 3D-работу, отдайте это на аутсорсинг). Кроме того, придерживайтесь сильных сторон своей команды, сосредоточьтесь на бизнес-функциях, поскольку это то, что порадует / привлечет пользователей (я говорю это с коммерческой точки зрения для веб-приложения, ориентированного на домашних пользователей), и передайте на аутсорсинг критически важные внутренние системы. такие как резервное копирование, мониторинг, ведение журнала и т. д. (я не передал это на аутсорсинг из-за имеющихся у меня затрат / финансовых ресурсов, и я делаю вещи, чтобы я мог учиться - поэтому сам кодирую его, хотя это долгий подход - но мне нравится Это).
Are there check lists for these kinds of things? Maybe ISO standards or some other way of seeing that we are on the right track by looking through an article/check list/academic paper/book?
Вы говорите, что используете Java / MySQL / Hibernate, но у Microsoft есть несколько отличных руководств по безопасности веб-приложений и, как правило, по созданию масштабируемых и безопасных приложений (как для Интернета, так и для Windows). Посмотрите на шаблоны и методы Microsoft.
Do you think hosting the system in a computer cloud is a good alternative? (i.e. as provided by Amazon, Google or others.)
да. Это дешево, эффективно и снимет нагрузку с вашей внутренней архитектуры (я думаю о том, как можно использовать CDN и Amazon EC2 для хранения статических файлов). Я говорю статические файлы, поэтому вы можете хранить контент, который не часто меняется и который можно кэшировать.
If you feel that the system is secure, as a technical person. How do you convince a non technical person that it's safe and secure?
Попросите их вызвать нарушение.
How do we guarantee that each customer only will be able to access its own data? As the system will be able to access it's own database, it seems hard. A proper development process, involving lots of testing, is really all we have regarding user privileges.
Я не уверен, что понимаю, о чем этот вопрос, но вы можете использовать системы входа, членство / роли (хотя это только ASP.NET) и хранимые процедуры, чтобы пользователь мог видеть только свои собственные данные и никто другой.
Мне тоже было бы интересно получить ответы на остальные вопросы.
отказ от ответственности: я не сетевой инженер. Я пропустил вопросы, на которые я не мог ответить
Система должна быть доступна через Интернет. О чем мы должны думать, решая, как разместить его? (т.е. нужно ли, чтобы у нашего веб-хоста было несколько физических путей, соединяющих их с Интернетом, и подобные вопросы).
I would scale up as needed. In your first stage, you're probably not going to need redundant everything. Once people rely on you for their business needs, upgrade the shakiest parts of your network. If your internet is unreliable, get a secondary pipe. If your switches have gone down, double them up.
Насколько хорошо время работы? 99,99% кажется разумной целью. Но любой простой может привести к потере бизнеса наших клиентов.
The Nines. Don't pay more for uptime than you will lose for downtime. If you'll lose 50K for going down unexpectantly for an hour, you should be paying around 50K to keep downtime under an hour. 4 Nines is 52 minutes of downtime a year. Is that reasonable for you? Five nines is extremely difficult. Four nines for starting out is probably more difficult. I work for a financial, and we run about 98% to 99%, with about 50-80% of the downtime planned. We get by well.
Как мы можем гарантировать, что каждый клиент сможет получить доступ только к своим данным? Поскольку система сможет получить доступ к своей собственной базе данных, это кажется трудным. Правильный процесс разработки, включающий большое количество тестов, - это все, что у нас есть в отношении пользовательских привилегий.
We have the same problem. Good developers, proper development practices, automated testing, manual testing, development tools (e.g. attributes decorating proprietary data that raise warnings when the object is used in a public context), code scanners (e.g. looking for procs and code that use tables with a proprietary indicator without referencing it), code reviews, and so on.
Какую стратегию резервного копирования вы бы использовали?
Best I can reasonably afford. If possible, I'd say hourly for 24 hours, Daily for 3 weeks, Weekly for infinity.
Как вы думаете, размещение системы в компьютерном облаке - хорошая альтернатива? (т.е. предоставленные Amazon, Google или другими).
Joel likes to say that your core business should not be outsourced. If your core business is storing documents, maybe no. If your core business is ancillary to the documents, seems reasonable.
Вы бы использовали шифрование жесткого диска? И если да, то какие?
This would only help if someone stole your hard disk, not if they hacked your system. You're looking at encryption incorrectly. You dont want encryption for encryption's sake - you want it where it will actually help. HTTPS is good encryption. Maybe (-maybe-) encrypt each document on a document-by-document basis and require a passkey from the user to decrypt it.
Является ли предоставление клиенту возможности делать свои собственные резервные копии хорошей альтернативой? Эти клиенты не будут технически ориентированными. Так в таком случае загрузка информации в ZIP-архиве, содержащем файлы Microsoft Office, может быть хорошим способом?
That's a good feature to have no matter what. Billing it as backup is reasonable, but if you really want to provide their netops with a backup solution it will need to be more robust than that.
Как бы вы отслеживали решение?
SMS alerts to my blackberry, sanity checks on usage, someone on-call 24/7 with the ability to troubleshoot the system.
Если вы чувствуете, что система безопасна, как технический специалист. Как убедить нетехнического человека в том, что это безопасно?
A non-technical person? Put padlocks all over the website. Alternatively, convince their technical friend it's secure (by letting them see your security), and have the friend vouch to the non-techie.
The system needs to be reachable through the Internet. What should we think about when deciding on how to host it?
Я бы рассмотрел несколько вещей. Во-первых, ваш хостинг-провайдер должен предоставить несколько независимых сетевых путей от места размещения к Интернету. Во-вторых, в какой уровень физической безопасности вы готовы инвестировать для своих машин? Обычно, по крайней мере в Великобритании, вы (в основном) арендуете пространство co-lo с помощью U (единицы высоты), а это означает, что ваши машины будут доступны для всех, кто работает в той же стойке (возможно, даже в том же машинном зале). Если вы арендуете стеллажи целиком, МОЖЕТ быть возможность получить свои ключи.
How high up time is good enough? 99.99% seems like a reasonable goal. But any downtime might result in loss of business for our customers.
Во-первых, подумайте, когда должно присутствовать это время безотказной работы. 99,99% звучит хорошо, но если клиентам нужен доступ только с понедельника по пятницу, с 08:00 до 20:00, вы можете получить доступность чуть ниже 50% без снижения уровня удовлетворенности клиентов. Также учтите, что вам нужно будет выполнить обслуживание (проверки базы данных, резервное копирование и другие вещи), которые МОГУТ повлиять на доступность приложения, поэтому я обязательно включу это в гарантию уровня обслуживания (либо как «Доступность X% в окне ... "или" Доступность X% вне заявленных внеплановых отключений ").
If one server is enough to serve the clients. Would you still use a cluster? (I would think so.) And in that case, how many nodes would you have in the cluster?
Если один сервер будет достаточно хорош в обозримом будущем, я бы лично не стал беспокоиться о кластере, но я бы удостоверился, что идентичные машины на сайте co-lo выключены, поэтому отключение одна машина требует минимального времени на устранение неполадок.
Do you think hosting the system in a computer cloud is a good alternative? (i.e. as provided by Amazon, Google or others.)
Какие гарантии у вас есть в отношении времени безотказной работы, конфиденциальности данных и тому подобного от провайдера облака данных? Вы не можете (или, по крайней мере, не должны) гарантировать своим клиентам что-либо большее, чем это. Кроме того, если вы можете разместить свои машины в Скандинавии, у вас может быть преимущество в сети по сравнению с теми, кто предоставляет аналогичные услуги из вычислительного облака, размещенного в США. Честно говоря, я не знаю, есть ли у кого-либо из поставщиков вычислительного облака серверы в Скандинавии, но они могут быть счастливы ответить на этот вопрос.
Which of these things do you think we should do in house and which should be out sourced? We will develop the core system our self's, of course.
"Это зависит от". Чем больше вы занимаетесь собственными силами, тем меньше вам придется платить другим нарядам. С другой стороны, если вы можете найти хороших поставщиков периферийных услуг (дизайн центра обработки данных, возможно, базовая сборка машины, возможно, мониторинг услуг, возможно, мониторинг безопасности, возможно, вы будете использовать X дней в неделю, чтобы менять ленты с резервными копиями и переносить старые ленты в безопасное место). расположение). Плюс к этому в том, что это может послужить мотиватором для ваших сотрудников. С другой стороны, чем больше вы занимаетесь собственными силами, тем больше вы подвергаетесь риску, если один или несколько ваших сотрудников попадут под автобус. Итак, для всего, что вы делаете внутри компании, убедитесь, что у вас есть как минимум два
The system needs to be reachable through the Internet. What should we think about when deciding on how to host it? (i.e. do we need our web host to have multiple physical paths connecting them to the Internet and similar questions.)
Если вы хотите 99% времени безотказной работы, то да, вы это сделаете. Я бы посмотрел на компанию под названием Server Vault.
Are there check lists for these kinds of things? Maybe ISO standards or some other way of seeing that we are on the right track by looking through an article/check list/academic paper/book?
Официальные чек-листы, которых я не видел. Обычно это означает прохождение и наличие политик для каждого стихийного бедствия и смягчения его последствий.
Later in the project we think it would be a good idea to get someone involved who has extensive experience in the field. In that case we're not looking for a normal web developer. It is likely that more consulting firms will tell us they are capable of providing this expertise then there actually are. Any tips on how we will get in contact with the right people? (We're based in Scandinavia, so it would be preferable to find someone there.)
Я бы уточнил у Internet Security Solutions или At Stake. Я считаю, что они расположены по всему миру.
How high up time is good enough? 99.99% seems like a reasonable goal. But any downtime might result in loss of business for our customers.
Если вы действительно хотите, чтобы бизнес ваших клиентов полагался на то, что вы создаете, время простоя действительно неприемлемо. Вы можете добиться этого, имея кластерные серверы и сайты аварийного восстановления. На данный момент это может быть осуществимо для вас, поэтому я бы сказал, что наличие окна maintence, возможно, на пару часов в месяц было бы приемлемым. Вам нужно будет проверить, где находятся ваши клиенты, так как у вас нет времени посреди ночи, потому что вы вполне можете быть в середине дня для своих клиентов.
How do we guarantee that each customer only will be able to accessits own data? As the system will be able to access it's own database, it seems hard. A proper development process, involving lots of testing, is really all we have regarding user privileges.
Много тестирования. Я бы посоветовал чаще проводить тесты на проникновение, чтобы убедиться, что вы где-нибудь не оставите дыр.
How do we deal with HDD failures? Is RAID 5 in combination with a daily incremental backup and a weekly full backup enough? Or would you go for RAID 6?
Я бы выбрал какой-то тип Raid и несколько серверов. Вам понадобится какой-то мониторинг, чтобы предупредить вас, если сервер выйдет из строя. В зависимости от того, где вы его разместите, у них может быть какое-то решение для мониторинга, для которого вы можете нанять их, поэтому они будут нести ответственность за то, чтобы сообщать вам, если что-то переходит в автономный режим. Я бы рекомендовал использовать Nagios для мониторинга сервера.
If one server is enough to serve the clients. Would you still use a cluster? (I would think so.) And in that case, how many nodes would you have in the cluster?
Да мало ли что может случиться.
Which backup strategy would you use?
Кластерное решение с сайтом аварийного восстановления, доставкой журналов (я знаю сервер sql, я знаю, что есть процесс для синхронизации нескольких серверов db) и ночное резервное копирование. Все резервные копии должны отправляться за пределы офиса и храниться не менее 7 дней. Они также должны быть зашифрованы для обеспечения безопасности данных.
Do you think hosting the system in a computer cloud is a good alternative? (i.e. as provided by Amazon, Google or others.)
Я пока не знаю, доверяю ли я им, и я слышал, что они очень дорогие. Для критически важной системы я использую то, что знаю, и использую проверенные технологии. Но это мое мнение. Они могут нормально работать.
Would you use hard disk encryption? And if so, which kind? (One clarification: Yes it's only good if someone steals the hard disk, but that's still added security and may prevent (physical) intruders access to vital client business data.)
Возможно нет. Это слишком сильно замедлит работу серверов. Я бы предпочел воспользоваться услугами хостинга, которым я могу доверять, чтобы обеспечить безопасность серверов.
Is providing the customer with a way to do their own backups as well a good alternative? These customers won't be technically oriented. So in that case downloading the information in a ZIP archive containing Microsoft Office files might be a good way?
Было бы неплохо предложить такую возможность, но если вы можете показать им комплексную стратегию резервного копирования, я бы сказал, что этого будет достаточно.
How would you monitor the solution?
Что-то вроде Nagios, и нанять хостинг, чтобы следить за исправностью сервера. Для 100% безотказной работы это действительно должно быть что-то вроде NOC, где кто-то всегда будет смотреть мониторы сервера.
Как вы думаете, какие из этих вещей мы должны делать дома, а какие - на аутсорсинге? Конечно, мы будем развивать основную систему нашей собственной личности.
Делайте то, что вам удобно и в чем вы компетентны. Похоже на программирование и тестирование. Я бы нанял людей для настройки сервера, хостинга и мониторинга. Ключ к этому - не предлагать самую низкую цену. Идите с людьми, которые сделают хорошую работу.
If you feel that the system is secure, as a technical person. How do you convince a non technical person that it's safe and secure?
У вас есть письменный набор политик и процедур, которым вы следуете. У вас есть список всех поставщиков, которых вы используете, с какими покупками у них и как они настроены для работы. Вы убедитесь, что все поставщики, с которыми вы заключаете контракты, имеют хорошую репутацию и хорошую репутацию.