ďťż

PHP pogrom moj jak i Real_Noname .. Help me

       

Podstrony


telcocafe

Na ten temat pisalem z Real_nonamem tydzień PW. i wyrobilismy taki kod do logowania sie:

<? if ( !isset( $PHP_AUTH_USER ) ) { header('WWW-Authenticate: Basic realm="index.php"'); header('HTTP/1.0 401 Unauthorized'); } else if ( isset( $PHP_AUTH_USER ) ) { $plik = "hasla.txt"; $fp = fopen($plik, "r"); $zawartosc = fread($fp, filesize($plik)); fclose($fp); $linia = explode("\n", $zawartosc); $ile = count( $linia ); for( $i =0; $i < $ile; $i++ ) { $dane = explode( ":", $linia[$i] ); if ( ( $dane[0] == "$PHP_AUTH_USER" ) && ( $dane[1]== "$PHP_AUTH_PW" ) ) {  $auth = 1;  break; } } if( $auth == 1) { exit("<br><br><br><center><a href='index.php'>link</a>"); } else { header('WWW-Authenticate: Basic realm="index.php"'); header('HTTP/1.0 401 Unauthorized'); exit( " BRAK DOSTĘPU" ); } } ?>

I w pliku hasla.txt jest tak:

yoyek:pass magik:haslo

I jak wpisze w okienku to działa tylko to 2 haslo (magik:haslo) a yoyek:pass nie dziala... probowalismy wieeeeeeeelu rzeczy i nic... kto pomoze??:( :huh: Moze jakis inny kodzik proponujecie ?? :)



No ja polecam użycie logowania z kodowaniem haseł oraz rejestracją .
Ja posiadam taki (oczywiście gotowiec).
Nie pamiętam skąd ściągnąłem, więc jakbyś go chciał mogę ci na e-maila wysłać.

Oto kody do danych plików *.php:

----------------------index.php-------------------
<?  include "session.php"; ?> <html> <head> <link rel="stylesheet" type="text/css" href="style.css"> <title>FajneProgsy</title> </head> <body> <table border=1 width=100%> <!-- naglowek --> <tr><td colspan=2> </td></tr> <!-- koniec --> <!-- lewa strona --> <tr><td width=25% height=450 valign=top>  <?    include "left.php";  ?> </td> <!-- koniec --> <!-- prawa strona --> <td valign=top>  <?  if($page=="") $page="link1";  if(!file_exists($page.".php"))  {     include "default.php";  }  else  {    include_once $page.".php";  } ?> </td></tr> <!-- koniec --> </table> <!-- stopka --> Copyright FajneProgsy  Powered by LITLE UTSystem and DownloadUT <!-- koniec --> </body> </html>

----------------------------func.php------------------------------
<? #definicje stalych define("DATA", "users.dat"); define("SESID", SESSION_NAME() . "=" . SESSION_ID()); # zaloguj user-a function login($login, $passwd) {  $line = file(DATA);  foreach($line as $temp)  {    $str = explode(",", $temp);    if(chop($str[0])==$login && chop($str[1])==$passwd)    {      $_SESSION["USER_AUTH"]  = True;      $_SESSION["USER_LOGIN"] = $_POST["login"];      return True;    }  }  $login = htmlentities($login);  return False; } # wyloguj user-a function logout() {  $_SESSION["USER_AUTH"]  = False;  $_SESSION["USER_LOGIN"] = Null; } # czy użytkownik istnieje function user_exists($login) {  $line = file(DATA);  foreach($line as $temp)  {    $str = explode(",", $temp);    if(chop($str[0])==$login) return True;  }  return False; } # dodaje nowego użytkownika function add_user($login, $passwd) {  $files = fopen(DATA, "a");  flock($files, 2);  fputs($files, $login . "," . $passwd . "\n");  flock($files, 3);  fclose($files); } # sprawdza czy zalogowany function auth() {  return ($_SESSION["USER_AUTH"] == True); } ?>

