Что делать, если какой-либо исходный код проекта рельсов должен быть скрыт даже для проекта с открытым исходным кодом?

Это было сложно найти. Если у меня есть проект веб-приложений с открытым исходным кодом, чей исходный код публично размещен, например, на 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.