2022'de PHP ile Parolaları, Anahtarları ve Daha Fazlasını Şifrelemenin En İyi Yolları
Birkaç yıl önce, Marcus Bointon'un PHP 7.2'de Crypto hakkında harika bir konuşma yaptığı Laracon EU'ya katıldım. Konuşmayı, kriptografinin ne kadar karmaşık olduğunu ve aynı zamanda Sodyum'un tanıtımı sayesinde PHP'nin şifrelemeyi nasıl daha erişilebilir hale getirdiğini çok daha fazla takdir ederek bıraktım. PHP'de veri şifreleme, binlerce sunucuya ve siteye kök erişimi olan bulut tabanlı bir sunucu kontrol paneli olan SpinupWP'deki çalışmalarım için çok önemliydi ve o zamandan beri öğrendiklerimi paylaşmanın faydalı olacağını düşündüm. Kemerlerinizi bağlayın, çünkü bu inişli çıkışlı bir yolculuk olabilir!
Şifreleme Türleri
Günümüzde kullanılan bir dizi farklı şifreleme yöntemi vardır, en yaygın olanları karma, gizli anahtar şifrelemesi ve zarf şifrelemesidir. Ayrıca, her şifreleme yönteminin seçilebilecek birden fazla algoritması veya şifresi vardır (her birinin kendi güçlü ve zayıf yönleri vardır). Bu makalede, üç şifreleme yönteminin tümünü uygulamaya bakacağız.
Hashing
Karma algoritması bir girdi değeri alır ve bunu "mesaj özeti", "karma değeri" veya basitçe "karma" olarak bilinen sabit uzunlukta bir çıktıya dönüştürür. Hashing yalnızca bir yoldur; bu, hashlenmiş bir çıktıyı doğrulamanın tek yolunun orijinal değeri hashing algoritmasına geçirmek ve sonuçları karşılaştırmak olduğu anlamına gelir. Bu, kullanıcı parolalarını depolamak için karma işlemini mükemmel hale getirir.
Karma işleminin kurşun geçirmez bir çözüm olmadığını ve tüm karma algoritmaların eşit olmadığını belirtmekte fayda var. Hızlı ve verimli olan MD5 ve SHA1'i göz önünde bulundurun ve bunları sağlama toplamı ve dosya doğrulama için ideal hale getirin. Ancak hızları, onları bir kullanıcının parolasını karıştırmak için uygun hale getirmez.
Modern CPU'ların/GPU'ların ve bulut bilişimin günümüzün hesaplama gücüyle, karma bir parola birkaç dakika içinde kaba kuvvetle kırılabilir. Bir eşleşme bulunana kadar rastgele sözcüklerden hızla milyarlarca MD5 karma oluşturmak ve böylece orijinal düz metin parolasını ortaya çıkarmak oldukça önemsizdir. Bunun yerine, bcrypt veya Argon2 gibi kasıtlı olarak daha yavaş karma algoritmaları kullanılmalıdır.
Herhangi bir algoritma tarafından oluşturulan karma bir parola kesinlikle orijinal verileri gizleyecek ve olası herhangi bir saldırganı yavaşlatacak olsa da, geliştiriciler olarak bizler mevcut en güçlü algoritmayı kullanmaya çalışmalıyız. Neyse ki PHP, password_hash() sayesinde bunu kolaylaştırıyor.
$hash = password_hash($password, PASSWORD_DEFAULT);
password_hash() işlevi yalnızca güvenli bir tek yönlü karma algoritması kullanmakla kalmaz, aynı zamanda tuzu otomatik olarak işler ve zamana dayalı yan kanal saldırılarını önler. İşlev, şifrelenecek bir $password ve bir $algo karma algoritmasını kabul eder. PHP 5.5'ten itibaren, Blowfish şifresini temel alan bcrypt ( PASSWORD_BCRYPT ), varsayılan karma algoritma olarak kullanılacaktır. PHP'nin sonraki sürümleri, Argon2 (PHP 7.2) ve Argon2id (PHP 7.3) algoritmalarını tanıttı, ancak bcrypt hala varsayılandır. Aslında, password_hash() işlevindeki iyileştirmelerin yanı sıra, mevcut seçenekler o kadar güvenli kabul ediliyor ki, ne PHP 8.0 ne de PHP 8.1 için dile yeni algoritmalar eklenmedi.
PHP sürümünüz Argon2 desteğiyle derlenmişse, password_hash() işlevinin $algo bağımsız değişkeni olarak PASSWORD_ARGON2I veya PASSWORD_ARGON2ID sabitini ileterek Argon2 veya Argon2id kullanmak mümkündür. Web sunucunuzda hangi algoritmaların desteklendiğini kontrol etmek için sunucu komut satırından PHP etkileşimli modunu başlatabilir ve password_algos işlevini çalıştırabilirsiniz. Aşağıda, üç seçeneğin de mevcut olduğu standart bir SpinupWP sunucusunda bu komutun çıktısının bir örneği verilmiştir.
[email protected]:~$ php -a Interactive mode enabled php > print_r(password_algos()); Array ( [0] => 2y [1] => argon2i [2] => argon2id ) php >
password_verify() işlevi sayesinde bir kullanıcının parolasını doğrulamak da önemsiz bir işlemdir. Kullanıcı tarafından sağlanan düz metin parolasını iletin ve depolanan karma ile karşılaştırın, şöyle:
if (password_verify($password, $hash)) { echo "Let me in, I'm genuine!"; }
PHP'de parola doğrulamanın nasıl yapıldığına dikkat edin. Bir kullanıcının kimlik bilgilerini bir veritabanında saklıyorsanız, oturum açma sırasında girilen parolayı karma hale getirme ve ardından aşağıdaki gibi bir veritabanı SQL sorgusu gerçekleştirme eğiliminde olabilirsiniz:
SELECT * FROM users WHERE username = 'Ashley' AND password = 'password_hash' LIMIT 1;
Bu yaklaşım, yan kanal saldırılarına karşı hassastır ve bundan kaçınılmalıdır. Bunun yerine, kullanıcıyı döndürün ve ardından PHP'de parola karmasını kontrol edin.
SELECT username, password FROM users WHERE username = 'Ashley' LIMIT 1;
if (password_verify($user->password, $hash)) { echo "Let me in, I'm genuine!"; }
Karma, parolaları şifrelemek için harika olsa da, uygulamamızın kullanıcı müdahalesi olmadan erişmesi gereken rastgele veriler için çalışmaz. Bir kullanıcının kredi kartı bilgilerini şifreleyen ve genellikle bir HTML formundan kaydedilen bir faturalandırma uygulamasını ele alalım. (İlgili yasal ve PCI uyumluluk gereksinimleri göz önüne alındığında, kendi fatura uygulamanızı oluşturmanızı önermiyoruz, bunun yerine Stripe gibi bir şey kullanın. Bunu sadece örnek olarak kullanıyoruz). Her ay, uygulamamızın kullanıcıyı bir önceki ayın kullanımı için faturalandırması gerekir. Kredi kartı verilerinin hash edilmesi işe yaramaz çünkü uygulamamızın daha önce de belirttiğimiz gibi hashing ile mümkün olmayan hashlenmiş verilerin şifresini çözebilmesini gerektirir.
Kurtarmak için gizli anahtar şifreleme!
Gizli Anahtar Şifreleme
Gizli anahtar şifreleme (veya bilinen adıyla simetrik şifreleme), verileri hem şifrelemek hem de şifresini çözmek için tek bir anahtar kullanır. Geçmişte PHP, gizli anahtar şifreleme için mcrypt ve openssl'ye güveniyordu. PHP 7.2, daha modern ve yaygın olarak daha güvenli kabul edilen Sodyum'u tanıttı. PHP'nin daha eski bir sürümünü çalıştırıyorsanız, Sodyum'u PHP Uzantısı Topluluk Kitaplığı aka PECL aracılığıyla yükleyebilirsiniz.
Bir değeri şifrelemek için önce, sodium_crypto_secretbox_keygen() işlevi kullanılarak oluşturulabilecek bir şifreleme anahtarına ihtiyacınız olacak.
$key = sodium_crypto_secretbox_keygen();
Anahtar uzunluğu için SODIUM_CRYPTO_SECRETBOX_KEYBYTES tamsayı sabiti ile random_bytes() işlevini de kullanabilirsiniz, ancak sodium_crypto_secretbox_keygen() kullanmak anahtar uzunluğunun her zaman doğru olmasını (yani çok kısa olmamasını) sağlar ve bu daha kolaydır.
$key = random_bytes( SODIUM_CRYPTO_SECRETBOX_KEYBYTES );
Her iki durumda da, genellikle bunu yalnızca bir kez yapacak ve sonucu bir ortam değişkeni olarak depolayacaksınız. Bu anahtarın ne pahasına olursa olsun gizli tutulması gerektiğini unutmayın. Anahtarın güvenliği ihlal edilirse, bu anahtar kullanılarak tüm veriler şifrelenir.
Orijinal değeri şifrelemek için, $key ve oluşturulan bir $nonce ile sodium_crypto_secretbox() işlevine iletin. Nonce'yi oluşturmak için nonce uzunluğu için SODIUM_CRYPTO_SECRETBOX_NONCEBYTES tamsayı sabitiyle random_bytes() işlevini kullanın, çünkü aynı nonce asla yeniden kullanılmamalıdır.
$nonce = random_bytes( SODIUM_CRYPTO_SECRETBOX_NONCEBYTES ); $encrypted_result = sodium_crypto_secretbox( 'This is a secret!', $nonce, $key );
Bu bir sorun teşkil ediyor çünkü daha sonra değerin şifresini çözmek için nonce'ye ihtiyacımız var. Neyse ki, nonce'ların gizli tutulması gerekmez, böylece onu $encrypted_result , ardından veritabanına kaydetmeden önce değeri base64_encode() 'a ekleyebiliriz.
$encoded = base64_encode( $nonce . $encrypted_result );
Bu, 76 karakter uzunluğunda bir base64 kodlu dize oluşturacaktır.
Değerin şifresini çözmek söz konusu olduğunda, base64 kodlu dizenin kodunu çözmekle başlayarak tersini yapın.
$decoded = base64_decode($encoded);
Nonce'nin ( SODIUM_CRYPTO_SECRETBOX_NONCEBYTES ) uzunluğunu bildiğimiz için, değerin şifresini çözmeden önce mb_substr mb_substr() kullanarak onu çıkartabiliriz.
$nonce = mb_substr($decoded, 0, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES, '8bit'); $encrypted_result = mb_substr($decoded, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES, null, '8bit'); $plaintext = sodium_crypto_secretbox_open($encrypted_result, $nonce, $key); // string(17) "This is a secret!"
Sodyum sayesinde PHP'de gizli anahtar şifreleme için gereken tek şey bu!
Zarf Şifreleme
Yukarıda özetlenen yaklaşım kesinlikle doğru yönde atılmış bir adım olsa da, gizli anahtarın ele geçirilmesi durumunda verilerimizi hala savunmasız bırakır. Uygulamamızı barındıran sunucuya erişim sağlayan kötü niyetli bir kullanıcıyı düşünelim. Herhangi bir hassas verinin şifresini çözmek için sunucuda takılmazlar. Bunun yerine, verilerin ve ilgili tüm dosyaların bir kopyasını kendi altyapılarına yapacaklar ve verileri şifrelemek için kullandığımız gizli anahtarımızı keşfetmeye çalışacaklar. Bu, verilerimizi tamamen açıkta bırakır.
Basit çözüm, gizli anahtarımızı şifrelenmiş verilerle aynı yerde saklamamaktır, ancak bu bir sorun yaratır. İsteğe bağlı olarak nasıl şifreleyip şifresini çözeriz? Anahtarları platformlarında güvenli bir şekilde barındırmanıza izin veren Anahtar Yönetim Hizmetlerine (KMS) girin. AWS ve Google gibi bulut altyapısı sunan şirketlerin her birinin kendi teklifleri vardır. Hızlı bir eğitim olarak, Google'ın Bulut KMS'sine odaklanacağız.
Google Bulut KMS'si
Cloud KMS, şifreleme anahtarlarını güvenli bir şekilde barındırmak için Google tarafından sağlanan bir hizmettir. Otomatik anahtar döndürme ve gecikmeli anahtar imhası dahil olmak üzere, anahtar depolamayla ilgili çeşitli kullanışlı özellikler sağlar. Ancak, öncelikle gizli anahtarımızı uygulamamızdan ayrı olarak depolamakla ilgileniyoruz.
İşleri daha güvenli hale getirmek için zarf şifreleme olarak bilinen bir teknik kullanacağız. Esasen, zarf şifreleme, anahtarların başka bir anahtarla şifrelenmesini içerir. Bunu iki nedenden dolayı yapıyoruz:
- Cloud KMS, şifrelenebilen ve şifresi çözülebilen veriler üzerinde 64 KiB'lik bir boyut sınırına sahiptir. Bu nedenle, tüm verileri bir çırpıda göndermek mümkün olmayabilir.
- Daha da önemlisi, ne kadar güvenilir görünürse görünsün, hassas düz metin verilerimizi üçüncü bir tarafa göndermek istemiyoruz.
Düz metin verilerimizi Cloud KMS'ye göndermek yerine, hassas verileri veritabanına her yazdığımızda benzersiz bir şifreleme anahtarı oluşturacağız. Bu anahtar, verilerimizi şifrelemek için kullanılacak olan veri şifreleme anahtarı (DEK) olarak bilinir. DEK daha sonra şifrelenmek üzere Cloud KMS'ye gönderilir ve bu, bir anahtar şifreleme anahtarı (KEK olarak bilinir) döndürür. Son olarak KEK, şifrelenmiş verilerin yanında veri tabanında yan yana saklanır ve DEK yok edilir. Süreç şöyle görünüyor:
- Bir veri şifreleme anahtarı (DEK) oluşturun
- Gizli anahtar şifrelemesi kullanarak verileri şifreleyin
- Benzersiz şifreleme anahtarını (DEK), şifreleme için KEK'yi döndüren Cloud KMS'ye gönderin.
- Şifreli verileri ve şifreli anahtarı (KEK) yan yana saklayın
- Oluşturulan anahtarı (DEK) yok et
Verilerin şifresi çözülürken süreç tersine çevrilir:
- Veritabanından şifrelenmiş verileri ve şifreli anahtarı (KEK) alın
- KEK'i şifre çözme için Bulut KMS'ye gönderin, bu da DEK'i döndürür
- Şifrelenmiş verilerimizin şifresini çözmek için DEK'i kullanın
- DEK'i yok et
Bulut KMS ve PHP
Çoğu Google Cloud hizmeti gibi, PHP uygulamalarımızda kullanabileceğimiz bir PHP SDK'sı var. Cloud KMS belgeleri oldukça kapsamlıdır, ancak size tüm gereksinimleri anlatan Hızlı Başlangıç kılavuzu ve Kimlik Doğrulama kılavuzu ile başlamanızı öneririm.
Bulut KMS Gereksinimleri
Öncelikle bir Google Cloud hesabı oluşturmanız ve yeni bir Google Cloud projesi oluşturmanız gerekir. Ardından, Cloud KMS API'sini etkinleştirir ve Cloud SDK'yı yükleyip başlatırsınız. Bu adım, bir Cloud KMS anahtarlığının parçası olan ve bir Cloud KMS konumunda bulunan Cloud KMS anahtarınızı oluşturmak için kullandığınız gcloud komut satırı aracını çalıştırmanıza olanak tanır. Son olarak, bir hizmet hesabı oluşturmanız, projeye dayalı olarak hizmet hesabına izinler vermeniz ve ardından hizmet hesabı kimlik bilgilerini yerel bir kimlik bilgileri dosyasında saklamanız gerekir.
Tüm bunları ayarlamak çok fazla iş gibi görünse de, Google Cloud belgeleri adımlarda size yol göstermede gerçekten yardımcı oluyor.
Bulut KMS PHP Uygulaması
Bunu akılda tutarak, zarf şifrelemesi gerçekleştirmek için Google Cloud KMS SDK'yı kullanan çok basit bir yardımcı sınıf oluşturdum. Bu üretime hazır kodu, daha iyi hata işlemeyi kullanabileceği için düşünmezdim, ancak size başlamak için bir yer verir. Bu yardımcı sınıf, şu anda 1.12 sürümünde olan Google Cloud KMS SDK'nın en son sürümünü kullanır.
<?php namespace MyCloudKmsProject; use Google\ApiCore\ApiException; use Google\Cloud\Kms\V1\CryptoKey; use Google\Cloud\Kms\V1\CryptoKey\CryptoKeyPurpose; use Google\Cloud\Kms\V1\KeyManagementServiceClient as Kms; use Google\Cloud\Kms\V1\KeyRing; class KeyManager{ private $kms; private $projectId; private $locationId; private $locationRef; private $keyRingId; private $keyRingRef; private $cryptoKeyId; private $cryptoKeyRef; public function __construct(Kms $kms, KeyRing $keyRing, CryptoKey $cryptoKey, $projectId, $locationId, $keyRingId, $cryptoKeyId) { $this->kms = $kms; $this->projectId = $projectId; $this->locationId = $locationId; $this->locationRef = $this->kms::locationName($this->projectId, $this->locationId); $this->keyRingId = $keyRingId; $this->keyRingRef = $this->kms::keyRingName($this->projectId, $this->locationId, $this->keyRingId); $this->cryptoKeyId = $cryptoKeyId; $this->cryptoKeyRef = $this->kms::cryptoKeyName($this->projectId, $this->locationId, $this->keyRingId, $this->cryptoKeyId); $this->initializeKeyRing($keyRing); $this->initializeCryptoKey($cryptoKey); } protected function initializeKeyRing(KeyRing $keyRing) { try { $this->kms->getKeyRing($this->keyRingRef); } catch (ApiException $e) { if ($e->getStatus() === 'NOT_FOUND') { $keyRing->setName($this->keyRingRef); $this->kms->createKeyRing($this->locationRef, $this->keyRingId, $keyRing); } } } protected function initializeCryptoKey(CryptoKey $cryptoKey) { try { $this->kms->getCryptoKey($this->cryptoKeyRef); } catch (ApiException $e) { if ($e->getStatus() === 'NOT_FOUND') { $cryptoKey->setPurpose(CryptoKeyPurpose::ENCRYPT_DECRYPT); $this->kms->createCryptoKey($this->keyRingRef, $this->cryptoKeyId, $cryptoKey); } } } public function encrypt($data) { $key = random_bytes(SODIUM_CRYPTO_SECRETBOX_KEYBYTES); $nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES); $ciphertext = sodium_crypto_secretbox($data, $nonce, $key); return [ 'data' => base64_encode($nonce . $ciphertext), 'secret' => $this->encryptKey($key), ]; } public function encryptKey($key) { $secret = base64_encode($key); $response = $this->kms->encrypt( $this->cryptoKeyRef, $secret ); return $response->getCiphertext(); } public function decryptKey($secret) { $response = $this->kms->decrypt( $this->cryptoKeyRef, $secret ); return base64_decode($response->getPlaintext()); } public function decrypt($secret, $data) { $decoded = base64_decode($data); $key = $this->decryptKey($secret); $nonce = mb_substr($decoded, 0, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES, '8bit'); $ciphertext = mb_substr($decoded, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES, null, '8bit'); return sodium_crypto_secretbox_open($ciphertext, $nonce, $key); } }
Gerçek şifreleme ve şifre çözme yöntemlerinin, yukarıda tanıtılan gizli anahtar uygulamasıyla neredeyse aynı olduğunu fark edeceksiniz. Ancak aradaki fark, artık birden çok şifreleme anahtarı kullanmamızdır. Yardımcı sınıfı çalışırken görelim.
KeyManager Kullanımı
Bu yardımcı sınıftan yararlanmak için Composer desteğiyle yeni bir proje başlatmanız, google/cloud-kms paketini yüklemeniz ve Composer otomatik yükleyicisini zorunlu kıldığınızdan emin olmanız gerekir. Ardından, daha önce oluşturduğunuz kimlik bilgileri dosyasını kullanarak GOOGLE_APPLICATION_CREDENTIALS sabitini ayarlamanız gerekecektir.
Son olarak, ayarlarken değerlerle eşleştirdiğiniz $projectId , $location , $keyRingId ve $cryptoKeyId değişkenlerini ayarlamanız gerekir. Daha sonra KeyManager sınıfının yeni bir örneğini oluşturabilir ve bunu şifreleme ve şifre çözme için kullanabilirsiniz.
<?php putenv("GOOGLE_APPLICATION_CREDENTIALS=credentials.json"); /* Require composer modules */ require __DIR__ . '/vendor/autoload.php'; use Google\Cloud\Kms\V1\KeyManagementServiceClient as Kms; use Google\Cloud\Kms\V1\CryptoKey; use Google\Cloud\Kms\V1\KeyRing; use MyCloudKmsProject\KeyManager; $projectId = 'project-id-123456'; $location = 'global'; $keyRingId = 'keyring'; $cryptoKeyId = 'key'; $keyManager = new KeyManager( new Kms(), new KeyRing(), new CryptoKey(), $projectId, $location, $keyRingId, $cryptoKeyId ); $encrypted = $keyManager->encrypt('My secret text'); var_dump($encrypted); $unencrypted = $keyManager->decrypt($encrypted['secret'],$encrypted['data']); var_dump($unencrypted);
Bu kodu çalışırken görmek isterseniz, bu basit uygulama için her şeyi ayarlayan bir GitHub deposu oluşturdum.
Bir saldırgan sistemimizin güvenliğini ihlal ederse, yine de Cloud KMS API uygulamamıza erişebilir ve bunu kopyalamış olabilecekleri şifrelenmiş verilerin şifresini çözmek için kullanabilir. Durum buysa, zarf şifrelemenin normal gizli anahtar şifrelemeden ne kadar daha güvenli olduğunu merak ediyor olabilirsiniz?
Temel fark (amaçlanan), KMS API erişiminin iptal edilebilmesi ve böylece bir saldırganın elde ettiği verilerin şifresini çözmesini önlemesidir. Tek bir yerel anahtarın tehlikeye atıldığı normal gizli anahtar şifrelemesi ile bu lükse sahip değilsiniz. Saldırganın, yerel anahtarı kullanarak hassas verilerinizin şifresini çözmek için dünyanın her yerinde zamanı vardır. Zarf şifreleme kusursuz bir çözüm değildir, ancak kesinlikle veri ihlali riskinizi azaltır.
WordPress ve Hassas Veriler
WordPress geliştirici çevrelerinde gördüğüm yaygın bir soru; "Eklentimde veya özel temamda API anahtarları gibi hassas verileri nasıl şifrelemeliyim?". Genellikle bunlar, bir API erişim anahtarı ve bazen bir erişim anahtarı sırrı kullanarak kimlik doğrulaması yapan bazı üçüncü taraf API'lerine (örneğin MailChimp veya AWS hizmetleri) erişebilmesi gereken eklentiler veya temalardır. Böyle bir örnek, site dışı depolama sağlayıcınız için erişim kimlik bilgilerine ihtiyaç duyan kendi WP Boşaltma Medyamızdır.
Genel olarak, bu erişim ayrıntılarını uygulamak için iki ana seçenek mevcuttur.
- Bunları, genel olarak erişilebilir olmayan bir kimlik bilgisi dosyasında bir tanımlayıcıyla (genellikle bir PHP sabiti olarak) düz metin olarak saklayın ve bu dosyayı wp-config.php dosyasından isteyin.
- Bunları şifreleyin, veritabanında saklayın ve ardından yukarıda tartıştığımız şifreleme yöntemlerinden birini kullanarak bir API çağrısı yapmanız gerektiğinde şifrelerini çözün.
Gerçek şu ki, ne yaparsanız yapın, kodunuz sırrı okuyabiliyorsa, motive olmuş herhangi bir saldırgan da okuyabilir. Tartıştığımız gibi, zarf şifrelemesi bile tamamen güvenli değildir ve bir eklenti geliştiricisi olarak site sahiplerinin kullanabileceği şifreleme yöntemleri üzerinde daha az kontrolünüz vardır.
Bence, kullanıcılarınızı güvenlik konusunda eğitmek daha iyidir. Herhangi bir ihlal olması durumunda üçüncü taraf API erişimini kaynağında devre dışı bırakmak için kullanabilecekleri belgelere sahip olduğunuzdan emin olun. Belgelerinizin, okuma veya yazma yeteneklerinin üçüncü taraf hizmetlerle nasıl sınırlandırılacağı gibi hususları kapsadığından emin olun. Örneğin, API kullanıcılarının belirli paketlerle nasıl kısıtlanacağına ilişkin ayrıntılarla birlikte SpinupWP yedekleme depolama sağlayıcısı belgelerimizi yakın zamanda güncelledik.
Site sahipleriyle çalışıyorsanız, güvenlik açıklarını önlemek için onlara WordPress çekirdeğini, eklentilerini ve temalarını ve PHP sürümlerini güncel tutmayı öğretin; ve mümkünse güvenli parolalar, parola yöneticileri ve iki faktörlü kimlik doğrulama kullanmak. Sunuculara erişmeleri gerekiyorsa, dosyaları yönetmek için SSH anahtar kimlik doğrulamasını ve SFTP'yi kullandıklarından emin olun.
Birisi anahtarlarınızı çaldıktan sonra evinizin kilitlerini değiştirmek iyi ve güzel, ancak en başta anahtarlarınızın asla çalınmaması daha iyidir.
Toplama
Veri güvenliği ve şifreleme çok geniş konulardır ve PHP kullanarak hassas verileri korumanın yalnızca birkaç yolunu ele aldım. Sonuç olarak, uyguladığınız şifreleme ne olursa olsun saldırılara karşı savunmasız olsa da, risk seviyeleri değişir. Farklı türleri bilmek, verilerinizin hassasiyetine bağlı olarak bunları uygulama kodunuzun farklı seviyelerinde uygulamayı seçebileceğiniz anlamına gelir.
Ne gibi önlemler alıyorsunuz? Karma, gizli anahtar şifreleme veya zarf şifrelemesi mi kullanıyorsunuz? Aşağıdaki yorumlarda bize bildirin.
ev borcu WordPress sitesi