Gelişmiş şifreli anahtar kurulumlarını işlemek için gerçekten yerleşik bir MySQL özelliği yoktur. Şifreleme mantığının büyük kısmını kendi PHP ve / veya tarayıcı tarafı (javascript?) Kodunuza uygulamanız gerekir.
Ancak belirttiğiniz endişeler biraz tuhaf: Görünüşe göre tek gerçek endişeniz, uzak istemci masaüstü / dizüstü bilgisayar iş istasyonundan bir SQL enjeksiyonu veya kaba kuvvet (parola tahmin, sanırım) saldırısı. Bu, planlanmış başka güvenlik önlemleriniz olduğunu ve olası uzlaşma yollarını analiz ettiğinizi şüphelendiriyor.
Birincisi, onaylanmamış uzak istemci IP'lerinden her türlü erişime karşı MySQL / PHP ana bilgisayarını koruyan güvenlik duvarı kurallarına sahip olduğunuzu varsayıyorum. Doğruysam, yalnızca güvenliği ihlal edilmiş kullanıcıların iş istasyonlarından gelen saldırılardan endişe duymanız mantıklıdır.
Ayrıca, uzak istemci ana bilgisayarındaki bir saldırganın kök / Yönetici ayrıcalıklarına yükselebileceğini veya gerçek kullanıcının kendi hesabını doğrudan tehlikeye atabileceğini anlarsanız, müşterinin verilerinin şifreleme veya diğer güvenlik önlemlerinden bağımsız olarak sıfır koruması olduğunu anlarsınız. (Saldırgan, anahtarları diske kaydedildikleri yerden okuyabilir veya gerçek kullanıcı oturum açarken girip aradıklarında onları çalabilir ve anahtarlar verilere yol açabilir.)
Bu iki varsayımdan başlayarak, sadece ilgili iki tehdidin A) kaba kuvvet şifre tahminlemesi ve B) SQL enjeksiyon girişimleri olduğu sonucuna varmamız mantıklıdır:
- Saldırgan gerçek kullanıcının anahtarını alamazsa veya gerçek kullanıcının verilerinden daha fazlasına erişmek isterse, gerçek kullanıcı veya başka bir hesap için kaba zorlamalı oturum açma kredilerini deneyebilir. (Teorik olarak, her hesabı belirli bir uzak istemci IP'sine kilitleyebilirsiniz, bu da risklerin bölümlere ayrılmasına yardımcı olur.)
- Saldırgan gerçek kullanıcı için geçerli bir anahtar alırsa, oturum açma ekranından (muhtemelen güvenli olacak kadar basit olan), potansiyel olarak buggy uygulama kodunun yumuşak karnına bir caddesi vardır. Gerçek kullanıcının bağlamından başarılı bir SQL enjeksiyonu, ona diğer istemci verilerine de erişmesini sağlayabilir.
Şimdi, sunucu tarafı şifrelemenin bu durumlar için nasıl uygulandığından bahsedelim:
- Sunucu tarafı şifreleme kesinlikle SQL enjeksiyon tehdidine karşı yardımcı olur. Satır değerleri DB tablolarında şifrelenirse, saldırgan yalnızca diğer hesaplara ait verilerin anlamsız şifreleme metnini görebilir. Tehdit, bölümlere ayrılmıştır.
- Brute zorlu şifre tahmini, sunucu tarafı şifrelemeye bakan bir saldırgan için gerçekten zor değildir. Kullanıcıların anahtarlarının sunucuda depolanmasına veya parolanın yerinde oluşturulup oluşturulmadığına bakılmaksızın, önemli olan tek şey doğru parolanın olup olmadığıdır. Sunucu, geçerli saklanan anahtarı kullanmanıza izin verir, çünkü parolanızın doğru olup olmadığını kontrol eder veya parolanız o anahtarı oluşturmak için doğru girdi olduğundan sizin için geçerli anahtarı hesaplar.
İstemci tarafı şifreleme ise kaba kuvvet şifre saldırılarını önemsiz kılar. Düzgün yapılandırılmış bir anahtarı kaba kuvvet uygulayamazsınız. İstemci tarafı şifreleme, SQL enjeksiyonuna karşı sunucu tarafı şifrelemeyle de aynı düzeyde koruma sağlar. İstemci, oturum açma sırasında anahtarı sunucuya geçirebilir ve oturum bitene kadar bellekte bir kopya tutar ve bu da kripto CPU yükünü sunucuya yükler. Veya istemci tarayıcıda şifreleme / şifre çözme işlemini kendisi gerçekleştirebilir. Her iki tekniğin de iniş ve çıkışları vardır:
- Anahtarını sunucuya geçirmek, kodlamak ve yönetmek için çok daha kolaydır ve genellikle daha optimize edilmiş kripto kodu (muhtemelen derlenmiş C) nedeniyle çok daha hızlıdır.
- Saf bir istemci tarafı yaklaşımı ekstra güvenlik sağlar, çünkü bir saldırgan sunucuda kök salsa bile şifrelenmiş verileri hala okuyamaz ve asla okuyamaz. Mümkün olan tek saldırı vektörü uzak istemci iş istasyonundan ödün vermektir.
Son olarak, veritabanındaki verileri şifrelemenin bazı büyük operasyonel dezavantajları olduğunu not edeceğim. Şifrelenmiş veri gösterimleri aslında rastgele kalıplar olduğundan, dizin oluşturma, birleştirme vb. Gibi temel veritabanı özellikleri işe yaramaz. İstemci büyük bir mantık yükü üstlenir ve veritabanı özelliklerinin normalde getirdiği birçok avantajı kaybedebilir.