Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: logowanie md5
Forum PHP.pl > Forum > PHP
berto
Witam serdecznie.
Chcialbym sobie napisac forum dyskusyjne i system niusow na stronke ale nie radze sobie z logowaniem. Tzn. umiem zrobic logowanie ale dla jednego uzytkownika a chcialbym zeby bylo wiecej osob. Ponizszy kod dotyczy wlasnie jednej osoby:

// formularz
<code>
<form action=login.php>
<input type=text name=member><br>
<input type=password name=password><br>
<input type=submit name=submit value=Login>
</form>
</code>

// login.php
<?
$haslo = 'b22b963b7413da5cdca393be2d15f102';
if ((md5($password) == $haslo))
{echo "Witaj $member!";}
else {echo "Złe hasło!";}
?>

I teraz jak napisac zeby mi skrypt czytal hasla z pliku, linia po linii i sprawdzal z tym co przyjdzie z formularza? Hasla bylyby w pliku tekstowym w takiej postaci:

// pass.txt
tomek||e1bfd762321e409cee4ac0b6e841963c
monika||8ddeb2027a8c79b3c46510a6dcef9dda
robert||9451810adcc13a25e610332880cc447a

Chodzi mi o to zeby tylko hasla byly szyfrowane.
Bardzo prosze o pomoc bo bez tego logowania ani rusz sad.gif
DeyV
[php:1:f27e0a31af]<?php

$login = "login";
$hasło = md5($haslo);
### to były dane testowe ###

$tab = file($adres_pliku);

foreach ($tab as $wiersz){
$_tab = explode ('|',$wiersz);
if ($_tab[0] == $login){
if ($_tab[1] == $haslo) echo "zalogowany";
else echo "Błędne hasło";
break;
}
}
unset ($tab, $_tab);

?>[/php:1:f27e0a31af]
scanner
http://forum.php.pl/regulamin.php/#IV.4.f
Project
Skoro chcesz pisac forum i inne aplikacje to warto by bylo zaznajomic sie z SQL`em...
takie logowanie rozniez latwo mozna oprzec o baze danych....

przeslane dane najpierw filtrujesz a pozniej sprawdzasz ich prawdziwosc w SQL`u

np.
$aSQL="SELECT login, mdpassword FROM users WHERE login='$login' AND mdpassword='$zakodowanehaslo'";

Jesli jednak bedziesz sie upieral przy plikach to moze to Ci pomoze::

[php:1:d7a4f4d3f7]
$linia= file("plik.txt");
$txt = current($linia);
do
{
// $txt to linia z pliku
}
while($txt= next($linia))
[/php:1:d7a4f4d3f7]
a tak wogole to nie potrafiac zrobic tego nie wroze Ci szybkiego ukonczenia innych aplikacji ;D
scanner
DeyV, pozwolę sobie lekko Twój przykład zmodyfikować:[php:1:bfe5b96ab0]<?php

$login = "login";
$hasło = md5($haslo);
### to były dane testowe ###

$tab = file($adres_pliku);
$zalogowany = FALSE;

foreach ($tab as $wiersz){
$_tab = explode ('|',$wiersz);
if ($_tab[0] == $login){
if ($_tab[1] == $haslo){
echo "zalogowany";
$zalogowany = TRUE;
} else {
echo "Błędne hasło";
}
} else {
echo "podany użytkowniek nie istnieje";
}
}
unset ($tab, $_tab);
if (!$zalogowany) die('Logowanie nie powiodło się.');
?>[/php:1:bfe5b96ab0] To tylko dla porządku - często nie wiadomo czy się wpisało źle hasło, czy użytkownika, czy jedno i drugie.
berto
Dziekuje, naprawde nie spodziewalem sie az tak szybkiej odpowiedzi.

DeyV ---> sprobuje tego, choc nie bardzo wiem jak wyciagnac te dane z pliku, czy moglbym prosic troche jasniej. Dopiero zaczynam i jeszcze wielu rzeczy nie wiem.

Scanner ---> wiem, zapomnialem dodac znacznikow, chyba o to ci chodzi,
przepraszam, nastepnym razem nie zapomne

Project ----> niestety nie mam dostepu do SQL'a.
Project
tak szczerze mowiac chlopaki to w waszym skryptcie nie podoba mi sie przekazywanie nazwy pliku przez parametr !!!
jezeli skrypt bylby napisany w takiej formie jak zaproponiowalicie to daje glowe ze zaloguje sie nie znajac ani loginu ani hasla winksmiley.jpg
DeyV
zobacz Manual->file() i wszystko będzie jasne
scanner
Cytat
w waszym skryptcie nie podoba mi sie przekazywanie nazwy pliku przez parametr !!!
Chyba czegoś nie rozumiem. Przez jaki parametr? Przez zmienną? A co to ma do rzeczy?
Cytat
Jeżeli skrypt bylby napisany w takiej formie jak zaproponiowalicie to daje glowe ze zaloguje sie nie znajac ani loginu ani hasla winksmiley.jpg
Jak?
Project
http://adres.strony/skrpt.php?adres_pliku=...wer/moj.plk.txt

a co w mim pliku i na moim serwerze to juz chyba nie musze tlumaczyc winksmiley.jpg
to tak najprosciej jak mozna... czesto znajduje sie takie bledy w plikach ktore sa includowane przez inne skrpty winksmiley.jpg
berto
Jeszcze raz dziekuje, mam nadzieje ze sobie jakos z tym poradze.
DeyV
Cytat
DeyV, pozwolę sobie lekko Twój przykład zmodyfikować:
Ależ oczywiście, będzie mi niezmiernie przyjemnie, Towarzyszu Scanner;)

