Problem ze skryptem rejestracji

Wszystko o językach skryptowych takich jak PHP i Perl, serwerach WWW, CGI, bazach danych i języku SQL.
Tabal
Posty: 2
Rejestracja: 28 wrz 2005, 23:05:14
Płeć: Niewybrana
User Agent: Firefox Windows 1024x768

Problem ze skryptem rejestracji

Post autor: Tabal »

---------- 23:08 28.09.2005 ----------

Ktos moze wie dlaczego to nie dziala
Bo mi sie zdaje ze wszystko tu jest ok

Kod: Zaznacz cały

<HTML>
<HEAD>
<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=utf-8">
<META NAME="Author" CONTENT="Pion  |  pionanf@poczta.onet.pl  |  609 24 33 07">
<TITLE>System rejestracji by Pion</TITLE>
<LINK REL="stylesheet" HREF="logowanie_by_pion.css" TYPE="text/css">
</HEAD>
<BODY>
<CENTER>
<TABLE WIDTH="500" BORDER="0">
<TR>
<TD WIDTH="500">
<b>System rejestracji by Pion</B>
<hr width="400" noshade size="1" align="left">
<br>
<?
if &#40;$p == "Rejestruj"&#41;
&#123;
    if &#40;$login && $haslo && $haslo2 && $pytanie && $odpowiedz&#41;
    &#123;
        // usuwanie zbednych znakow
        $login = str_replace &#40;"<", "", $login&#41;;
        $login = str_replace &#40;">", "", $login&#41;;
        $login = str_replace &#40;"|", "l", $login&#41;;
        $login = str_replace &#40;" ", "_", $login&#41;;
        $login = stripslashes&#40;$login&#41;;
        $haslo = str_replace &#40;"<", "", $haslo&#41;;
        $haslo = str_replace &#40;">", "", $haslo&#41;;
        $haslo = str_replace &#40;"|", "l", $haslo&#41;;
        $haslo = str_replace &#40;" ", "_", $haslo&#41;;
        $haslo = stripslashes&#40;$haslo&#41;;
        $haslo2 = str_replace &#40;"<", "", $haslo2&#41;;
        $haslo2 = str_replace &#40;">", "", $haslo2&#41;;
        $haslo2 = str_replace &#40;"|", "l", $haslo2&#41;;
        $haslo2 = str_replace &#40;" ", "_", $haslo2&#41;;
        $haslo2 = stripslashes&#40;$haslo2&#41;;
        $pytanie = str_replace &#40;"<", "", $pytanie&#41;;
        $pytanie = str_replace &#40;">", "", $pytanie&#41;;
        $pytanie = str_replace &#40;"|", "l", $pytanie&#41;;
        $pytanie = stripslashes&#40;$pytanie&#41;;
        $odpowiedz = str_replace &#40;"<", "", $odpowiedz&#41;;
        $odpowiedz = str_replace &#40;">", "", $odpowiedz&#41;;
        $odpowiedz = str_replace &#40;"|", "l", $odpowiedz&#41;;
        $odpowiedz = stripslashes&#40;$odpowiedz&#41;;
    $new_user_file = "users_logins/".$login.".txt";
        if &#40;file_exists&#40;$new_user_file&#41;&#41; // jeżeli dany login jest już zarejestrowany
        &#123;
        print &#40;"Login ".$login." został już zarejestrowany."&#41;;
        print &#40;'<br><A HREF="javascript:history.back&#40;&#41;;" TARGET="_top">Wróć i popraw</A><br>'&#41;;
        &#125;
        else // jeżeli login jest wolny
        &#123;
            if &#40;$haslo == $haslo2&#41; // oba hasla się zgadzaja
            &#123;
            // dopisanie do pliku ostatniej rejestracji
            $newest_user_file = fopen &#40;"newest_user.txt", "w"&#41;;
            fputs &#40;$newest_user_file, $login&#41;;
            fclose &#40;$newest_user_file&#41;;
            
            // stworzenie pliku nowego uzytkownika
            $new_user_file = fopen &#40;"users_logins/".$login.".txt", "w"&#41;;
            $zawartosc_new_user_file = $haslo."|".$pytanie."|".$odpowiedz;
            fputs &#40;$new_user_file, $zawartosc_new_user_file&#41;;
            fclose &#40;$new_user_file&#41;;
            
            print &#40;'Rejestracja zakończona pomyślnie!<br><br>'&#41;;
            print &#40;"Login: <b>".$login."</b><br>"&#41;;
            print &#40;"Hasło: <b>".$haslo."</b><br>"&#41;;
            print &#40;"Pytanie: ".$pytanie."<br>"&#41;;
            print &#40;"Odpowiedź: ".$odpowiedz."<br><br>"&#41;;
                            
    /*
    !!!!!!!!!!!!!!!
    
    Zastosowana poniżej funckja iglu_mail wysyła na adres usera oraz admina &#40;w tym przypadku pionanf@poczta.onet.pl&#41; informacje o założeniu nowego konta. Jeśli korzystasz ze zwykłej funckji mail zamień iglu_mail na mail i będzie git! :&#41; Jeśli w ogóle nie chcesz wysyłać @ zakomentuj kod od $body2 do &#125; będącego po print '';
    
    !!!!!!!!!!!!!!!
    */
            
            $body2 = "Nowy user zarejestrowany w Systemie rejestracji Piona:\r\n\r\nLogin: ".$login."\r\nHasło: ".$haslo."\r\nPytanie: ".$pytanie."\r\nOdpowiedź: ".$odpowiedz;
                iglu_mail &#40;'pionanf@poczta.onet.pl', 'Twoje dane rejestracyjne', $body2&#41;;
            
                if &#40;$email&#41;
                &#123;
                $body = "Dziękuję za skorzystanie z Systemu logowania by Pion. Oto dane Twojego konta:\r\n\r\nLogin: ".$login."\r\nHasło: ".$haslo."\r\nPytanie: ".$pytanie."\r\nOdpowiedź: ".$odpowiedz."\r\n\r\nProszę o zachowanie tych danych lub wydrukowanie tego e-maila.\r\n\r\n\r\nPion";
                iglu_mail &#40;$email, 'Twoje dane rejestracyjne', $body&#41;;
                                
                print &#40;"Na adres ".$email." zostały wysłane powyższe dane.<br>"&#41;;
                &#125;
                else
                &#123;
                print '';
                &#125;
            
            print &#40;'Możesz teraz się <A HREF="login.php" TARGET="_top">zalogować</A>.'&#41;;
            &#125;
            else // rozne hasla
            &#123;
            print &#40;'Podane hasła:<br><br>'&#41;;
            print &#40;"hasło: ".$haslo&#41;;
            print &#40;"<br>powtórzone hasło: ".$haslo2&#41;;
            print &#40;'<br><br>nie są jednakowe'&#41;;
            print &#40;'<br><A HREF="javascript:history.back&#40;&#41;;" TARGET="_top">Wróć i popraw</A><br>'&#41;;
            &#125;    
        &#125;
    &#125;
    else
    &#123;
     print &#40;'Nie wypełniłeś wszystkich pól formularza.'&#41;;
    print &#40;'<br><A HREF="javascript:history.back&#40;&#41;;" TARGET="_top">Wróć i popraw</A><br>'&#41;;
    &#125;
