Это было сложно найти. Если у меня есть проект веб-приложений с открытым исходным кодом, чей исходный код публично размещен, например, на GitHub, какая информация должна быть скрыта или заменена, если это приложение будет запущено на производстве на общедоступном веб-сайте? Мое предположение заключается в том, что такие вещи, как config/initilizers/secret_token.rb, любые материалы для проверки подлинности и данные входа в базу данных, не должны быть одинаковыми в производстве, как в разработке. Какие еще меры предосторожности следует предпринять для обеспечения того, чтобы производственная площадка не была уязвима для людей, занимающихся сессиями или чего-то еще, что я не рассматриваю?
Что делать, если какой-либо исходный код проекта рельсов должен быть скрыт даже для проекта с открытым исходным кодом?
Ответ 1
Источники чувствительной информации с рельсами
Скраб конфиденциальной информации из:
-
config/environments/*.rb
-
config/initializers/cookie_verification_secret.rb
-
config/initializers/secret_token.rb
-
config/initializers/session_store.rb
- любые файлы, добавленные для поддержки сторонних библиотек, например
config/memcached.yml
-
config/database.yml
-
db/seeds.rb
- любые задачи rake в
lib/tasks
. -
test/fixtures/*
Общие изменения
Включая это только потому, что я считаю это хорошим списком вещей, чтобы иметь в виду выпуск программного обеспечения с открытым исходным кодом, которое вы также имеете в производстве.
- Удалить конфиденциальную информацию:
- соли солей
- учетные данные пользователя по умолчанию, заполненные кодом или семенами
- информация аутентификации на любой внешний сервер или услугу
- базы данных
- сторонние API
- eCommerse solutions
- любые посещенные данные, которые потенциально могут публиковать секреты торговли
- Простой код для эксплойтов. Если они находятся в вашем коде и ваш код доступен для общественности, люди найдут их и будут знать, как скомпрометировать ваш сайт.
- Очистите код. Код является формой рекламы для вашего сайта; это одна из многих вещей, которые будут представлять ваш сайт/компанию. Убедитесь, что вы изменяете имена переменных/функций/сообщения об ошибках/данные о посеве/и т.д., Которые были написаны из юмора или разочарования, но это будет выглядеть плохо для общественности.
- Активно вносите свои улучшения и исправления ошибок в проект и отвечайте на внешние запросы на исправления/улучшения или даже натягивайте запросы для тех, кто сам решил проблему. Это позволяет проекту активно, а также помогает с углом рекламы.
- Удостоверьтесь, что вы даете кредит, в котором должен быть кредит. Теперь, когда ваш код является общедоступным, люди узнают, используете ли вы сторонний код/библиотеки. Если такой код содержит положения об атрибутах в своих лицензионных соглашениях, убедитесь, что ваш проект соответствует этим соглашениям.
Ответ 2
Предыдущий ответ Шона очень тщательный.
Кроме того, я хотел бы рекомендовать использовать .gitignore в ваших интересах, чтобы избежать фиксации файлов с конфиденциальной информацией.
Любой файл, содержащий ключи API или пароли и т.д., должен находиться в .gitignore. Обычно это включает в себя:
database.yml
log/*
tmp/*
Если у вас есть ключи API, назначенные константам в файлах кода, я бы рекомендовал поместить все ключи API, пароли и т.д. в файл site.yml. Затем добавьте этот файл в .gitignore и добавьте инициализатор для синтаксического анализа этого файла в константу. Используйте эту константу для доступа к секретным данным.
Например:
конфиг/site.yml:
hoptoad_api_key: ABCDEF1234567890
конфигурации/инициализатор/01_site.rb
SITE = HashWithIndifferentAccess.new(YAML.load(File.open(File.join(Rails.root, 'config', 'site.yml'))))
конфигурации/инициализатор/hoptoad.rb
HoptoadNotifier.configure do |config|
config.api_key = SITE['hoptoad_api_key']
end
Обратите внимание, что инициализаторы выполняются в алфавитном порядке. Если вам нужна константа SITE
в других инициализаторах, обязательно укажите файл, который считывает конфигурацию с ведущим номером, чтобы он запускался первым.
Чтобы быть более удобным для проекта с открытым исходным кодом, вы должны включить файл database.yml.sample и site.yml.sample с примерами и/или объяснить необходимые конфигурации в вашем README.