سؤال

لا أريد وضع كلمات مرور غير مشفرة في ملف تكوين التطبيق.

هذا السؤال: تشفير كلمة مرور قاعدة البيانات في application.conf لديه حل رائع للمشكلة ولكنه يعمل فقط مع Play 1.

هل يعرف أحد حلاً يعمل مع Play 2.0؟أنا أستخدم anorm في إصدار Scala من Play 2.0.2.

هل كانت مفيدة؟

المحلول 3

بفضل المناقشة مع Raffaele واتباع التحقيق الخاص بي في التعليمات البرمجية، يبدو أن Play 2.0 لا يسمح لك بتشفير كلمات مرور DB.

إذا فاتني شيء، فيرجى إخبارنا بذلك.

تحرير : يمكن للمرء أن يعمل حول المشكلة باستخدام برنامج تشغيل قاعدة البيانات المخصصة بالطريقة التالية: giveacodicetagpre.

ثم يمكنك استبدال Application.conf / DB..درفير بواسطة برنامج تشغيل my.com.mydecpting.ليس مثاليا ولكن يعمل بالنسبة لي ...

نصائح أخرى

كل الجهود لا طائل منها.عندما نضع كلمة مرور مجزأة في قاعدة بيانات، فذلك لأن البشر يمكنهم الاحتفاظ بكلمات المرور في أدمغتهم، و أدمغتهم غير قابلة للقراءة.تسمى غير متماثل التشفير.

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

عندما يتعين على الجهاز الاتصال بقاعدة بيانات، فإنه يحتاج إلى كلمة مرور:نقوم بتخزين كلمة المرور هذه بنص عادي لأن البرنامج يجب أن يستخدمها كما هي، و لا يلزم إدخال الإنسان.كل ما يمكننا فعله لفرض الأمان هو تقييد الوصول إلى هذا الملف النصي العادي، وحمايته في النهاية بكلمة مرور مخزنة فقط في ذهن المسؤول (راجع للشغل، من المرجح أن يحتفظ المسؤول بجميع كلمات المرور الخاصة به في قاعدة بيانات، ربما باستخدام كلمة السر الرئيسية).لاحظ أن الأمور لا تتغير إذا كنت تستخدم مكون Play الإضافي المذكور.

الشيء الآخر الوحيد الذي يتبادر إلى ذهني هو تطبيق Play الذي يتصل بقاعدة البيانات فقط عندما يقوم المسؤول بإدخال كلمة مرور قاعدة البيانات (ولكن هذا في الحقيقة مجرد تمرين تفكير)

أعلم أن الوقت متأخر بعض الشيء ولكن لا توجد مناقشات جديدة حول هذه المشكلة.أريد مشاركة الحل الفعلي (Play v.2.5.X)، كما هو مقترح في توثيق, ، أصبح من الممكن الآن تجاوز GuiceApplicationLoader لتكوين GuiceApplicationBuilder لمعالجة التكوينات الأولية بطريقة أو بأخرى.

في فصل جديد modules/ApplicationLoaderConfig.scala:

import javax.crypto.Cipher
import javax.crypto.spec.SecretKeySpec
import javax.xml.bind.DatatypeConverter

import play.api.inject.guice._
import play.api.{ApplicationLoader, Configuration}

class ApplicationLoaderConfig extends GuiceApplicationLoader() {

  override def builder(context: ApplicationLoader.Context): GuiceApplicationBuilder = {

    // Decrypt secrets
    val decryptedConfig = context.initialConfiguration ++
      Configuration("config.to.descrypt.1" -> decryptDES(context.initialConfiguration.getString("config.to.descrypt.1").get)) ++
      Configuration("config.to.descrypt.2" -> decryptDES(context.initialConfiguration.getString("config.to.descrypt.2").get))

    initialBuilder
      .in(context.environment)
      .loadConfig(decryptedConfig)
      .overrides(overrides(context): _*)
  }

  private def decryptDES(secret: String): String = {
    val key = "12345678"
    val skeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "DES")

    val cipher = Cipher.getInstance("DES/ECB/PKCS5Padding")
    cipher.init(Cipher.DECRYPT_MODE, skeySpec)

    new String(cipher.doFinal(DatatypeConverter.parseBase64Binary(secret)))
  }
}

أضف أيضا إلى application.config:

play.application.loader = "modules.ApplicationLoaderConfig"
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top