&#125;
else
&#123;
/* formularz logowania i link do rejestracji */
print &#40;'<form ACTION="" method="post">'&#41;;
print &#40;'Nazwa postaci:<br><input TYPE="text" name="login"><br><br>'&#41;;
print &#40;'Hasło:<br><input TYPE="text" name="haslo"><br><br>'&#41;;
print &#40;'Powtórz hasło:<br><input TYPE="text" name="haslo2"><br><br>'&#41;;
print &#40;'Pytanie:<br><input TYPE="text" name="pytanie"><br><br>'&#41;;
print &#40;'Odpowiedź:<br><input TYPE="text" name="odpowiedz"><br><br>'&#41;;
print &#40;'E-mail &#40;na ten adres zostaną wysłane dane Twego konta - pole niewymagane&#41;:<br><input TYPE="text" name="email"><br><br>'&#41;;
print &#40;'<input TYPE="submit" name="p" value="Rejestruj"><br><br>'&#41;;
print &#40;'</form>'&#41;;
&#125;    
?>
<br><br>
<?
    include &#40;"menu.php"&#41;;
?>
<br><br>
<hr width="400" noshade size="1" align="left">
<small>Kontakt: pionanf@poczta.onet.pl</small>
</TD>
</TR>
</TABLE>
</CENTER>
</BODY>
</HTML>
---------- 23:12 ----------

