SSL/SSH istemciyle sunucu arasındaki veri akışını korur. SSL/SSH veri tabanında bulunan verileri korumaz. Çünkü SSL hat üzerinde çalışan bir protokol olarak tanımlanmıştır.
Saldırgan bir kez veri tabanına doğrudan erişmeyi sağlarsa (web sunucuyu atlayarak), saklanan hassas veri açılabilir ya da kullanılmaz olur. Ama bilgiyi veri tabanın içinde korumaya alırsanız böyle olmaz. Veriyi kriptolama bu açıdan iyi bir yöntemdir. Ama pek az veri tabanı bu tür kriptolamayı destekler.
Bu sorunu geçmenin en önemli yolu, kendi kriptolama modülünüzü yazmanızdır. Sonra bunu PHP kodlamanız içinde kullanmanızdır. PHP birçok uzantıyla (Mcrypt ve Mhash gibi) size bu konuda destek de olur. Kodlama verinizi veri tabanına eklemeden kriptolar ve okurken de kriptoyu kaldırır.
Gerçekten gizlenen verilerde, ham görünümü istenmiyorsa (yani görüntülenmeyecekse), "hash" yönyemi dikkate alınabilir. En çok bilinen "hash" yöntemi şifrenin "md5 hash" ile veri tabanında saklanmasıdır. Şifre için crypt() ve md5() kullanılır. Şifre açık olarak saklanmaz.
Karıştırılmış şifre alanı örneği
<?php
// şifre karıştırılmasını saklama
$query = sprintf("INSERT INTO users(name,pwd) VALUES('%s','%s');",
pg_escape_string($username), md5($password));
$result = pg_query($connection, $query);
// eğer kullanıcı doğru şifreyi girmişse sorgualam
$query = sprintf("SELECT 1 FROM users WHERE name='%s' AND pwd='%s';",
pg_escape_string($username), md5($password));
$result = pg_query($connection, $query);
if (pg_num_rows($result) > 0) {
echo 'Hoşgeldin, $username!';
} else {
echo '$username için şifre hatası.';
}
?>