--------------------------------registration.php---------------------
<table border=1 width=100%> <tr><th align=center> Rejestracja </th></tr> </table> <? $result = False; if($submit) {  if(!$login || !$passwd)  {    echo "<p class=error align=center>Wprowadź wszytskie pola!</p>\n";  }  elseif(!eregi("^[_[:alnum:]-]{1,10}$",$login) )  {    echo "<p class=error align=center>Błedny login!</p>\n";  }  elseif(!eregi("^[_[:alnum:]-]{3,10}$",$passwd) )  {    echo "<p class=error align=center>Błędne hasło!</p>\n";  }  elseif(user_exists($login))  {    echo "<p class=error align=center>Login \"$login\" jest już zajęty.</p>\n";  }  else  {    $result = True;    // formatuje wprowadzone dane    $login = strtolower($login);    add_user($login, md5($passwd));    // informacjie o nowym koncie    echo "<p class=ok align=center>Konto zostało utworzone.</p>\n";          echo "";    echo "Możesz się teraz zalogować!";  } } if(!$result) {  // usówa tagi html z formularza  $login  = htmlentities(substr($_POST["login"], 0, 255));  include "registration.frm"; } ?>

--------------------------------------registration.frm----------------------
<FORM action="index.php?p=registration&<?=SID?>" method="post"> <INPUT type="hidden" name="page" value="registration"> <INPUT type="hidden" name="<?=SESSION_NAME()?>" value="<?=SESSION_ID()?>"> <TABLE border=0 cellspacing=0 align=center> <tr><td align=right> <b>login</b> </td><td> <INPUT type="text" name="login" value="<?=$login?>"> </td></tr> <tr><td align=right> <b>hasło</b> </td><td> <INPUT type="password" name="passwd" value="<?=$passwd?>"> </td></tr> <tr><td colspan=3 align=center> <INPUT type="submit" name="submit" value="Rejestruj"> </td></tr> </TABLE> </FORM> <!-- legenda --> <b>Legenda:</b><p> <b>Login</b> - może zawierać znaki alfanumeryczne, znaki podkreślenia i myślniki. Wielkość liter nie ma znaczenia, a liczba znaków zawiera się w przedziale od 1 do 15.<br><br> <b>Hasło</b> - pamiętaj, małe litery i duże litery to zupełnie różne litery :-), liczba znaków od 3 do 15, reszta jak wyżej.<br><br>

--------------------------------session.php-------------------
<? # start sesji session_start(); # biblioteka z funkcjiami include "func.php"; # logowanie, wylogowanie itp switch ($page) {  case "login"  :                  $login  = htmlentities(substr($_POST["login"], 0, 255));                  $passwd = htmlentities(substr($_POST["passwd"], 0, 255));                  login($login, md5($passwd));                  break;    case "logout" : logout();                  break; } ?>

----------------------------------------login.php---------------------------

<table border=1 width=100%> <tr><th align=center> ..:: Logowanie ::.. </th></tr> </table> <? if(!auth()) {  print "<p class=error align=center>Błąd logowania!</p>"; } else {  print "<p class=ok align=center>Hey {$_SESSION["USER_LOGIN"]}, jesteś zalogowany!</p>"; } ?>

-----------------------------login.frm--------------------------------
<form action="index.php" method="post"> <input type="hidden" name="page" value="login"> <input type="hidden" name="<?=SESSION_NAME()?>" value="<?=SESSION_ID()?>"> Login<br> <input type="text" name="login" value="<?=$_POST["login"]?>"> <br> Hasło<br> <input type="password" name="passwd" value=""> <input type="submit" name="submit" value="Loguj"> </form>
--------------------------logout.php--------------------------
<table border=1 width=100%> <tr><th align=center> Wylogowany! </th></tr> </table> <p class=ok align=center> Zostałeś wylogowany!. </p>

---------------------------left.php--------------------------
<table border=1 width=100%> <tr><th align=center> ..:: System logowania ::.. </th></tr> <tr><td align=left> <? if(!auth()) {  include "login.frm";  print "&raquo; <a href=\"index.php?page=registration&".SESID."\">REJESTRACJA!< /a>\n"; } else {  print "&raquo; <a href=\"index.php?page=logout&".SESID."\">Koniec pracy :)! " . $_SESSION["USER_LOGIN"] . "</a>"; } ?> </td></tr> <tr><th align=center> Menu </th></tr> <tr><td align=left> &raquo; <a href="index.php?page=link1&<?=SESID?>">link 1</a><br> &raquo; <a href="index.php?page=link2&<?=SESID?>">link 2</a><br> </td></tr> </table>
--------------------------------default.php----------------------
<table border=1 width=100%> <tr><th align=center> Blad! </th></tr> </table> podany plik nie istnieje!

============================================
A teraz jak wyglada plik aby wyswietlic cos dla zalogowanego:

-------------------------link1.php-----------------------
<table border=1 width=100%> <tr><th align=center> ..:: Link1 ::.. </th></tr> </table> <p> Dostęp do tej strony nie wymaga autoryzacji. Chcąc obejrzeć zawartość strony <b>link2.php</b> należy wpierw się zalogować, ale przedtem sprawdź co się stanie jeśli sprubujesz wejść na stronę bez uprzedniego zalogowania się. <p> Aby się zalogować zarejestruj się lub podaj login: <b>root</b> i hasło <b>root</b>.

----------------------------link2.php----------------------
<table border=1 width=100%> <tr><th align=center> Pliki </th></tr> </table> <p> <? if(!auth()) {  print "<p class=error align=center></p>"; } else {  print "To jest widoczne dla zalgowanych"; }

++++++++++++++++++++++++++++++++++++++++++++

To by było na tyle;)

