Может ли Ada быть лучшим выбором для создания защищенного веб-сайта, чем Java/Python?
Я из сети и операционной системы, а не из фона разработки. У меня есть некоторый опыт написания кода на Python и PHP, и я изучал разработку программного обеспечения в колледже. В качестве хобби-проекта (на данный момент) я планирую создать небольшой веб-сайт, который будет иметь компонент для хранения PII и конфиденциальной информации. Я должен отдавать предпочтение безопасности в первую очередь, а вторую - производительности (в основном шифрованию / дешифрованию).
Моя цель - по возможности зашифровать все, а также иметь код, который дает как можно меньше места (по умолчанию) для эксплуатации. Сайт будет размещен в системе Linux.
Вся идея проекта заключается в том, чтобы выучить язык как можно глубже (насколько это возможно), и я чувствую, что буду гораздо более сосредоточенным, если выберу какую-то идею, которая мне нравится. И эта идея включает в себя обработку PII и другой конфиденциальной информации. И, если конечный продукт окажется хорошим, то откроет его, поэтому он захочет сделать правильный выбор при выборе языка для написания кода.
Я немного читал и видел, как люди упоминали, что для бэкэнда c/ C++ был бы хорош, так как он дает хорошую производительность и гибкость, но безопасность не легка. Следующим лучшим выбором будет Ada 2012, так как он обеспечивает большую безопасность, чем C/C++, а также не снижает производительность. Java также может обеспечить безопасность, но может быть немного медленнее. А потом Python/Ruby.
Я думаю, что Ada 2012 может быть хорошим выбором, но я не хочу входить в положение, когда я изучаю его до некоторой степени, а затем понимаю, что мне было бы лучше с Python или Java или каким-либо другим языком.
Я хочу узнать от экспертов ответы на эти 3 конкретных вопроса:
Какой язык будет идеальным для разработки этого сайта, чтобы:
- можно использовать лучшие библиотеки шифрования / дешифрования?
- возможности языка могут быть использованы для написания по сути безопасного кода?
- Кроме того, чем больше производительности можно получить, тем лучше?
Пожалуйста, порекомендуйте. А также, если кто-то занимался разработкой сайтов (особенно тех, кто занимается PII) с использованием Ada, пожалуйста, поделитесь своим опытом.
Я знаю, что каждый язык имеет свои преимущества и недостатки, и цель моего запроса - извлечь уроки из опыта тех, кто много лет работал разработчиками веб-сайтов и использовал несколько языков и структур для разработки веб-сайтов, работающих с конфиденциальными данными. Если моды думают, что вопрос может начать хорошую войну против плохой языковой, я прошу прощения, поскольку это не намерение, и я закрою вопрос.
2 ответа
Возможности языка могут быть использованы для написания изначально безопасного кода? Система типов Ады поддерживает написание кода, который проверяет данные перед использованием. Это особенность языка, которая помогает с IT-безопасностью. Но, конечно, IT-безопасность - это гораздо больше. Конфигурирование брандмауэров, например, с помощью systemd, чтобы указать, сколько процессов исполняемого файла разрешено одновременно запускать в ОС, сколько памяти каждому процессу разрешено выделять, какие каталоги имеют различные приложения, к которым есть доступ и разрешения, и так далее. Я уверен, что есть много чего я не упоминаю и не освещаю в этом коротком ответе.
Лучшие доступные библиотеки шифрования / дешифрования можно использовать? Насколько мне известно, лучшая библиотека для криптографии - Ada-Crypto-Library: https://github.com/cforler/Ada-Crypto-Library. Но то, что требуется, - это создание безопасного веб-приложения. Для шифрования Secure Socket Layer (https) Ada-Crypto-Library не используется ни в одной реализации http-сервера, о которой я знаю. Если кто-то хочет разработать веб-приложение на Ada, я вижу три варианта: AWS (Ada Web Server) от AdaCore и включенный в Community Edition компилятора GNAT (www.adacore.com), реализацию http-сервера. в простых компонентах Дмитрия Казакова ( http://www.dmitry-kazakov.de/ada/components.htm) или GNOGA (www.gnoga.com), который реализован поверх простых компонентов Дмитрия Казакова. Ой, подождите, Матрешка также может быть использована, но я еще не использовал ее, поэтому я не могу комментировать ( http://forge.ada-ru.org/matreshka).
Согласно документации AWS, ее можно скомпилировать для использования OpenSSL, LibreSSL или GNUTLS ( http://docs.adacore.com/live/wave/aws/html/aws_ug/building_aws.html).
С Simple Components и GNOGA реализация Secure Socket Layer обеспечивается GNUTLS.
Другой вариант предоставления SSL для веб-приложения - это использование веб-сервера Apache в качестве прокси-сервера, который обрабатывает шифрование (я никогда не делал такой настройки, только слышал о существовании такой возможности).
Кроме того, чем больше производительности можно получить, тем лучше? Мне нравится производительность, и как получить лучшую производительность - огромный вопрос. В целом, я думаю, что Ada - хороший выбор языка программирования для тех, кто любит производительность. Из головы в голову, чтобы максимизировать производительность с помощью Ады, нужно:
1) При использовании стандартных контейнеров и компилятора GNAT можно использовать "Pragma Suppress (Tampering_Checks)"; повысить производительность одного приложения. Не все согласны с этим мнением о том, чтобы иметь одну отладочную сборку с включенными проверками несанкционированного доступа, а затем одну выпускную сборку с отключенными проверками, так как одна меняет безопасность на производительность, но это оказывает заметное влияние на производительность. В качестве альтернативы стандартным контейнерам можно использовать контейнеры на основе Ada-Trait ( https://github.com/AdaCore/ada-traits-containers). Они могут быть самыми хорошо разработанными контейнерами в мире для языка программирования Ada.
2) Избегайте использования Unbounded_String в стандартной библиотеке. Вместо этого можно использовать реализацию неограниченной строки XString в библиотеке GNATColl и повысить производительность в 10 раз. Также рассмотрите возможность размещения обычных строк внутри пулов памяти (или подпулов), если это возможно (я сделал это в приложении Xml_Parser в репозитории: https://github.com/joakim-strandberg/wayland_ada_binding)
РЕДАКТИРОВАТЬ: я сознательно избегать споров о том, лучше ли Ada, Java или Python, и вместо этого сосредоточиться на том, что вы должны сделать и рассмотреть, если вы сделаете это в Ada.
Краткий ответ - нет, такая система никогда не возможна. PII менее чувствителен, чем ядерная программа.
Длинный ответ -
1. лучшие из доступных библиотек шифрования / дешифрования можно использовать?- Поскольку в вашем вопросе упоминается, что шифрование идет с расшифровкой, SHA-1 теперь не работает, проверьте альтернативы ( https://www.forbes.com/sites/forbestechcouncil/2017/04/13/sha-1-encryption-has-been-broken-now-what/) и если вы хотите углубиться, речь идет не о библиотеках, а об алгоритме, используемом для работы. Любое шифрование рано или поздно может быть нарушено.
2. Возможности языка могут быть использованы для написания по сути безопасного кода? Нет ничего лучше, чем безопасный язык или возможности языка, чтобы спасти вас, есть несколько фреймворков, основанных на некоторых принципах безопасности, просто следуйте инструкциям, чтобы сделать код безопасным. Следуя им, вы были бы в безопасности, если бы не было проблем, и на веб-сайте можно запустить около 5000 бесплатных инструментов (неофициальное число), чтобы взломать его. Готовы ли вы протестировать свою систему на таком большом количестве инструменты?
3. Кроме того, чем больше производительности можно получить, тем лучше?- Чем сильнее шифрование и безопасность, тем выше производительность, которую вы теряете, всегда компромисс, поэтому выбирайте свою беговую дорожку.
Безопасность - это очень расплывчатый и широкий термин, и каждый может взломать даже таких, как Yahoo и Symantec. ( https://gizmodo.com/researchers-made-a-clever-tool-to-detect-hacks-companie-1821293404) до сих пор не уверен, что это состояние дел - https://en.wikipedia.org/wiki/Stuxnet но даже этому 20 лет и всего 500 килобайт угроз.
Мои 2 цента - Поскольку мы имеем дело с 0 и 1, пожалуйста, определите четкие цели с точки зрения безопасности и производительности, сделайте poc(подтверждение концепции) и проведите несколько тестов производительности.