PHP Adı Şifre Çözümü

6 Cevap php

Benim ilk PHP tabanlı web sitesi üzerinde çalışıyorum, ve ben bir kullanıcı adı / şifre sistemi için orada ne vardı çözümler merak ediyorum? Ben temel güvenlik için. Htaccess dosyası kullanarak denedim ve çalışıyor iken, ben yönetmek için bir rahip olmayan kimse için biraz daha kolay bir şey istiyorum. Ben deneyebilirsiniz ki orada başka bir çözüm var mı? Ben bir veritabanı sunucusu mevcut yok, bu yüzden düz dosya veritabanlarını desteklemek gerekir ... teşekkürler!

Edit Ben SQLite desteği var olduğunu tespit ettik, bu yüzden mevcut bir veritabanı seçeneği var. Ayrıca, ben bazı gereksinimler biraz daha bahsetmek gerektiğini hissediyorum. Ben bütün dizin üzerindeki güvenliği gerekir çünkü aslında, benim web sitesini korumak için. Htaccess kullanarak baktı. Ben korumaya çalışıyorum dosyaların çoğu. Pdf ve. Doc ... herhangi bir çözüm bana bu dosyaların yanı sıra dizinde herhangi bir web sayfalarının güvenliğini sağlamak gerekir.

Ben daha çok ya da "deri" gerçek bir giriş / kayıt sayfası var vs gibi şeyler olabilir, böylece bir dizin kilitleme. Htaccess yöntem daha az sonra ben sadece. Htaccess yöntemi sopa için iyi bir çözüm bulabiliriz eğer . Ancak ben daha yönetilebilir bir şey istiyorum, ben sadece dizin güvenlik gerekir.

6 Cevap

I wrote up this code quickly, it is syntacticly correct but I have not tested it.
There are 2 things that I did not do here, first, I did not provide a function to remove a user and second I did not provide a function to change a users password, these you'll have to write yourself.
However this should provide for a good place to start.

Bu işlevler aşağıdaki biçimde şifreleri adlı bir dosyada kullanıcı adları / şifreleri saklamak olacak

username0:password0
username1:password1
username2:password2
...

.

function authenticate($username, $password)
{

    //ALWAYS use a salt to secure the encryption of your passwords, this can be any value of any
    //length, the longer and the more characters the better
    //I like to use a "perfect password" from Steve Gibbson's https://www.grc.com/passwords.htm
    //This must the exactly the same as the salt in theaddUser() function
    $salt = 'voDeaFWckErOPPGwiapYBwEoc4O2d1M60m2QsYc7A15PUshrLamoVioG1wUmEgF';

    //First we need to get the contents of the file that has the usernames/passwords in it.
    //we don't want to use fopen() or we may end up with a locked file error if another access is 
    //attempted before we've closed it.

    //this line will get the contents of the file named passwords and store it in the $fh variable
    $fh = file_get_contents('passwords');

    //Now lets take the file and split it into an array where each line is a new element in the array.
    $fh = split("\n", $fh);

    //Now lets loop over the entire array spliting each row into it's username/password pair
    foreach($fh as $r)
    {
    	//Every time this loop runs $r will be populated with a new row

    	//Lets split the line into it's username/password pairs.
    	$p = split(':', $p);

    	//Since we don't need all the usernames/password to be in memory lets stop when we find the one we need
    	if($p[0] == $username && $p[1] == sha1($salt . $password))
    	{
    		//We've found the correct use so lets stop looping and return true
    		return true;
    	}
    }
    //If we've reached this point in the code then we did not find the user with the correct password in the 'database'
    //so we'll just return false
    return false;
}
function addUser($username, $password)
{
    //ALWAYS use a salt to secure the encryption of your passwords, this can be any value of any
    //length, the longer and the more characters the better
    //I like to use a "perfect password" from Steve Gibbson's https://www.grc.com/passwords.htm
    //This must the exactly the same as the salt in the authenticate() function
    $salt = 'voDeaFWckErOPPGwiapYBwEoc4O2d1M60m2QsYc7A15PUshrLamoVioG1wUmEgF';

    //We need to parse out some preticularly bad characters from the user name such as : which is used to seperate the username and password
    //and \r and \n which is the new line character which seperates our lines
    $username = preg_replace('/\r|\n|\:/', '', $username);

    //Now lets encrypt our password with the salt added
    $password = sha1($salt . $password);

    //Lets build the new line that is going to be added
    $line = $username . ':' . $password . "\n";

    //Lets open the file in append mode so that the pointer will be placed at the end of the file
    $fh = fopen('passwords', 'a');

    //Write the new entry to the file
    fwrite($fh, $line);

    //Close the file
    fclose($fh);

    //Typicaly one would write a bunch of error handling code on the above statments and if something
    //goes wrong then return false but if you make it this far in the code then return true
    return true;
}

Zend_Auth bakabilirsiniz. Bu açık kaynak, yani bir kimlik doğrulama modülü (ya da olabilir) uygulanmalıdır nasıl bir fikir almak için etrafında dinleyebilir. Doc:

Zend_Auth is concerned only with authentication and not with authorization. Authentication is loosely defined as determining whether an entity actually is what it purports to be (i.e., identification), based on some set of credentials.

Tabii, mevcut düz bir dosya veritabanı PHP güvenlik sistemleri bol vardır. Hızlı bir Google araması yaparken birçok sonuç yukarı çeker. Burada bir öğretici olduğunu:

http://www.devshed.com/c/a/PHP/Private-Pages-with-PHP-and-Text-Files/

Eğer sqlite desteği varsa, bu sizin için işe yarayabilecek bu yüzden, bu bir sunucu gerektirmez edin.

Ve şifreleri karma unutmayın. ;)

Eklediğiniz bir dosyayı (örn. php_info.php) oluşturmak kontrol etmek için:

<?php
     phpinfo();

Sonra host dosyasını yükleyin, tarayıcınızda yükleyin (example.com / php_info.php) ve sqlite için bir arama yapın.

Eğer destek varsa gösteren sayfa sqlite için çeşitli başvurular görmelisiniz. "SQLite Kütüphanesi" ile satır size (eğer varsa) sahip sqlite sürümünü anlatacağım.

Ayrıca o kraker için yararlı olabilir kurulum hakkında biraz bilgi vermek yok bu yana, sitenizden php_info.php dosyayı silmeniz gerekir kez yapılır.

Eğer SQLite kullanılabilir varsa, gördünüz mü? PHP veri tabanında inşa edilmiştir. Eğer değilse, sadece bu biraz yardımcı olur umarım bir file için okuma / yazma kullanabilirsiniz

: this page Apache web sitesinden göre

Eğer ana sunucu yapılandırma dosyasına erişimi yok sürece genel olarak, .htaccess dosyalarını kullanmak asla. Kullanıcı kimlik doğrulaması her zaman .htaccess dosyalarında yapılması gerektiğini bir hakim yanlış, örneğin vardır. Bu sadece böyle değil. Sen ana sunucu yapılandırma kullanıcı kimlik doğrulama yapılandırmalarını koyabilirsiniz, ve bu, aslında, bir şeyler yapmak için tercih edilen yoldur.

Bu da, neden böyle olduğunu görmek kolaydır. Onun yerine hatalı bir yapılandırma ayıklarken HER DİZİN'e kazma yerine, merkezi kontrole sahip çok tercih.

Ben senin iyiliğin için, kısa sürede ana yapılandırma dosyası için .htaccess dosya yapılandırma aktarmak için çağırıyorum!