I jeszcze trzeba zrobic plik users.dat w zwykłym notatniku i zapisac jako users.dat i nic w nim nie wpisywać i potem dla próby zalogować się ;)

A oto od autora (mówiłem że nie znam adresu skad sciagnalem i sprawdzilem w pliku ale ta strona nie istnieje):


***********************************************************
Logowanie na stronie www z gotowym przykładem (załącznik)

Autor artykułu MARIUSZ KACKI
e-mail  robokator@wp.pl
url  nasza.firma.pl
data  10.03.2003
url przykładu http://rob.free.komrel.net/logowanie
***********************************************************

Zdarza się, że niektóre dane na naszej stronie nie powinny być oglądane przez osoby postronne.
Najlepszym sposobem aby uchronić się przed taką ewentualnością jest stworzenie systemu logowania, i o tym będzie traktował niniejszy artykuł.
Zajmiemy się stworzeniem przykładowj strony z formularzem do logowania, przykład działającej strony znajduje się w pliku [logowanie_php.zip]).

1.
Na początek będziemy potrzebowali zbiór użytecznych funkcji (plik [func.php]). Do tych najbardziej potrzebnych zaliczają się:

-login($login, $passwd)  logowanie użytkownika
-logout()   wylogowanie użytkownika
-auth()    spr. czy zalogowany użytkownik

-user_exists($login)  sprawdza czy użytkownik istnieje już w naszej bazie (plik [users.dat])
-add_user($login, $passwd) rejestruje nowego użytkownika, dodaje wpis do pliku [users.dat]

<?

#definicje stalych
define("DATA", "users.dat");
define("SESID", SESSION_NAME() . "=" . SESSION_ID());

# zaloguj user-a
function login($login, $passwd)
{
  $line = file(DATA);
  foreach($line as $temp)
  {
    $str = explode(",", $temp);
    if(chop($str[0])==$login && chop($str[1])==$passwd)
    {
      $_SESSION["USER_AUTH"]  = True;
      $_SESSION["USER_LOGIN"] = $_POST["login"];
      return True;
    }
  }
  $login = htmlentities($login);
  return False;
}

# wyloguj user-a
function logout()
{
  $_SESSION["USER_AUTH"]  = False;
  $_SESSION["USER_LOGIN"] = Null;
}

# czy użytkownik istnieje
function user_exists($login)
{
  $line = file(DATA);
  foreach($line as $temp)
  {
    $str = explode(",", $temp);
    if(chop($str[0])==$login) return True;
  }
  return False;
}

# dodaje nowego użytkownika
function add_user($login, $passwd)
{
  $files = fopen(DATA, "a");
  flock($files, 2);
  fputs($files, $login . "," . $passwd . "\n");
  flock($files, 3);
  fclose($files);
}

