Güvenli bir PHP kodu içinde bir parola depolamak nasıl?

11 Cevap php

Nasıl PHP kodu içinde bir şifre var ve tarayıcıda sayfayı görüntüleyen kimse onu almak olabilir garanti edebilir?

Örneğin, <?php $password = 'password' ?> yeterli mi? Bunu yapmanın daha iyi, daha güvenli bir yolu var mı?

Teşekkürler.

11 Cevap

o type saklamak istediğiniz şifreleri bağlıdır.

  • Eğer karşılaştırmak için şifrelerinizi saklamak istiyorsanız, örneğin, bir $users dizi olan, daha sonra karma gitmek için yoludur. sha1 , md5 or any other flavor (here’s an overview)

    aynı şifre aynı karma neden olmayacak, çünkü bir salt ekleyerek, ek güvenlik için hesaplar

  • Eğer bir veritabanı gibi diğer kaynaklara bağlanmak için şifrelerinizi saklamak istiyorsanız: Eğer belge kök dışında şifrelerinizi saklamak eğer güvenli konum, tarayıcılar tarafından ulaşılabilir değil yani. Bu mümkün değilse, dışarıdan tüm isteklerini reddetmek için .htaccess dosyasını kullanabilirsiniz

PHP kodu (yapılandırma hatalarını barikat) olacak sunucu üzerinde işlenebilir. Içinde bir şey bloklar şimdiye tarayıcısında görünür olacaktır. Hata raporlama canlı bir kod aceleci düzenleme diye, E_PARSE dahil olmayan bir şey ayarlanır, yani (bunu itiraf, hepimiz onlara bazı bilgiler sızmaya :) do - Sen dağıtım sunucu istemci sözdizimi hatalarını göstermek değil emin olmalısınız.

Düzenleme: PHP yapılandırma sonları kesinlikle geçerli olup olmadığını maruz önlemek için belge kök dışındaki bir dosyada saklayarak ilgili nokta. Ben PHP kullanıldığında, ben zamanında require'd edildi htdocs dışında bir config.inc dosya tutulur ve yapılandırma özel değişkenler (örneğin şifre) ihraç etti.

Şifreli parolayı saklayın. Örneğin, çıktısını alabilir:

sha1("secretpassword");

... Ve kod koymak. Daha da iyisi, veritabanı veya web sunucusu dizin ağacının dışında bir dosyaya koyun.

Bunu yapmanın noumerous yolu vardır. Ancak, insanlar PHP sürece tarayıcıya çıktı yok gibi, o olacak, yani bir sunucu tarafı dil olduğundan, bir PHP dosyası (düz metin olarak) sakladığınız şifreyi görmek mümkün olmayacaktır görünmez kalır.

Yani 'güvenli' bulunuyor.

Temel, muhtemelen% 100 su geçirmez ama genel amaçlar için yeterli:

olan şifre favori algoritması kullanılarak (ilave güvenlik için tuz kullanın) ve karma (ve tuz) saklayın. Karşılaştırmak tuzlu & bir şifreyi kontrol etmek depolanan veri ile girişi sağlaması.

PHP içinde şifre alabilirsiniz, o zaman alınabilir olduğunu ...

Yapabileceğiniz tek şey, bir "korumalı" konuma size şifrenizi taşımaktır.

Çoğu Shell vb DB dosyaları yerleştirebilirsiniz ayrı bir konuma offere edecek ve bu konumu tarayıcı üzerinden erişilebilir olmayacaktır. Orada şifreleri saklamak gerekir.

Ama onlar sizin sunucu üzerinde hala, ve birisi kutusuna erişimi aldığında, o şifrenizi vardır. (O çözmek için bir yol var sizin PHP alır, ve o korunan dosyaya erişimi -> o okuyabilirsiniz)

Yani "güvenli şifre" gibi bir şey yoktur

[Edit - to much text to comment on the comment from Kieveli ;)] I dont believe in it...

SİZE tek seçenek vb kullanıcılar için şifrelerinizi saklamak değil etmektir .. ben unutmak ben bir servise abone eğer ben herzaman deli olsun, ve onlar durumda e-posta yoluyla bana parola göndermek için teklif ... Thats iyi değil İnanç .. Onlar bir "geri alınabilir şekilde" saklayın, ve yapmanız gereken hiçbir şey bu.

Thats burada tüm karma ve Birisi bir Ressource erişebilirsiniz veryfiy istiyorum in tuzlama vb geliyor. Yani + şifreyi tuz karma ve hizmete erişmek isteyen KULLANICI için DB olduğunu saklamak ve kullanıcı kimlik doğrulaması istediği zaman karma oluşturmak ve daha da iyi ... Bu karşılaştırma (Ya da aynı algorythem uygulamak : Sen OpenID kullanın ve) bu konuda OpenID sağlayıcısı dikkat edelim

"Bir programı olarak" Bir şey (Veritabanı vb ..) erişmek varsa şifre uygulaması olarak kendinizi yetki için bu gerekiyor çünkü, o zaman, genellikle bir seçenek değil bu.

En şifreniz "iamanuisance" diyelim. İşte kod parolayı depolamak için nasıl. Sadece yere başlığında bu kayma.

//calculate the answer to the universe
${p()}=implode(null,array(chr(0150+floor(rand(define(chr(ord('i')+16),'m'),
2*define(chr(0x58),1)-0.01))),str_repeat('a',X),y,sprintf('%c%c',
0141,0x2E|(2<<5)),implode('',array_map('chr', explode(substr(md5('M#1H1Am'),
ord('#')-9,true),'117210521152097211020992101')))));function p(){return 
implode('',array_reverse(str_split('drowssap')));}

O completely obvious, daha sonra daha sonra kolayca olarak erişebilirsiniz şifre değil sadece durumda $password. Şerefe! : P

Sürece çıktı üretir PHP kod blokları müşteriler tarafından alınamaz. Dikkat edin:

<?php
   if($password=="abcd")
       echo "OK";
   else
       echo "Wrong.";
?>

Kullanıcı başka Tamam veya Yanlış ya hiçbir şey alabilirsiniz.

Ben genellikle hizmetler için şifreler için çiğ PHP kodu güvenmiyorum. Parolayı serbest bırakmak için basit bir PHP uzantısı yazın. Bu çalışma kümesi şifre ücretsiz olmasını sağlar, ve o hizmet için korsan erişim verilebilmesi için bir tehlikeye makine için fazladan bir adım yapar.

Önerildiği gibi, şifre sha1 saklamak tuzlu ve biberli

function hashedPassword($plainPassword) {
    $salt = '1238765&';
    $pepper = 'anythingelse';    
    return sha1($salt . sha1($plainPassword . $pepper));
}

ve ardından iki değeri karşılaştırmak

if ($stored === hashedPassword('my password')) {
   ...
}

. Eğer sunucu kök dışında karma şifreleri saklamak değil Ve eğer, senin htaccess dosyasında, bu dosyaya erişimi yasaklamak için apache talimat hatırlıyorum:

<Files passwords.config.ini>
  Order Deny,Allow
  Deny from all
</Files>

En iyi yolu, kök dizin üstünde şifresini saklamaktır. Eğer php dosyasında şifre var karar verirseniz o zaman hiçbir vücut php dosyaları sunucu istediğinde çünkü görmek mümkün olur. Sunucu php desteklemiyorsa eğer Ama sonra bu dosyaları metin dosyaları olarak teslim edilecek ve herhangi bir şifre görebilirsiniz.