2016-10-24 13 views
5

के साथ डीबी में उपयोगकर्ता डेटा को सुरक्षित रूप से संग्रहीत करें मैं उपयोगकर्ताओं से डेटा स्टोर करना चाहता हूं ताकि डेटाबेस बेकार हो जाए, भले ही डेटाबेस किसी भी तरह लीक हो जाए। मैं भी डेटा एन्क्रिप्ट करने में सक्षम हो नहीं करना चाहते, तो मैं `इस तरह openssl_encrypt 'के माध्यम से अपने सभी डेटा एन्क्रिप्ट:सिम्फनी

 $passCode = base64_encode($this->get('session')->get('_pk')); 

     if (strlen($passCode) <= 16) { 
      $iv = str_pad($passCode, 16, '0'); 
     } else { 
      $iv = substr($passCode, 0, 16); 
     } 

     $ciphertext = openssl_encrypt('whatevervalue', 'AES-256-CBC', $passCode, 0, $iv); 

     $test = new Test(); 
     $test->setValue($ciphertext); 
     ... 
     $em->persist($test); 
     $em->flush(); 
     ... 

$passCode वास्तव में अपने पासवर्ड, जो मैं इस तरह सत्र वर में डाल दिया है :

SecurityListener.php

<?php 

namespace AppBundle\Listener; 


use Symfony\Component\HttpFoundation\Session\Session; 
use Symfony\Component\Security\Http\Event\InteractiveLoginEvent; 

class SecurityListener 
{ 

public function __construct($security, Session $session) 
{ 
    $this->security = $security; 
    $this->session = $session; 
} 

public function onSecurityInteractiveLogin(InteractiveLoginEvent $event) 
{ 

    $this->session->set('_pk', base64_encode($event->getRequest()->get('_password'))); 
} 

} 

2 समस्याएं:

  • $passCode संग्रहीत करना (वास्तव में सत्रों के बारे में बहुत कुछ जानना व्हाईटआउट) संभवतः एक सुरक्षा समस्या प्रतीत होता है?

  • यदि कोई उपयोगकर्ता पासवर्ड बदलता है तो क्या होता है। वर्तमान तरीके से मुझे अपने सभी डीबी डेटा को नए पासवर्ड से डिक्रिप्ट और फिर से एन्क्रिप्ट करना होगा, ताकि यह उचित समाधान की तरह प्रतीत न हो। क्या होगा यदि वह अपना पासवर्ड खो देता है?

    मैं अपने डेटाबेस में सभी डेटा है कि खुद को उपयोगकर्ता वहाँ प्रवेश करती है एन्क्रिप्ट करना चाहते हैं:

शायद यह समझने के लिए क्या मैं यहाँ करना चाहते हैं आसान है। मैं चाहता हूं कि यह एक "फीचर" हो कि व्यवस्थापक भी कुंजी के बिना डेटा नहीं पढ़ सकते हैं। मुझे पता है कि उत्तरार्द्ध 100% संभव नहीं है (क्योंकि वेब इंटरफ़ेस के माध्यम से दर्ज किए जाने पर पासवर्ड/कुंजी को अवरुद्ध करने के तरीके होंगे, लेकिन कम से कम यह कोड के कुछ परिवर्तनों को लागू करता है)। क्या ऐसा कुछ भी संभव है? कोई ओपन सोर्स पोरजेक्ट्स मैं देख सकता हूं?

धन्यवाद! , यूजर आईडी खाता निर्माण तिथि, कुछ यादृच्छिक उत्पन्न नमक ...

  • एक हैशिंग समारोह है कि निजी कुंजी उत्पन्न होगा लिखें:

  • +0

    डेटाबेस में डेटा संग्रहीत करते समय डेटा क्रमिकरण/अनिश्चितता का उपयोग करने का प्रयास क्यों न करें। – Haridarshan

    +1

    सामान्य अनुशंसा: 'opensl_encrypt()' के बजाय [एक सुरक्षित PHP एन्क्रिप्शन लाइब्रेरी] (https://github.com/defuse/php-encryption) का उपयोग करें। विशेष रूप से, 'KeyProtectedByPassword' आपके लिए ब्याज की होगी। –

    उत्तर

    0
    1. कि निजी कुंजी उत्पन्न करने के लिए इस्तेमाल किया जाएगा प्रत्येक उपयोगकर्ता के लिए कुछ अपरिवर्तनशीलताओं है।
    2. फ़ंक्शन के कोड को बाधित करें।

    यह सही नहीं है, क्योंकि कोड और डेटाबेस तक पहुंच वाले लोग डेटा को समझने में सक्षम होंगे, लेकिन यह डेटाबेस लीक के खिलाफ सुरक्षित होना चाहिए और इसमें आपके द्वारा उल्लेख की जाने वाली समस्याएं नहीं हैं।

    एकमात्र सुरक्षित समाधान मैं सोच सकता हूं कि उपयोगकर्ता अपनी निजी कुंजी उत्पन्न कर सकते हैं और क्लाइंट पक्ष पर डेटा एन्क्रिप्ट कर सकते हैं, फिर सर्वर पर एन्क्रिप्टेड डेटा भेज सकते हैं। अन्यथा, यदि सर्वर को डिक्रिप्ट करने के लिए आवश्यक उपकरण हैं, तो संवेदनशील डेटा को डिक्रिप्ट करने के लिए सिस्टम तक पूर्ण पहुंच वाले किसी व्यक्ति के लिए हमेशा रास्ता होगा।

    मैं इस मामले में कोई विशेषज्ञ नहीं हूं और कृपया मुझे बताएं कि क्या मैं गलत हूं।