# sprawdz czy zalogowany
function auth()
{
  return ($_SESSION["USER_AUTH"] == True);
}

?>

Krótkie wyjaśnienie:
Stała DATA definiuje ścieżkę dostępu do pliku z hasłami, plik ten powinien znajdować się w katalogu niedostępnym dla
zwykłego zjadacza chleba, np. może to być katalog PRIVATE lub tak jak u mnie nad katalogiem PUBLIC_HTML. W ostateczności
możesz go zapisać w katalogu razem z resztą plików, hasła są kodowane, także ewentualny podgląd pliku niewiele komuś pomoże.
Jeśli zajdzie potrzeba to należy ustawić prawa dostępu do pliku "users.dat" na 644.

Najbardziej sympatyczna jest funkcja auth() dzięki której wiadomo czy ktoś jest zalogowany czy nie.

Funkcja logout() natomiast powoduje wylogowanie użytkownika.

Te dziwnie wyglądające napisy $_SESSION[*] to nic innego jak zmienne sesyjne które są dostępne przez cały czas trwania sesji.
$_SESSION["USER_LOGIN"] zawiera nazwę użytkownika, a $_SESSION["USER_AUTH"] mówi nam czy użytkownik jest zalogowany czy też nie (true, false).

Następne funkcje służą odpowiednio do sprawdzenia czy użytkownik istnieje w naszej bazie i funkcja dodająca nowego użytkownika.

2.
W nagłówku pliku "index.php" (na samym początku) należy umieścić skrypt który by w odpowiednim momencie wywoływał te funkcje, oprócz tego powinien załadować bibliotekę z funkcjami i startować sesję.
Tak wygląda ten skrypt: [plik: session.php]

<?
# start sesji
session_start();

# biblioteka z funkcjiami
include "func.php";

# logowanie, wylogowanie itp
switch ($page)
{
  case "login"  :
                  $login  = htmlentities(substr($_POST["login"], 0, 255));
                  $passwd = htmlentities(substr($_POST["passwd"], 0, 255));
                  login($login, md5($passwd));
                  break;
 
  case "logout" : logout();
                  break;
}
?>

Jak widać skrypt ten wywołuje odpowiednie funkcje w zależności od zawartości zmiennej "$page".

Zmienna ta zawiera nazwę pliku (bez rozszerzenia) która ma być dołączona w prawej komórce tabeli (plik: "index.php"). Przed dołączeniem zostaje dodane rozszerzenie ".php". Przykładowy link wygląda następująco: <a href="index.php?page=nazwa_pliku"></a>.
Formularz także musi przypisać jakoś wartość zmiennej $page w przeciwnym razie nie można by było wywołać odpowiednich funkcji.

Formularz [plik: login.frm]
<form action="index.php" method="post">
<input type="hidden" name="page" value="login">
<input type="hidden" name="<?=SESSION_NAME()?>" value="<?=SESSION_ID()?>">

Login<br>
<input type="text" name="login" value="<?=$_POST["login"]?>">
<br>

Haslo<br>
<input type="password" name="passwd" value="">
<input type="submit" name="submit" value="Loguj">

</form>

Mając te wszystkie funkcjie jesteśmy w stanie zrobić już prawie wszystko co jest związane z logowaniem i rejestracją użytkownika.
Przykłady:

Aby wyświetlić dowolny tekst dla użytkownika tylko zalogowanego wystarczy użyć funkcji auth().
Np:

<?
  if auth() print "Jesteś zalogowany " . $_SESSION["USER_LOGIN"];
?>

$_SESSION["USER_LOGIN"] zwraca nazwę zalogowanego użytkownika.

Logowanie też wygląda prosto:
login(jakiś_login, md5(hasło)) gdzie funkcja md5() koduje hasło, następnie funkcja poszukuje użytkownika w pliku [users.dat]. Jeśli użytkownik istnieje i hasło jest poprawne funkcja zwraca True.

Należy zaznaczyć, że funkcja login() nie służy nam do sprawdzania czy użytkownik jest zalogowany, do tego celu służy funkcja auth().