Daje linka zeby mozna bylo zobaczyc o co chodzi.
http://www.dsaforum.cba.pl/forum/logowanie/register.php
A mianowicie po wypelnieniu pol i wcisnieciu "rejestruj" nic sie nie dzieje :(
Awatar użytkownika
swpok
Posty: 510
Rejestracja: 25 wrz 2005, 13:50:56
Lokalizacja: Syreni gród.
Płeć: Mężczyzna
User Agent: Firefox Windows
Kontakt:

Post autor: swpok »

Dzień bez uszczypliwości powinno siê uwa¿aæ dniem straconym.
Awatar użytkownika
szczepek
Posty: 44
Rejestracja: 03 wrz 2005, 20:28:19
Strona na CBA.pl: http://funny-pic.c0.pl
Lokalizacja: Wałbrzych
Płeć: Mężczyzna
User Agent: Firefox Windows 1024x768
Kontakt:

*

Post autor: szczepek »

A ja wiem czemu się tak dzieje!
Z tego co pamiętam to na cba wyłączono rejestrowanie zmiennych globalnych.
Nic się nie dziej bo nie ma zmiennej $p. Nazywa się ona $_POST['p']
Tak samo z $email, $login, $haslo, $haslo2, $pytanie i $odpowiedz.
na początku (zaraz za <?) daj:
$p=$_POST['p'];
$login=$_POST['login'];
$haslo=$_POST['haslo'];
$haslo2=$_POST['haslo2'];
$pytanie=$_POST['pytanie'];
$odpowiedz=$_POST['odpowiedz'];
$email=$_POST['email'];
Awatar użytkownika
swpok
Posty: 510
Rejestracja: 25 wrz 2005, 13:50:56
Lokalizacja: Syreni gród.
Płeć: Mężczyzna
User Agent: Firefox Windows
Kontakt:

Post autor: swpok »

:lol: :lol: :lol: :lol: :lol: :lol: :lol:
Gratulacje dla autora powyższego posta za tajną umiejętność klikania w hiperłącze
szczepek pisze:Nic się nie dziej bo nie ma zmiennej $p. Nazywa się ona $_POST['p']
Przez całe swoje życie nauczyłem sie jednej bardzo , ale to bardzo ważnej rzeczy... Mianowicie nie wypowiadaj sie na temat o którym nie masz bladego pojęcia
Ostatnio zmieniony 30 wrz 2005, 19:02:22 przez swpok, łącznie zmieniany 2 razy.
Dzień bez uszczypliwości powinno siê uwa¿aæ dniem straconym.
Awatar użytkownika
Monstrual
Posty: 2417
Rejestracja: 05 sie 2005, 15:06:08
Lokalizacja: G-dz
Płeć: Niewybrana
User Agent: Opera Windows 1024x768
Kontakt:

Post autor: Monstrual »

swpok pisze::lol: :lol: :lol: :lol: :lol: :lol: :lol:
Gratulacje dla autora powyższego posta za tajną umiejętność klikania w hiperłącze
szczepek pisze:Nic się nie dziej bo nie ma zmiennej $p. Nazywa się ona $_POST['p']
Przez całe swojego życia nauyczyłem sie jednej bardzo , ale to bardzo ważnej rzeczy... Mianowicie nie wypowiadaj sie na temat o którym nie masz bladego pojęcia
A ja bym prosił o nie pisanie tego typu postów, nawet jesli dana osoba jest na niższym poziomie, może poczuc sie urażona... Jeżeli wiesz, to mów, a nie krytykujesz innych. Trochę kultury.
Obrazek
Awatar użytkownika
swpok
Posty: 510
Rejestracja: 25 wrz 2005, 13:50:56
Lokalizacja: Syreni gród.
Płeć: Mężczyzna
User Agent: Firefox Windows
Kontakt:

Post autor: swpok »

Spróbuje to wytłumaczyć na prostym przykładzie dlaczego powinno być register_globals = off w php.ini jak postąpił administrator tego serwera.

Kod: Zaznacz cały

if&#40;$haslo=='haslo'&#41; $autoryzacja = 1; 
if&#40;$autoryzacja == 1&#41; echo 'Tajna tresc';
 
PHP standardowo dla "wygody" ma mechanizm zamiany wszystkich zmiennych sesji , cookies , formularzy na zmienne globalne. Napewno padnie odrazu pytanie : i co z tego ? Otóż pomyślmy co się stanie jeżeli w takim przypadku ktoś "sfałszuje" nagłówek i wpisze
www.xxx.pl?ok=1
Zmienna ok przyjmie wartość jeden i niepowołana osoba ujrzy tajną część strony bez potrzeby wpisywania we wcześniejszym formularzu hasła. Dlaczego tak się dzieje ?? Otóż jak już wcześniej mówiłem zmienną przekazywaną z formularza metodą GET mechanizm PHP zmienni standardowo na zmienną globalną. W przypadku wyłączenia zmiennych globalnych "globali" taki trik już nie przejdzie. W takim wypadku dostęp do zmiennych sesji etc .. jest możliwy za pośrednictwem tablic super globalnych takich jak :

$_GET[''] -- Dla zmiennych przesyłanych metodą GET
$_POST[''] -- Dla zmiennych przesyłanych metodą POST
$_SERVER[''] -- Dla zmiennych udostępnionych przez serwer www
$_SESSION[''] -- Dla zmiennych "sesyjnych"
$_COOKIE[''] -- Dla zmiennych cookies
$_FILES[''] -- Dla zmiennych opisująch upload -owany plik
$_ENV[''] -- Dla zmiennych środowiskowych

Czyli po zmianie nasz przykład powinien wyglądać tak :

Kod: Zaznacz cały

if&#40;$_POST['haslo']=='haslo'&#41; $_POST['autoryzacja'] = 1; 
if&#40;$_POST['autoryzacja'] == 1&#41; echo 'Tajna tresc';
 
Na koniec jako ciekawostke dodam , że nie radze stosować sposobu

Kod: Zaznacz cały

if&#40;$_POST['autoryzacja'] == 1&#41; echo 'Tajna tresc';
 
Ponieważ to że my nie widzimy zmiennych przekazywanych metodą POST to nie znaczy że nie można ich sfałszować.

Modzi i tu prośba do was o przyklejenie tego gdzieś , może rozwieje to wątpliwośći nowych użytkowników
Dzień bez uszczypliwości powinno siê uwa¿aæ dniem straconym.
ODPOWIEDZ