[PHP] Autoryzacja HTTP Krzysztof Szypulski - Środa, 29 grudnia 2004 23:12:03
Jeżeli z jakiś powodów potrzebujesz w szybki sposób zabezpieczyć jakąś stronę, to poniższy skrypt Ci w tym pomoże. Umieść go jako pierwszy kod na stronie.
PRZYKŁAD
<?php
$login = "admin"; // tu wpisz swój login $password = "pass"; // a tu swoje hasło
if(!isset($_SERVER['PHP_AUTH_USER']) or strcmp($_SERVER['PHP_AUTH_USER'],$login) or strcmp($_SERVER['PHP_AUTH_PW'],$password)) { header("WWW-Authenticate: Basic realm=strefa chroniona"); header("HTTP/1.0 401 Unauthorized"); die("Brak uprawnień do przeglądania strony"); } else { echo "Witaj w strefie chronionej!"; }
Format
(195.136.71.xxx) Sobota, 01 stycznia 2005 14:22:46
Czy takie zabezpieczenie jest bezpieczne ?
Od administratora:
Tak
OI
(80.55.169.xxx) Poniedziałek, 03 stycznia 2005 16:17:26
Ale zeby kod pozwalal sie zalogowac raz i wiec nie, tzn jak sie zaloguje i odejde od kompa to kazdy do czasu usuniecia cookie bedzie mogl odwiedzic strone
Od administratora:
Wystarczy zamknąć przegladarkę i przy logowaniu nie zaznaczać checkboxa.
Piterownik
(212.244.166.xxx) Czwartek, 13 stycznia 2005 18:52:50
nie wiem czy to takie bezpiecne :? ktoś wchodzi na żródło i elegandzko widzi
login i hasło :
<?php
if (!isset($_SERVER['PHP_AUTH_USER'])) {
header('WWW-Authenticate: Basic realm="Konieczność autoryzacji"');
header('HTTP/1.0 401 Unauthorized');
exit;
}
else if(isset($_SERVER['PHP_AUTH_USER'])) {
$plik = "hasla.txt";
$fp = fopen($plik,"r");
$WszystkieHasla = fread($fp, filesize($plik));
fclose($fp);
$LoginHaslo = explode("|", $WszystkieHasla);
$i = 0;
while($i >= sizeof($LoginHaslo)) {
$dane = explode(":", $LoginHaslo[$i]);
$uzytkownik=strval($_SERVER['PHP_AUTH_USER']);
$haslo=strval($_SERVER['PHP_AUTH_PW']);
if (($dane[0] == $uzytkownik) && ($dane[1] == $haslo)) {
$auth = true;
break;
}
else {
$auth = false;
}
$i++;
}
if ($auth == true) {
header("Location: Web.html");
exit;
}
else {
header('WWW-Authenticate: Basic realm="Konieczność autoryzacji"');
header('HTTP/1.0 401 Unauthorized');
echo 'Brak dostępu';
exit;
}
}
?> dzięki temu mamy loginy i hasla w pliku hasla.txt który wygląda tak:
dmin:1aqwesf43|romek:1ds345|ziutek:1341223d
Chcialbym aby go ktos przerobil tak aby zamiast strony zdefinjowanej po prostu generowal ja jak w przykładzie opisanym u góry.
Od administratora:
Trochę mnie rozbawiłeś ;-) A jak Ty chcesz zobaczyć źródło pliku php? To co
widzimy w przeglądarce, w źródle strony to tylko czysty kod html...
Format
(195.136.71.xxx) Wtorek, 18 stycznia 2005 18:26:58
Było pytanie o to, że trzeba czekać na cookisy ja bym to zrobił tak: ## link:
<A href="plik.php?do=wyloguj">wyloguj</A> ## do nagłółwka if - a: or
$do=="wyloguj" ## i gdzieś na górze: $do = $_GET['do']; wyświetli się wtedy
okienko do logowania i jest się wylogowanym :D
eXcentryk
(83.30.221.xxx) Wtorek, 25 stycznia 2005 23:21:23
Można jeszcze użyć poniższego skryptu htpasswd.php:
<?php
if (($user) && ($pass)) {
$url = $DOCUMENT_ROOT . dirname($PHP_SELF) . "/.htpasswd";
$htaccess_txt = "AuthType Basic" . "n";
$htaccess_txt .= "AuthName "Podaj hasło"" . "n";
$htaccess_txt .= "AuthUserFile $url" . "n";
$htaccess_txt .= "require valid-user" . "n";
$htpasswd_txt .= "$user:".crypt($pass,CRYPT_STD_DES)."n";
$htaccess= fopen(".htaccess", "w");
$htpasswd= fopen(".htpasswd", "w");
fputs($htaccess, $htaccess_txt);
fputs($htpasswd, $htpasswd_txt);
fclose($htaccess);
fclose($htpasswd);
die ("Nowe pliki: .htaccess i .htpasswd zostały pomyślnie utworzone !!!<br><br> Nie zapomnij skasować htpasswd.php oraz przywrócić domyślny chmod katalogu na 775 ");
}
?>
<html>
<head>
<title>.htaccess + .htpasswd</title>
</head>
<body>
<center>
<form method="POST" action="<? echo $PHP_SELF; ?>">
Pamiętaj !!! katalog w którym zakładasz hasło musi mieć chmod ustawione na 777 !!!
<p>Użytkownik:
<input type="TEXT" name="user"></p>
<p>Hasło:
<input type="TEXT" name="pass"></p>
<p>
<input type="submit" value="Utwórz pliki zabezpieczjące katalog"></p>
</form>
</center>
</body>
</html>
utworzy pliki .htaccess i .htpasswd Katalog, który zabezpieczasz musi mieć chmod = 777, potem oczywiście trzeba zmienić, no i wykasować htpasswd.php :)))
GnomB
(83.25.232.xxx) Wtorek, 08 marca 2005 22:18:44
Czy moglibyscie mi pomoc z wylogowywaniem (tzn wpisac gdzie co ma byc) w tym skrypcie
Z gory dziekuje
GnomB
Tosiek
(10.0.0.xxx) Wtorek, 15 marca 2005 17:01:30
Odnośnie pierwszego skryptu, co sięstanie jak nawali PHP na danym serwerze? Czy wtedy też nie będzie widoczne hasło?
Od administratora:
Bardzo dziwne pytanie, jak siadzie php, to siadzie i caly serwer...
marko
(217.153.233.xxx) Niedziela, 20 marca 2005 18:18:04
To jest fajne. Dziękuje KESS.
A gdybym chciał aby było kilka loginów i haseł (zapisanych w pliku textowym) to bardzo trzeba by było przerobić ten skrypt. Proszę też o jakąś wskazówke jak do tego się zabrać :)
Od administratora:
Napiszę taką poradę.
Wiąz
(83.26.76.xxx) Wtorek, 05 kwietnia 2005 10:39:18
wczesniej admin wspomnial ze czemu krys haslo jak widac tylko html:) czasasmi parser sie wysypuje i widac neistety cale php jak na dloni:) wystarczy zmeinne haslo i user dac w pliku jakims i zrobic include() lub require()
Od administratora:
Jak parser się wysypie to wszystko pokaże łącznie ze ścieżkami do plików w których przechowujesz hasla...
Mam problemik bo gdy wklejam ten kod to wywala mi:
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Czemu?
Od administratora:
Wygląda na to, że masz jakiś problem z serwerem...
LISEK
(10.1.4.xxx) Czwartek, 07 kwietnia 2005 14:45:45
no to ciekawe bo próbowałem też na koncie moim na innym serwerze. Ale nie działa :| Czy może mi ktoś zapodać inny sposób??
Verner
(172.16.90.xxx) Czwartek, 21 kwietnia 2005 20:06:06
Ech... jakby zapisać pliki w plik txt to każdy mógłby to odczytać, jażeli utworzymy plik hasla.php:
<?php
$hasla="ziutek:4532454|maciek:534635";
?>
Wystarczy tylko włączyć plik hasla.php i explode($hasla,'|'); i mamy :P
Jasiek
(83.22.38.xxx) Środa, 29 czerwca 2005 14:17:56
Nie mamy. Jak włączysz jakiś plik PHP na serwerze i zobaczysz źródło to nigdy nie zobaczysz pełnego skryptu PHP tylko wykonany kod HTML.
Od administratora:
Wogóle nie zobaczysz skryptu PHP!
Kacper
(84.40.140.xxx) Poniedziałek, 01 sierpnia 2005 13:12:10
Witam
Ten skrypcik jest fajniutki i wielkie dzieki za niego. Teraz tylko go musze odrobinke przerobic, bo chce aby przetwarzał dane z formularza napisanego w HTML'u :D. Mam nadzieje ze nie bedzie problemów.
A tak btw, to strasznie śmieszą mnie Ci co tutaj piszą że jak sie wejdzie w źródla to widać kod <rotfl>. Ludzie to nie jest JavaScript, jak sie bawicie w PHP to powinniście to wiedziec, to jest podstawowa wiedza !!
Pozdrawiam.
marcin
(192.168.10.xxx) Poniedziałek, 22 sierpnia 2005 11:57:48
Mam pytanie gdzie trzeba wpisac te hasla do pliku hasla.txt czy gdzie i jeszcze jedno mam problem z htpasswd bo jak ustalam na poczatku haslo i potem chce je wpisac to wyskakuje mi ze jest niepoprawne
Od administratora:
Akurat w tym skrypcie hasło podaje się na początku. Co do htpasswd to z tego co się orintuję to do jego edycji czy utworzenia użytkownika i hasła służy odpowiedni program. Hasła w tym pliku są kodowane bodajrze md5. Zajrzyj także tutaj: http://pl.php.net/manual/pl/features.http-auth.php
Krzysiek
(83.29.42.xxx) Poniedziałek, 05 września 2005 23:19:16
Jeżeli ktoś ma obawy o bezpieczeństwo danych rejestracyjnych w pliku to proponuje poczytać o kodowaniu np.MD5,
Jerry
(83.26.192.xxx) Czwartek, 22 września 2005 01:40:37
jestem laikiem w dzidzinie PHP i jeśli ktoś może mi pomóc to prosze podać co wpisać żeby po podaniu prawidłowego logu i hasła odesłało automatycznie do wybranej przeze mnie strony html ??
Od administratora:
header("Location: strona.html");
reltih
(82.210.170.xxx) Piątek, 21 października 2005 19:06:42
wystarczy hasła zakodować w md5.
funkcja md5(); możecie wejść na http://www.php.net i wyszukać tą funkcję w liście funkcji i przeczytac sobie
Mortiis
(86.131.125.xxx) Sobota, 05 listopada 2005 00:17:04
potrzebuje pomocy, zamontowalem skrypt, i fakt faktem otwiera sie okienko lgowania, ale na upartego po uzupelnieniu logowania pytamnie jeszcze raz o logownia i wkolko tak do usranje smierci...jelsi ktos wie czemu bylbym wdzieczny z apomoc
blizarre
(83.21.57.xxx) Czwartek, 25 maja 2006 17:59:23
z prawch hasła jestem zupełnie zielony i potrzebuje porządnej pomocy.
tzn żeby ktoś mi opisał (jak dla debi**) co mam zrobić aby przy wejściu na jakąś strone wyświetlało się okienko o podanie hasła (nie musi być użytkownik), ale żeby trzeba było podać hasło gdy chcem coś pobrać ze strony || można na gg 6927739
lukasz
(213.199.218.xxx) Poniedziałek, 29 maja 2006 22:16:27
hej wszystkim!
ok. mam autoryzację i wszystko śmiga jak powinno, ale jest problem z wylogowaniem.
można tego dokonać tylko poprzez zamknięcie przeglądarki, a ja potrzbuję zrobic to poprzez fukcje php, bez zamykania przeglądarki.
Próbuję unset($PHP_AUTH_USER, $PHP_AUTH_PW);
Ale nic z tego cały czas przeglądarka je ma!!! Jak temu zaradzić???
neko
(193.151.24.xxx) Środa, 31 maja 2006 12:47:03
Zawsze mozna sciagnac plik php i obadac sobie go u siebie na kompie. To nie jest problem. Haslo i inne informacje mozna miec jak na dloni. Dlatego prosilbym o jakis bezpieczniejszy sposob na przechowywanie loginow i hasel.
Od administratora:
A w jaki sposób chcesz ściągnąć z serwera plik *.php???
Maciek
(83.29.204.xxx) Poniedziałek, 26 czerwca 2006 09:20:09
Ja nie mogę, powyższe komentarze, są poniżej krytyki (te z hasłami typu - można pobrać skrypt PHP z serwera, albo zobacze źródło skryptu PHP).
Radzę zacząć naukę od HTMLa.
mort
(84.10.102.xxx) Wtorek, 04 lipca 2006 10:46:18
a co sadzicie o taki rozwiazaniu:
strona startowa:
<html>
<head></head>
<body>
<p> <a href="https://adres_witryny/log.php">
logowanie</a></p>
</body></html>
ciekaw jestem czy uwazacie to rozwiazanie za bezpieczne?
Dla porzadku common.inc:
<?php
function nagl() //wypisuje naglowekstrony html
{
echo '<html><head></head><body>';
}
function stopka() //wypisuje stopke strony html
{
echo '</body></html>';
}
?>
Oczywiscie tu tez po zakonczeniu sesji bezpieczniej jest zamknac przegladarke, a moze nawet wyczzyscic cache...
P.S.
Przepraszam, ze nie podkolorowalem kody, ale jeszcze nie wiem jak to sie na Waszym forum robi :(
marcin
(62.233.234.xxx) Piątek, 14 lipca 2006 12:12:58
funkcja md5 nie jest bezpieszna . jak juz dostaniesz zakodowane md5 to http://md5encryption.com/?mod=decrypt i juz masz haslo
Od administratora:
Można użyć kombinacji crypt i md5.
Marek Próchniak
(86.63.153.xxx) Środa, 16 sierpnia 2006 01:18:32
albo sha-1
bmperson
(195.150.76.xxx) Niedziela, 29 października 2006 11:17:55
wszystko jest ok dziala ale mam problem jak zrobic zeby skrypt pobieral dane z formulaza a nie wyswietlalo sie okno
Od administratora:
To musisz sobie taki skrypt napisać, nie da się tego wykorzystać.
vabos
(83.9.55.xxx) Środa, 08 listopada 2006 17:39:17
Krzyssztofie !! a jak zrobic aby strona z takim zabezpieczeniem otwierala sie w Twoim szablonie. U mnie wyskakuje komunikat:
Warning: Cannot modify header information - headers already sent by (output started at c:usrkrasnalwwwszablon_www_phpindex.php:1) in c:usrkrasnalwwwszablon_www_phppagewywiadowka.php on line 7
Warning: Cannot modify header information - headers already sent by (output started at c:usrkrasnalwwwszablon_www_phpindex.php:1) in c:usrkrasnalwwwszablon_www_phppagewywiadowka.php on line 8
Brak uprawnień do przegl¹dania strony
Od administratora:
Taki kod umieszcza się na samym początku strony.
SzeFu
(88.156.11.xxx) Niedziela, 03 grudnia 2006 17:41:58
drogi adminie, jesli serv jest publiczny tzn mozna na nim zakladac stronki to sciagniecie zrodla php nie jest juz takim problemem wrzucamy na serv wlasną stronkę w php i uzywajac np : fopen, wyswietlamy i po sprawie
:)
Od administratora:
Najpierw musisz mieć dostęp do danego konta.
Karpik
(213.238.65.xxx) Poniedziałek, 29 stycznia 2007 10:22:01
PROŚBA o POMOC
Jak zmienić kod, żeby we wspomnianym pliku "hasła.txt" była możliwość wpisywania loginów i haseł w pionie, czyli nie obok siebie? I jak zrobić, aby obok loginu i hasła była możliwość napisania jeszcze jednej informacji, która będzie pomocna dla administratora do kogo należy ten login i hasło.
Muniek
(83.4.183.xxx) Niedziela, 04 lutego 2007 12:42:33
Umm zastanawiam sie po co to jest tak skomplikowane? Nie lepiej to zrobic na sesjach? I z wylogowywaniem nie bedzie problemu...
Od administratora:
To zależy jak kto lubi ;-) To jest akurat rozwiązanie systemowe. Ja osobiście używam go w prostych zastosowaniach.
devilman
(83.12.80.xxx) Środa, 30 maja 2007 10:07:43
niektóre komentarze są naprawde zabawne, jak można sobie ściągnąc kod php z innego konta lub serwera... moze i fakt wykorzystasz do tego funkcje exec by cos podejrzec ale serwerow ktore sa na tyle nie zabezpieczone by pozwalaly na podgladniecie katalogu wyzej niz katalog uzytkownika jest moze jeden na milion apache sam w sobie jest juz tak skonfigurowany by nie pozwolil na taka manipulacje kodem ponadto wiekszosc a nawet niemalze wszystkie serwery juz maja zablokowana funkcje exec wiec jaki jest sens w tych wypowiedziach. Jestem poczatkujacym adminem serwera a juz zabezpieczylem go przed takimi probami ataku sciagniecie kodu php jest niemozliwe jedyne co moze umozliwic go to blad skryptu ktory po wprowadzeniu danego ciagu znakow ma mozliwosc sie wysypac ale osoby zajmujace sie programowaniem php wiedza juz i zabezpieczaja swoje skrypty pod tym katem a serwery sa glownie ustawione by po wykryciu bledy interpretera zatrzymywac wykonywanie skryptu przez co niemozliwe jest w ten sposob przejrzenie skryptu funkcja fopen co najwyzej zczyta zinterpretowany plik lub plik tekstowy ale nie ciag php wiec ludzie nie osmieszajcie sie piszac takie bzdury a lepiej przeczytajcie sobie przynajmniej wstep do programowania php sam manual od apacha wystarczy by zorientowac sie ze podejrzenie kodu php graniczy niemalze z cudem a zdarza sie tylko gdy sie wysypie parser czyli niezmiernie rzadko a jaka jest jeszcze w tym ze wlasnie wysypie sie osobie ktora wykorzysta to i bedzie wiedziala jak graniczy to z cudem!!
Ze względu na brak czasu na moderowanie komentarzy, zawieszam możliowść ich dodawania. Masz pytanie, wykorzystaj formularz "Zadaj pytanie".
Publikowane komentarze są prywatnymi opiniami użytkowników serwisu. Serwis nie ponosi odpowiedzialności za treść opinii.
Zadaj pytanie
Nie znalazłeś(aś) odpowiedzi na nurtujące Cię pytanie? Zapytaj mnie, może będę umiał Ci pomóc.