Symfony'de veritabanını şifrelemek için nasıl

3 Cevap php

Ben symfony çerçeve ve uskur ile çalışmak ve ben bir veritabanını şifrelemek için en kolay yolu nedir dolaşıyordum. Ben şifreleri ancak tüm veritabanı bahsetmiyorum. Ben bazı bilgileri (kullanıcı hesapları, şifreleri vb) yönetir ve i don bir müşteri için küçük bir web uygulaması inşa; t birisi örneğin phpmyadmin erişimi varsa, görünür olmak istiyorum.

3 Cevap

Peki bu biraz naif olabilir, ama nasıl sadece sunucu üzerinde şifreleme hakkında [php sanıyorum] yaptığınızda geri şifresini ardından DB yazmadan önce yan ve okur? Bu sorun, bir sunucu admini istemiyorum gibi görünüyor easily veri okumak. Eğer Symfony kullanıyorsanız, muhtemelen kodu değiştirmek zorunda kalmazsınız modelinde derin yeterli yapabilirsiniz.


Bazı kazma sonra, burada özellikle cesur duygu olsaydı ben bunu nasıl olduğunu.

Edit buildParams () xxx / symfony / satıcı olarak / itmek / util / BasePeer.php gibi 860 bulacaksınız

$params[] = array('column' => $crit->getColumn(), 'table' => $crit->getTable(), 'value' => $crit->getValue());

geçmek

$params[] = array('column' => $crit->getColumn(), 'table' => $crit->getTable(), 'value' => your_encryption_method($crit->getValue()));

(Ben bir şey kaçırmış sürece) tüm symfony / propel) (sonunda bu işlevi çağırarak sona erecek veritabanına yazar, böylece db yazdığınız her şeyi your_encryption_method ile şifreli alır.

Bu deneyin ve still cesur duygu çalıştığını ve eğer, / xxx/symfony/vendor/propel-generator/classes/propel/engine/builder/om/php5 () işlevini addHydrate değiştirin PHP5BasicObjectBuilder.php (line 668) size symfony propel-build-model veya symfony-propel-build-all otomatik olarak veritabanından şeyi şifresini çağırdığınızda hidrat () kodu propel sizin için oluşturur böylece.

Şu anda gibi görünmelidir

                                    case PropelTypes::DATE:
    					case PropelTypes::TIME:
    					case PropelTypes::TIMESTAMP:
    						$script .= "
    		\$this->$clo = \$rs->get$affix(\$startcol + $n, null);
";
    						break;
    					default:
    						$script .= "
    		\$this->$clo = \$rs->get$affix(\$startcol + $n);
";

Eğer satırlar boyunca bir şey değiştirmek istiyorum

case PropelTypes::DATE:
    					case PropelTypes::TIME:
    					case PropelTypes::TIMESTAMP:
    						$script .= "
    		\$this->$clo = \$rs->get$affix(\$startcol + $n, null);
";
    						break;

    					default:
    						$script .= "
    		\$this->$clo = \my_decryption_function($rs->get$affix(\$startcol + $n));
";

Bu değişikliği yaptıktan sonra, symfony itmek-build-modeli çalıştırmak ve :-) çalıştı varsa bana bildirin. İyi şanslar ve muhtemelen bu biliyorum, ama onları değiştirmeden önce bu dosyaların yedeklerini yapmak .... oh ve çekirdek Symfony değiştirerek konum beri bunları tüm şifreli veri yazmak istemiyorsanız, diğer projelerin sorunları olacak db

Genellikle MySQL yerleşik izinleri ile ele olacaktır.

Bunu düzeltmek için en kolay yolu sadece bunu kaldırmak için, ya da yapamaz eğer bir SSL bağlantısı ve güçlü parolalar kullanın - yüklü ve sunucuda yapılandırılmış eğer birisi phpMyAdmin kullanabilirsiniz tek yoludur.

Düşünecek başka şeyler sunucuyu kilitleyerek olacak - bir başlangıç ​​için MySQL sadece localhost bağlantıları veya yerel ağ kabul emin olabilirsiniz.

Gerçek sorusuna gelince - ben etkili bir şekilde bütün bir veritabanını şifrelemek için hiçbir şekilde biliyorum. Birisi sunucuya erişimi varsa, onlar hala veri mümkün kazanç erişim olacaktır ... kesinlikle verileri şifreleyebilirsiniz, ancak yine de sunucu üzerinde şifre çözme kod yerleştirmek gerekir ki verilen, yararı tartışmalı olacaktır. En iyi şey, ilk etapta bu erişimini engellemektir.

Bu 3 seviyeli bir sorudur. Sen bazı şeyleri korumak gerekir:

  1. The input / ouput data so it cannot be intercepted.
  2. The admin rights, so your system can't be access by the wrong person while working.
  3. The hard drive itselft, so if somebody has direct access to the computer, he won't be able to access it even by extracting the hardware.

1 için, SSL ve HTTPS kullanabilirsiniz.

2 için, şifreler, hak ve güncellemeler (serverfault.com arkadaşın) ayarlanması için sysadmin iyi uygulamaları izleyin. Bu DB yöneticisi içerir.

3 için, tüm donanım şifrelemek gerekir. DB için şifreleme kullanarak yalnızca sunucu performansları öldürecek. Şifreleme kullanarak zaten sisteminizi yavaşlatabilir, ancak dosya sistemi üzerinde bir seviyede yapıyor web uygulamaları için bir çıkmaz eğer. Ayrıca, bir şifreli sabit disk üzerinde bir tüm Linux sistemi çalıştıran araçları oldukça kısraklar vardır (Ubuntu, LVM neredeyse şeffaf olduğunu yapalım).

Fark olarak, bu ne kadar şimdiye kadar Symfony ile ilgisi vardır.