nasıl şifrelemek ve daha sonra veritabanı sınıf dosyasında kullanılan kullanıcı adı ve şifre metin şifresi yok

8 Cevap php

Ben tüm sql sorguları ve veritabanına bağlanırken kolları bir sınıf dosyası database.php oluşturduk. Ben (kolayca görülür ki eğer php dosyasına bir erişir) bir değişkene veritabanı için kullanıcı adı ve parola saklamak.

Hatta yaptıktan sonra php dosyası tek bir özgün kullanıcı adı ve şifre bir fikir olması mümkün değil ki ben bu kullanıcı adı ve şifre şifrelemek istiyorum.

Ben umutsuzca bazı fikir muhtaç olduğum gibi bana yardımcı olun.

Teşekkürler

8 Cevap

Bu zor yapılabilir. Sen veritabanına göndermek için bir decryptable formda parolası gerekir. Herhangi bir şekilde böyle bir şekilde. Php dosyasına erişen bir kişi tarafından okunabilir olacaktır.

Sağduyu yaklaşım temel güvenlik önlemi olarak keep the configuration files outside the we broot için, ve prevent outside attacks düzgün sunucunun güvenliğini aracılığıyla. Web siteleri Yüzbinlerce ayrıca size tarif şekilde onların hassas verileri şifreleyerek olmadan, bu şekilde çalıştırın.

Senin için bunu kırmak istemezdim, ama birisi siteniz için kaynak dosyalarına erişimi varsa o zaman zaten game over bulunuyor. Onlar sadece gerekli veri toplanıyor, ya da daha büyük olasılıkla ziyaretçilerin bilgisayarlarına bir trojan yüklemek için kodu almak için onlara kodu eklemek mümkün olacak. Bu zaman ve fail içeri Ayrıca iyi bir felaket kurtarma planı bir zorunluluktur sahip alınamıyor böylece sunucuları ve geliştirme makineleri kilitleyerek mühendislik çaba harcamak en iyisidir.

Birisi kaynağına erişimi varsa, o zaman ne olursa olsun şifrenizi saklamak nasıl, veritabanına bağlanmak için gerekli araçların hepsi var. Sonuçta, PHP yorumlayıcı sonunda gerçek şifre ne olduğunu bilmek gerekiyor ve kaynak görebilen herkes PHP yorumlayıcı, böylece şifre edinme tam olarak ne yapabilirim.

Bunun yerine, kaynağına erişimi denetlemek için bir yol bulmalıyız.

Üzgünüm ile başlayan soruyu yanlış yorumlamış ..

Eğer DB erişmek için komut için bir kullanıcı adı ve parola kullanıyorsanız, o zaman tabii ki (sizin komut) ile başlamak için bu bir yere saklamak gerekir.

Aklıma tek yolu kaynak şifreyi karartmak ve doğru değeri almak için bazı manipülasyon yapmak olacaktır. Birisi kalanını anlamaya olasılıkla daha şimdiden daha sonra kaynağına erişimi varsa Ama bu sadece, overkill gibi görünüyor ..

EDIT: Why not store the username/password in a local file on the server, then only give read access to PHP? At least that way it is not directly viewable in your source code.

Sadece MySQL şifresini böylece bir şey şifreleyerek hiçbir yolu yok. Er ya da geç bu düz metin parola ile MySQL sağlamak gerekir.

Idea
Set the file permissions on database.php as low as possible. If you have this:

 rw-rw-r-- gaurav gaurav       database.php

Sonra belki (php-süreçler www-data altında çalışan varsayarak) bu şekilde ayarlayın

 r-------- www-data www-data   database.php

Ben kendi bilgisayar ortamı güvenmiyorum bir şekilde kodunu dağıtmak varsayalım, ya da.

Orada PHP kaynak şifreleyerek yolu vardır ama onlar karmaşıklık ve maliyet düzeyleri değişen var. Bazı ya da yaşayabileceğiniz bir seçenek olmayabilir, hangi ana sunucu üzerinde yüklü olması ek (şifre çözme) yazılımı gerektirir.

PHP şifreleme araçları bir dizi biraz daha fazla bilgi için this article bakabilirsiniz.

(and only if) niyetinizi kaynağına erişimi olan kişiler için kullanıcı adı + şifre gösteren durdurmak için ise, yapılabilir. Ancak çok uygun değil, bu adımlardan oluşur:

One-off:

  • (uzun, güçlü bir tuş ile örneğin AES) güçlü bir şifreli dosya içine adınızı ve şifrenizi koymak ve buna göre izinlerini ayarlamak

Her açılışta:

  • sunucu başlangıç, elle dosyanın şifresini girerek, dosyanın şifresini çözmek ve bir geçici depolama gibi bazı uzun süren süreci kullanmak
  • şimdi hafızada saklanan kullanıcı adı + şifre var, dosyanın şifresi sürümünü silebilirsiniz.

Script'lerinizde:

  • temp depolama kullanıcı adı + şifre istemek
  • veritabanına bağlanmak
  • Lütfen komut dosyasının değişkenleri pw adını + kaldırın

Note: Tüm bu parola source koduna bakarak geri alınamaz anlamına gelir. Sunucu üzerinde can modify and run komut daha önce olduğu gibi aynı konumda olanlar - sadece "yazdırmak" yerine, "istek şifre, yazdırabilirsiniz". Başka bir dezavantajı artık her sunucu yeniden başlatma şifre çözme şifre girmek zorunda olmasıdır.

Bir parola saklarken (MD5 güvenli değil çünkü) HER ZAMAN parolayı depolamak için tek yönlü karma, tercihen SHA-256 kullanın. Ve şifreyi karşılaştırmak istediğinizde, sadece SHA-256 teşebbüs Parola karma ve karmaları aynı olup olmadığını görmek.

Garble dışına ham metin şifre almak için bir yol varsa şifreli parolalar sadece, güvenli değildir, güvenlik kusurludur.

PS: Eğer şifrenizi e-posta herhangi bir web sitesi kusurludur evet.