Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] strona zabezpieczona hasłem
Forum PHP.pl > Forum > Przedszkole
MatMc
Witajcie,
chciałbym, aby jedna z podstron była zabezpieczona hasłem.
- mam wrażenie, że jestem już blisko, a jednak - polecenie nie działa.

Po zatwierdzeniu hasła (także błędnego)
- w przeglądarce - zamiast pliku index.php, otwiera się login.php.

formularz:
Kod
<html>
<body>
<form name="form" action="login.php" method="post">
<input type="password" name="haslo"><br />
<input type="submit" value="ok">
</form>
</body>
</html>


oraz login.php:
Kod
<?PHP

if (isset($_POST['haslo'])) {
$haslo = $_POST['haslo'];

if  ($haslo == 'haslo')
{
@header ('Location: index.php');
}

else {
echo 'Nie udalo sie zalogowac.';
}
}
?>

co jest nie tak? :-(
Valdi_B
Na stronie: http://www.faqs.org/rfcs/rfc2616.html (rozdział14.30) jest informacja:
Location = "Location" ":" absoluteURI

Ty podałeś "index.php", co nie jest absolutnym URI.
drozdii07
Super znawcą PHP nie jestem, ale wydaje mi się, że można wpisać ręcznie www.adres-twojej-strony.pl/index.php i też wejdzie bez podania hasła, więc po co to ?
Jeśli się mylę to przepraszam smile.gif
ciekawskiii
a ja jestem ciekawy do czego sluzy malpa @ przed headerem bo nigdy jej u siebie nie wstawialem.
modern-web
@ to operator tłumienia błędów wink.gif
A wracając do tematu; Taki zapis także jest poprawny:

  1. header ('Location: index.php');


Błąd tkwi w innym miejscu.
Pozwól, że zrobię to po swojemu, a Ty porównasz z swoim kodem:

Plik index.php:

  1. <?php
  2. $haslo = $_POST['haslo'];
  3. if (isset($_POST['ok'])) {
  4. if ($haslo == 'haslo') {
  5. $komunikat.= "Logowanie udane! Za 3 sekundy nastąpi przekierowanie...<meta http-equiv="refresh" content="3;url=http://twoja_strona.pl/strona_dla_zalogowanych.php">";
  6. } else {
  7. $komunikat.= "Błędne hasło... Spróbuj ponownie!";
  8. }
  9. }
  10. ?>
  11. <html>
  12. <body>
  13. <form name="form" action="" method="post">
  14. <input type="password" name="haslo">
  15. <br />
  16. <input type="submit" name="ok" value="ok">
  17. </form>
  18. <br />
  19. <br />
  20. <? echo ''.$komunikat.''; ?>
  21. </body>
  22. </html>


Tak to powinno wyglądać jak na moje oko... (pisałem z pamięci więc proszę mnie w razie czego poprawić smile.gif)
ciekawskiii
Przy headerze to nie wiem w jakim celu... Co do tego kodu z haslem to jest ok i dziala wiec nie wiem o co chodzi
modern-web
Też mnie to zastanawia ale widać ma jasny powód, którego my nie dostrzegamy ^^
MatMc
Dziękuję za Wasze odpowiedzi,

Na pewno można to zrobić inaczej/lepiej.
Kompletnie raczkuję w temacie, a zależy mi na tym, aby ukryć niektóre dane.

Teraz rzeczywiście działa - brakowało pełnego adresu (nigdy bym nie wpadł na to)
Zastanawia mnie tylko jedno...
Skoro w źródle ogólnodostępnego pliku jest użyta nazwa pliku w którym zapisane jest hasło...
Czy to aby na pewno skuteczne zabezpieczenie?
(wiem, że każde hasło można złamać, ale wolałbym, aby nie były to tak prymitywne metody jak podejrzenie kodu źródłowego, bo nawet ja to potrafię)
konole
Cytat(MatMc @ 7.03.2011, 17:16:37 ) *
Dziękuję za Wasze odpowiedzi,

Na pewno można to zrobić inaczej/lepiej.
Kompletnie raczkuję w temacie, a zależy mi na tym, aby ukryć niektóre dane.

Teraz rzeczywiście działa - brakowało pełnego adresu (nigdy bym nie wpadł na to)
Zastanawia mnie tylko jedno...
Skoro w źródle ogólnodostępnego pliku jest użyta nazwa pliku w którym zapisane jest hasło...
Czy to aby na pewno skuteczne zabezpieczenie?
(wiem, że każde hasło można złamać, ale wolałbym, aby nie były to tak prymitywne metody jak podejrzenie kodu źródłowego, bo nawet ja to potrafię)

Kodu php nie da się podejrzeć przez przeglądarkę, jeśli o to ci chodzi.
Valdi_B
Cytat(MatMc @ 7.03.2011, 17:16:37 ) *
... brakowało pełnego adresu (nigdy bym nie wpadł na to)

Wystarczyło przeczytać to, co napisałem w poście z 5.03.2011, 11:59:10.
Adres absolutny to właśnie pełny adres (http://<nazwa_hosta>...)
greycoffey
Cytat(Valdi_B @ 7.03.2011, 17:49:09 ) *
Wystarczyło przeczytać to, co napisałem w poście z 5.03.2011, 11:59:10.
Adres absolutny to właśnie pełny adres (http://<nazwa_hosta>...)

On sam by na to nigdy nie wpadł, nie bądź tak zgryźliwy.
ciekawskiii
A od czego to zalezy? Ja nigdy nie podaje pelnego adresu i dziala
greycoffey
RFC 2616 - HTTP/1.1 - Location...
Prawdopodobnie niektóre przeglądarki naprawiają takie niedokładności.
modern-web
Ja także. W header nigdy nie wpisywałem adresu absolutnego. Chyba, że przekierowanie odnosiło się do pliku, który nie znajdował się na serwerze lokalnym. No cóż... są różne szkoły `jazdy` wink.gif
Nie mam pojęcia od czego to zależy.
ciekawskiii
Przy pelnym adresie w headerze mozna tracic sesje wiec dla mnie to nie jest najlepszy pomysl - dawno temu raz tak zrobilem i zastanawialem sie godzinami czemu sesje trace
MatMc
Valdi_B
- 5 III - już wszystko dobrze działało.
ale z odpowiedzią na forum - czekałem, aż będę mógł wrzucić stronę na serwer, żeby się upewnić, czy wszystko na pewno jest dobrze
dlatego odezwałem się dopiero dzisiaj.

Cytat
Kodu php nie da się podejrzeć przez przeglądarkę, jeśli o to ci chodzi.

- tak, o to pytałem.

Wszystko działa bez zarzutu.
Bardzo Wam dziękuję!
greycoffey
Odkopuję, ale słusznie biggrin.gif
Manual PHP, header.
Kod
Note:
HTTP/1.1 requires an absolute URI as argument to » Location: including the scheme, hostname and absolute path, but some clients accept relative URIs. You can usually use $_SERVER['HTTP_HOST'], $_SERVER['PHP_SELF'] and dirname() to make an absolute URI from a relative one yourself:
cwojtas1987
Cytat(modern-web @ 5.03.2011, 16:23:02 ) *
@ to operator tłumienia błędów wink.gif
A wracając do tematu; Taki zapis także jest poprawny:

  1. header ('Location: index.php');


Błąd tkwi w innym miejscu.
Pozwól, że zrobię to po swojemu, a Ty porównasz z swoim kodem:

Plik index.php:

  1. <?php
  2. $haslo = $_POST['haslo'];
  3. if (isset($_POST['ok'])) {
  4. if ($haslo == 'haslo') {
  5. $komunikat.= "Logowanie udane! Za 3 sekundy nastąpi przekierowanie...<meta http-equiv="refresh" content="3;url=http://twoja_strona.pl/strona_dla_zalogowanych.php">";
  6. } else {
  7. $komunikat.= "Błędne hasło... Spróbuj ponownie!";
  8. }
  9. }
  10. ?>
  11. <html>
  12. <body>
  13. <form name="form" action="" method="post">
  14. <input type="password" name="haslo">
  15. <br />
  16. <input type="submit" name="ok" value="ok">
  17. </form>
  18. <br />
  19. <br />
  20. <? echo ''.$komunikat.''; ?>
  21. </body>
  22. </html>


Tak to powinno wyglądać jak na moje oko... (pisałem z pamięci więc proszę mnie w razie czego poprawić smile.gif)

Zauważyłem, że w linijce ze znacznikiem: <meta http-equiv="refresh" content="3;url=http://twoja_strona.pl/strona_dla_zalogowanych.php">";
trzeba zmienić "" na ' ' wtedy będzie działać. Jeśli ktoś tak napisał to sorki!
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.