Cytat
czesto znajduje sie takie bledy w plikach ktore sa includowane przez inne skrpty
W którym skrypcie posawiło się includowanie plików podanych przez paramenr?
Czy chodzi ci o file($nazwa_pliku) ? To ty nie wiesz, ze jeśli to miałby być parametr, to byłby pobrany jak na dane od użytkownika przystało przez ($_POST, $_REQUEST) ?
A zresztą spróbuj zaszkodzić podając błędne dane do funckji file aaevil.gif
A zresztą nie na wiele by ci się przydał dosep do pliku z hasłami zakodowanymi przez md5 tongue.gif
scanner
Project: Pod warunkiem, że wiesz, jaką nazwę ma zmienna trzymająca adres pliku. Do tego mam dla Ciebie coś takiego:[php:1:7433215ddd]<?php
define('__adresPliku__', 'sciezka/do/pliku.txt');
$__file = file(__adresPliku__);
?>[/php:1:7433215ddd]
DeyV: azaliż dziękuję Panu za przyzwolenie.
Project
DeyV nie bardzo sie zrozumielismy...
nie potrzebowalbym wtedy juz tego pliku bo skrypt dane wzorcowe pobieralby odemnie z serwera smile.gif
co do tego includowania to wybieglem troche do przodu i staralem sie wyobrazic praktyczne zastosowanie tego (waszego) skryptu. Aby go nie modyfikowac trzeba bylo by zaincludowac go innym skryptem w ktorym bylaby zdefiniowana wartosc zmiennej $adres_pliku

Co do twojej wypowiedzi scanner to faktycznie trzeba znac nazwe zmiennej... i jak zaznaczylem wczesniej dziala gdy w skryptcie nie jest okreslona sciezka do pliku.
Teodor
Cytat
Co do twojej wypowiedzi scanner to faktycznie trzeba znac nazwe zmiennej... i jak zaznaczylem wczesniej dziala gdy w skryptcie nie jest okreslona sciezka do pliku.


Moze czegos nie rozumiem ale jak, znajac nawet nazwe zmiennej, chcesz ja przekazac w URL do skryptu w ktorym bedzie ona i tak dopiero definiowana ?

a z drugiej strony kto umieszcza plik z haslami w root-katalogu skryptu (gdzie jest dostepny jak zwykly plik)?

Pozdrawiam
kwiateek
Cos podobnego bylo juz poruszane:
http://forum.php.pl/viewtopic.php?t=2158&highlight=md5
Project
Nie nie nie....
ten system mial sie opierac na plikach textowych a nie na sqlu.
Wspominal o tym autor topicu wczesniej.
Watek o ktorym ty wspominasz byl o wykorzystaniu istniejacej juz struktury SQL`a (a dokladniej o strukturze z phpbb)
Teodor
fakt podany przyklad troche nie pasuje tutaj
Ja kiedys gdy nie mialem dostepu do sql uzywalem tego:
[php:1:f017ba8c64]<?
require("includes/funkcje.php");
include("db/config.php");
$is_loged_in="0";
if(isset($username)) {
if(!isset($md5_password)) {
$md5_password=md5($password);
}
$members_db=file("db/user.txt");
foreach($members_db as $member_db_line){
$member_db=explode("||",$member_db_line);
if($member_db[1]==$username && $member_db[2]==$md5_password) {
$is_loged_in=1;
setcookie("username", $username, time()+21600);
setcookie("md5_password", $md5_password, time()+21600);
break;
}
}
}
$pokaz = new only;
if($is_loged_in==0) {
$pokaz->head(0, "Zaloguj sie");
echo"<form action='secure.php' method='post'>n";
echo"<table width='100%' class='tabela'>";
echo"<tr><td align='right'>Username:</td><td align='left'><input type='text' name='username' ></td></tr>n";
echo"<tr><td align='right'>Password:</td><td align='left'><input type='password' name='password'></td></tr>n";
echo"<tr><td></td><td><input type='submit' value='Login'></td></tr>n";
echo"</table>";
echo"</form>n";
$pokaz->foot(0);
}
elseif($is_loged_in==1) {
switch($action) {
default:

?>[/php:1:f017ba8c64]

I nadal nie widze mozliwosci obejscia tego w taki sposob jak przedstawil Project...
Przyklad: jakisskrypt.php

[php:1:f017ba8c64]<?php
$blabla=123;
echo"$blabla";
?>[/php:1:f017ba8c64]
I teraz wywolujemy
Kod
http://jakasstrona.com/jakisskrypt.php?blabla=321

i co sie wyswietli?

A na koniec wszystko sie sprowadza do tegi iz, niewaznie jak bezpieczny(od strony php) masz system logowania jak i tak znajdzie jakis script-kiddie, ktory forcebrut'em i tak wejdzie bo uzytkownicy przewaznie maja hasla typu "monitor", "myszka" itp smile.gif
Project
Bo to nie o to tu chodzilo...
jase ze w taki sposob to nie zadziala... ale w przykladzie ktory padl na samym poczatku wcale nie bylo zdefiniowanej zadnej wartosci.. a calosc wygladala jakby miala byc includowana do wiekszej calosci...
czesto zdaza sie ze wywolujac odpowiedni plik z ustawionymi zmiennymi mozna uzyskac nieautoryzowany dostep (np do panelu administracyjnego) !!!
aaevil.gif
Pewnie niejeden z was powie ze to bledy niedoswiadczonych programistow ale prawda jest taka ze moga zdazyc sie kazdemu gdy termin nagli (wtedy czlowiek pracuje jak automat)...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.