Udostępniłem też możliwość rejestracji nowych użytkowników.
Funkcja add_users(login, hasło) dodaje nowego użytkownika konta, a funkcja userr_exists(login) sprawdza czy przypadkiem przyszły użytkownik nie znajduje się w naszej bazie.

Plik z rejestracja [registration.php] wygląda następująco:

<?
$result = False;
if($submit)
{
  if(!$login || !$passwd)
  {
    echo "<p class=error align=center>Wszystkie pola są obowiązkowe.</p>\n";
  }
  elseif(!eregi("^[_[:alnum:]-]{1,10}$",$login))
  {
    echo "<p class=error align=center>Nieprawidłowy login.</p>\n";
  }
  elseif(!eregi("^[_[:alnum:]-]{3,10}$",$passwd))
  {
    echo "<p class=error align=center>Niepoprawne hasło.</p>\n";
  }
  elseif(user_exists($login))
  {
    echo "<p class=error align=center>Login \"$login\" jest już zajęty.</p>\n";
  }
  else
  {
    $result = True;
    // formatuje wprowadzone dane
    $login = strtolower($login);
    add_user($login, md5($passwd));

    // informacjie o nowym koncie
    echo "<p class=ok align=center>Konto zostało utworzone.</p>\n";     
    echo "Jeśli zapomnisz hasło to koniec :-), wszystkie hasła są kodowane. ";
    echo "Możesz teraz się zalogować i przetestować konto."; 
  }
}

if(!$result)
{
  // usówa tagi html z formularza
  $login  = htmlentities(substr($_POST["login"], 0, 255));
  include "registration.frm";
}
?>

Wszystkie warunki na początku są odpowiedzialne za sprawdzenie poprawności danych pobranych od użytkownika.
Jeśli wszystko przejdzie bez zgrzytu to nastąpi wykonanie bloku else, gdzie zostaną wstępnie sformatowane dane (zmniejszenie do małych liter, ale nie hasła), potem jest wywoływana funkcja add_user(). Zmienna $result zmienia wartość z False na True co nie spowoduje później wyświetlenia ponownie formularza.

Plik z formularzem do rejestracji znajduje sie w pliku [registration.frm].

<FORM action="index.php?p=registration&<?=SID?>" method="post">
<INPUT type="hidden" name="page" value="registration">
<INPUT type="hidden" name="<?=SESSION_NAME()?>" value="<?=SESSION_ID()?>">

<TABLE border=0 cellspacing=0 align=center>

<tr><td align=right>
<b>login</b>
</td><td>
<INPUT type="text" name="login" value="<?=$login?>">
</td></tr>

<tr><td align=right>
<b>hasło</b>
</td><td>
<INPUT type="password" name="passwd" value="<?=$passwd?>">
</td></tr>

<tr><td colspan=3 align=center>
<INPUT type="submit" name="submit" value="Rejestruj">
</td></tr>

</TABLE>
</FORM>

<!-- legenda -->
<b>Legenda:</b><p>
<b>Login</b> - może zawierać znaki alfanumeryczne, znaki podkreślenia i myślniki.
Wielkość liter nie ma znaczenia, a liczba znaków zawiera się w przedziale od 1 do 15.<br><br>

<b>Hasło</b> - pamiętaj, małe litery i duże litery to zupełnie różne litery :-),
liczba znaków od 3 do 15, reszta jak wyżej.<br><br>

Niestety niezależnie od tego ile bym napisał i tak nie ma nic lepszego niż gotowy przykład :) dlatego utworzyłem gotową stronę, którą możesz modyfikować wedle uznania.
Jak by coś nie działało możesz skrobnąć do mnie, ale wszystko zaostało przetestowane i nie powinno być żadnych problemów. Strona jest także dostępna pod adresem: http://rob.free.komrel.net/logowanie

***************************************************
Autor artykułu MARIUSZ KACKI
e-mail  robokator@wp.pl
url  nasza.firma.pl
data  10.03.2003
***************************************************


Tam zauważysz kilka adresów e-mail oraz informację copyright ;) zmień to bo ja to wzialem ze swojej strony bo nie moglem znalezc pliku *.zip z tym , i nie chcialo mi sie tego zmieniac ;)

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.