زيادة تحميل وظيفة PHP الأصلية لتشفير البيانات الخاصة بالامتثال HIPAA

StackOverflow https://stackoverflow.com/questions/3259931

سؤال

معلومات الخلفية:

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

المشكلة الأولية

المشكلة الأولى اضطررنا إلى معالجة أفضل طريقة لتشفير البيانات ذات الاتجاهين بطريقة تجعل البيانات آمنة في حالة وجود خرق.

الحل الأولي

الحل الأسرع الذي وصلنا إليه هو استخدام mcrypt لتشفير البيانات قبل أدرجناها في قاعدة البيانات.

المشكلة الجديدة

التطبيق نحن نتطور قديم جدا (نظرا لأن تطبيقات الويب تذهب) وتستخدم الكثير من البرمجة الإجرائية وكذلك الاعتماد الكثيف على MySQL_QUERY وظيفة لإدراج وتحديث واسترداد وحذف البيانات. ليس لدينا الوقت أو الفخامة في ترجمة التعليمات البرمجية لدينا إلى طبقة تجريد قاعدة البيانات. لذلك، الطريقة الوحيدة لتنفيذ نظام التشفير / فك التشفير هذا هو تعديل جميع استفسارات CRUD يدويا لاستخدام البيانات التي تم تشفيرها عبر mcrypt . هذا غير فعال للغاية وغير عرضة للخطأ للغاية.

حلنا المقترح

قررنا أن أسرع وأكثر وسيلة فعالية لحل مشكلتنا هي الكتابة فوق rel="nofollow noreferrer"> mysql_query وظيفة مع واحدة من ابتسم لدينا. في وظيفتنا الجديدة، سنقوم بتشفير / فك تشفير قيم البيانات قبل إرسال الاستعلام إلى الخادم / إرجاع النتائج.

حيث يأتي الناس في

  1. هل هذا هو أفضل حل لحل مشكلتنا الأولية؟
  2. كيف يمكنك الذهاب إلى الكتابة فوق وظيفة PHP الحالية أو الأساسية؟
هل كانت مفيدة؟

المحلول

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

أفضل شيء آخر سيكون لتشفير قاعدة البيانات بأكملها، كما هو مقترح في التعليقات.هناك حلول هناك لتشفير شفاف في مستويات مختلفة، أي: هذا أو هذا

شيء آخر قد ترغب في النظر فيها هو MySQL الأصلية التشفير وفك التشفير وظائف، والتي يمكن استخدامها لتنفيذ تشفير مستوى العمود إذا كنت تشعر بالقلق بشأن الأداء.

نصائح أخرى

في حين أن أفضل حل سيكون طبقة التجريد التي اقترحت الإجابات الأخرى، يمكنك تجاوز وظائف PHP الموجودة مع الإصدارات الخاصة بك مع pecl runkit التمديد

شيء مثل:

giveacodicetagpre.

ملاحظة: بشكل افتراضي، يستخدم المستخدمون فقط قد تتم إزالة الوظائف وإعادة تسميتها أو تم التعديل. من أجل تجاوز الوظائف الداخلية، يجب أن تمكن Runkit.internal_override الإعداد في php.ini.

ليس حلا أوصي به حقا. اضطررت إلى القيام بشيء مماثل بعد بضع سنوات في جافا، حيث كان من الأسهل بكثير تمديد JDBC؛ ولكن في حين أن تحليل بناء جملة استفسارات SQL أمر صعب بما فيه الكفاية، إلا أنه يصبح أكثر صعوبة إذا كانت استفساراتك تستخدم متغيرات الربط. احترس من سلاسل هارب! احترس من أي استخدام لوظيفة ذات صلة مثل mysql_db_query، فقط في حالة استخدامها إلى جانب MySQL_QUERY داخل التطبيق!

اعتذار عن الكتابة الهش. كانت زوجتي كذاب جهاز التوجيه لدينا عدة مرات بينما كنت أكتب هذا الاقتراح

أعتقد طريقة واحدة من التعامل مع هذا تلقائيا سيكون النظر في MySQL Proxy

وتنفيذ التشفير من خلال ذلك.لقد لعبت حولها معها قبل 2 أو نحو ذلك منذ سنوات عندما كانت في مراحل مبكرة للغاية، ومن ما أتذكر أنه يمكن أن تعترض الطلبات في الأساس طلبات "الأشياء" معهم :) لا تغيير رمز مطلوب أساسا. نأمل أن هذا يساعد.

هناك حلول متاحة تجاريا للمساعدة في البيانات في تشفير الراحة.يمكنك التحقق من إما Gazzang أو Packet General.كلاهما يقدم تشفير MySQL للمساعدة في امتثال Hippa.حظا سعيدا

يمكنك التشفير في مستوى نظام الملفات، واترك نظام التشغيل التعامل معه.إذا كنت ترغب في التعامل معها على مستوى PHP، فقم بإعادة الكتابة، لا تنتبئ.

giveacodicetagpre.

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

تفكر في تشفير الأجهزة أو البرامج بالكامل، تشفير قاعدة البيانات نفسها عبر وظيفة تشفير البيانات الشفافة ل RDBMS (إذا كان لدى RDBMS المعينة واحدة)، أو عبر نظام التشغيل.

شاهد هذا المستند من NIST

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