2011-01-25 13 views
11

Đây là một điều khó tìm kiếm. Nếu tôi có dự án ứng dụng web mã nguồn mở có mã nguồn được lưu trữ công khai, như trên GitHub, thông tin nào sẽ bị che khuất hoặc hoán đổi nếu ứng dụng đó được chạy trong sản xuất tại một trang web công cộng? Giả định của tôi là những thứ như config/initilizers/secret_token.rb, bất kỳ công cụ xác thực nào, và thông tin đăng nhập cơ sở dữ liệu không nên giống nhau trong quá trình sản xuất như trong phát triển. Những biện pháp phòng ngừa khác cần được thực hiện để đảm bảo rằng các trang web sản xuất không phải là dễ bị tổn thương cho những người không thích với các phiên hoặc bất cứ điều gì khác mà tôi không xem xét? NguồnĐiều gì sẽ xảy ra nếu bất kỳ mã nguồn của dự án đường ray nào bị che khuất ngay cả đối với một dự án mã nguồn mở?

Trả lời

13

Rails cụ thể của thông tin nhạy cảm

Scrub thông tin nhạy cảm ra khỏi:

  • config/environments/*.rb
  • config/initializers/cookie_verification_secret.rb
  • config/initializers/secret_token.rb
  • config/initializers/session_store.rb
  • bất kỳ tập tin bổ sung để hỗ trợ thư viện của bên thứ ba, chẳng hạn như config/memcached.yml
  • config/database.yml
  • db/seeds.rb
  • bất kỳ nhiệm vụ cào trong lib/tasks.
  • test/fixtures/*

chung Changes

Bao gồm này chỉ vì tôi nghĩ đó là một danh sách tốt điều cần ghi nhớ cho phát hành phần mềm mã nguồn mở rằng bạn cũng có trong sản xuất.

  • Hủy bỏ thông tin nhạy cảm:
    • muối mật khẩu
    • thông tin người dùng mặc định dân cư theo mã hoặc hạt
    • thông tin
    • xác thực đối với bất kỳ máy chủ bên ngoài hoặc dịch vụ
      • cơ sở dữ liệu
      • API của bên thứ ba
      • giải pháp eCommerse
    • bất kỳ dữ liệu hạt giống có tiềm năng sẽ công bố bí mật thương mại
  • mã kiểm tra kỹ lưỡng cho khai thác. Nếu chúng có trong mã của bạn và mã của bạn có sẵn cho công chúng, mọi người sẽ tìm thấy chúng và sẽ biết cách thỏa hiệp trang web của bạn.
  • Dọn dẹp mã. Mã này là một dạng công khai cho trang web của bạn; đó là một trong nhiều điều sẽ đại diện cho trang web/công ty của bạn. Hãy chắc chắn rằng bạn thay đổi tên/thông báo lỗi/tên/dữ liệu đã được viết ra từ sự hài hước hoặc thất vọng nhưng điều đó sẽ có vẻ xấu đối với công chúng.
  • Tích cực đóng góp các cải tiến và sửa lỗi cho dự án và trả lời các yêu cầu sửa lỗi/nâng cao bên ngoài hoặc thậm chí yêu cầu kéo đối với những người đã tự giải quyết vấn đề. Điều này giúp cho dự án hoạt động và cũng giúp với góc công khai.
  • Đảm bảo bạn cung cấp tín dụng khi đến hạn. Bây giờ mã của bạn là công khai, mọi người sẽ biết bạn đã sử dụng mã/thư viện của bên thứ ba chưa. Nếu mã như vậy đi kèm với các điều khoản ghi trong thỏa thuận cấp phép của họ, hãy đảm bảo dự án của bạn tuân thủ các thỏa thuận đó.
+0

cảm ơn, nhưng tôi thực sự đang tìm kiếm thêm chi tiết về đường ray mà tôi có thể không biết, điều này có thể gây ra vấn đề bảo mật, như trong config/initilizers/secret_token.rb – re5et

+0

@ re5et: Đã thêm danh sách các tệp đường ray cho Bạn cũng vậy. :) – Shaun

1

Câu trả lời trước đó của Shaun rất kỹ lưỡng.

Ngoài ra, tôi muốn khuyên bạn nên sử dụng .gitignore làm lợi thế của bạn để tránh bao giờ thực hiện các tệp có thông tin nhạy cảm.

Bất kỳ tệp nào chứa khóa API hoặc mật khẩu, v.v. phải ở trong .gitignore. Thông thường, điều này bao gồm:

database.yml 
log/* 
tmp/* 

Nếu bạn có khóa API được gán cho hằng số trong tệp mã, tôi khuyên bạn nên đặt tất cả khóa API, mật khẩu, v.v ... vào tệp site.yml. Sau đó, thêm tệp này vào .gitignore và thêm trình khởi tạo để phân tích cú pháp tệp này thành một hằng số. Sử dụng hằng số đó để truy cập dữ liệu bí mật.

Ví dụ:

config/site.yml:

hoptoad_api_key: ABCDEF1234567890 

config/initializer/01_site.rb

SITE = HashWithIndifferentAccess.new(YAML.load(File.open(File.join(Rails.root, 'config', 'site.yml')))) 

config/initializer/hoptoad.rb

HoptoadNotifier.configure do |config| 
    config.api_key = SITE['hoptoad_api_key'] 
end 

Lưu ý rằng initializ ers được chạy theo thứ tự bảng chữ cái. Nếu bạn cần hằng số SITE trong các trình khởi tạo khác, hãy đảm bảo đặt tên cho tệp đọc cấu hình với số đầu tiên để nó được chạy trước tiên.

Để thân thiện với người dùng hơn cho một dự án mã nguồn mở, bạn nên bao gồm tệp database.yml.sample và tệp site.yml.sample với các ví dụ và/hoặc giải thích các cấu hình cần thiết trong README của bạn.

Các vấn đề liên quan