سؤال

ضمن تطبيقات Ruby on Rails، قاعدة البيانات.yml عبارة عن ملف نصي عادي يقوم بتخزين بيانات اعتماد قاعدة البيانات.

عندما أقوم بنشر تطبيقات Rails الخاصة بي ، لديّ بعد نشر رد اتصال في وصفة Capistrano الخاصة بي ، ينشئ رابطًا رمزيًا داخل دليل التطبيق /التكوين إلى ملف Database.yml.يتم تخزين الملف نفسه في دليل منفصل خارج بنية دليل Capistrano /releases القياسية.لقد قمت بتعديل الملف 400 بحيث لا يمكن قراءته إلا من قبل المستخدم الذي قام بإنشائه.

  • فهل هذا يكفي لإغلاقه؟إذا لم يكن الأمر كذلك، ماذا تفعل؟
  • هل يقوم أي شخص بتشفير ملفات قاعدة بياناتهم.yml؟
هل كانت مفيدة؟

المحلول

ستحتاج أيضًا إلى التأكد من أن نظام SSH الخاص بك مؤمن بشكل جيد لمنع الأشخاص من تسجيل الدخول مثل بوت كابيسترانو الخاص بك.أقترح تقييد الوصول إلى أزواج المفاتيح المحمية بكلمة مرور.

يعد تشفير ملف .yml على الخادم عديم الفائدة حيث يتعين عليك إعطاء الروبوت المفتاح الذي سيتم تخزينه...على نفس الخادم.ربما يكون تشفيره على جهازك فكرة جيدة.يستطيع Capistrano فك تشفيره قبل إرساله.

نصائح أخرى

الطريقة التي تعاملت بها مع هذا الأمر هي وضع كلمة مرور قاعدة البيانات في ملف له أذونات القراءة فقط للمستخدم الذي أقوم بتشغيل التطبيق الخاص بي به.ثم، في قاعدة البيانات.yml أستخدم ERB لقراءة الملف:

production:
  adapter: mysql
  database: my_db
  username: db_user
  password: <%= begin IO.read("/home/my_deploy_user/.db") rescue "" end %>

يعمل علاجا.

ألق نظرة على حل جيثب هذا: https://github.com/NUBIC/bcdatabase.توفر قاعدة بيانات bcdatabase مخزنًا مشفرًا حيث يمكن فصل كلمات المرور عن ملفات yaml.

com.bcdatabase

BCDATABASE هي مكتبة وفائدة توفر إدارة معلمات تكوين قاعدة البيانات لتطبيقات Ruby on Rails.يوفر آلية بسيطة لفصل سمات تكوين قاعدة البيانات من رمز مصدر التطبيق بحيث لا يوجد إغراء للتحقق من كلمات المرور في نظام التحكم في الإصدار.ويركض المعلمات لخادم واحد بحيث يمكن مشاركتها بسهولة بين تطبيقات متعددة ويتم تحديثها بسهولة من قبل مسؤول واحد.

حتى إذا قمت بتأمين ملف قاعدة البيانات.yml، فلا يزال بإمكان الأشخاص الكتابة باستخدام نفس بيانات الاعتماد إذا كان بإمكانهم تغيير رمز التطبيق الخاص بك.

هناك طريقة أخرى للنظر إلى هذا وهي:هل يتمتع تطبيق الويب بإمكانية الوصول إلى قاعدة البيانات بشكل كبير؟إذا كان صحيحا خفض الأذونات.إعطاء أذونات كافية للتطبيق.بهذه الطريقة يمكن للمهاجم أن يفعل فقط ما يستطيع تطبيق الويب القيام به.

إذا كنت قلقًا جدًا بشأن أمان ملف yml، فيجب أن أسأل:هل يتم تخزينها في التحكم في الإصدار الخاص بك؟إذا كان الأمر كذلك، فهذه نقطة أخرى يمكن للمهاجم الوصول إليها.إذا كنت تقوم بالخروج/الدخول عبر تقنية غير SSL، فمن الممكن أن يعترضها شخص ما.

أيضًا، مع بعض التحكم في الإصدار (svn، على سبيل المثال)، حتى إذا قمت بإزالته، فإنه لا يزال موجودًا في السجل.لذا، حتى لو قمت بإزالتها في وقت ما في الماضي، فلا يزال تغيير كلمات المرور فكرة جيدة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top