Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Bezpieczeństwo skryptu
Forum PHP.pl > Forum > Przedszkole
greenway
Witam ponownie. Chciałbym prosić o sprawdzenie, a raczej odpowiedź, która pozwoli mi rozwiać wątpliwości związane z moim skryptem logowania. Wykodziłem takie proste logowanie do PA oparte o sesje. Nie o bazę danych. Nie jestem, jednak przekonany co do bezpieczeństwa tego skryptu. Czy nadaje się on do logowania i jest bezpieczny ?

login.html
Kod
<html>
<head>
    <title>Prosta strona logowania</title>
</head>
<body>
<p>
    <a href="tajne.php">Chroniona zawartosć</a>
</p>
<p>Logowanie!</p>
<form action="autoryzacja.php" method="post">
    Nazwa użytkownika

    <input type="text" name="username">

    Hasło

    <input type="password" name="password">

    <input type="hidden" name="login">

    <input type="submit" value="Wyslij" />
    <input type="reset" value="Wyczysć" />
</form>
</body>
</html>


autoryzacja.php
Kod
<?php
    session_start();
    // user jest zalogowany
    if (isset($_POST['login'])){
       if (isset($_POST['username']) && ($_POST['username']
          == 'admin') && isset($_POST['password'])
       && ($_POST['password']
          == 'adminlol')) {
          $_SESSION['Autentykacja'] = 1;
       }
       else{
          $_SESSION['Autentykacja'] = 0;
       }
       session_write_close();
       header('Location: tajne.php');
    }
    // user nie jest zalogowany
    if (isset($_GET['logout'])){
       session_destroy();
       header('Location: login.html');
    }
?>


tajne.php
Kod
<?php
    session_start();
?>
<html><head><title>Chroniona strona</title></head>
<body>
<?php
    if (isset($_SESSION['Autentykacja'])
       && ($_SESSION['Autentykacja'] == 1)){
?>
<h2>Chroniona zawartość</h2>
<p>Witaj! Ponieważ jesteś zalogowanym użytkownikem, możesz wyświetlić
    chronioną zawartość strony.</p>
<p>Możesz również się wylogować za pomocą łącza
    <a href="autoryzacja.php?logout">Wyloguj</a>
</p>
<?php
    }
    else{
?>
<h2>Nie jesteś zalogowanym użytkownikiem</h2>
<p>Witaj! Ponieważ nie jesteś zalogowanym użytkownikiem, nie możesz
    wyświetlić chronionej zawartości strony.</p>
<p>Ale możesz się zalogować za pomocą łącza <a href="login.html">Zaloguj</a></p>
<?php
    }
?>
</body>
</html>


Każdy komentarz oraz uwaga mile widziane. Jestem w tych sprawach początkujący, dlatego proszę was o radę. Pjoona biggrin.gif
Shili
W tym wypadku jest to bezpieczne (zakładając, że sesje nie są we współdzielonym folderze na serwerze), bo nie dodajesz nic do bazy (w takim wypadku trzeba by było pozbyć się znaków specjalnych) ani danych nie wyświetlasz na ekranie (strip_tags lub htmlspecialchars).

Tylko jedna taka uwaga - wylogowuj tylko wtedy, kiedy użytkownik jest zalogowany i w przypadku innym niż wysłanie danych przez post. To znaczy dane mogę wysłać, jednocześnie przez post, ustawiając zmienną get o wylogowaniu. Warto byłoby wyświetlić jakiś komunikat. Co prawda może to i sytuacja, która nigdy nie nastąpi, ale może fizycznie nastąpić i w takim wypadku uważam, że warto o nią zadbać.
greenway
Dziękuje za odpowiedź. Jednak nie chce robić następnego tematy, a mam pewne pytanie. Chciałbym zrobić taki malutki system newsów. Chcę, aby po wejściu w PA można było dodawać i edytować newsy. Newsy zapisuje do pliku newsy.php, a szkielet newsa ma następującą postać:

newsy.php
Kod
<div id="colTwo">
     <div class="post">
     <h1>Elo !</h1>
     <p>Taki test</p>
     </div>
     </div>

Chodzi mi o to, aby dopisywać do newsy.php następny taki szkielet, ale z inną treścią. Czy jest takie coś możliwe ? Jeśli tak, mogę prosić o podpowiedź gdzie zajrzeć, albo co wykorzystać. Co prawda wolałbym to zrobić poprzez MySQL, ale wtedy pewnie divy i cała strona mi się rozleci. Pjoona biggrin.gif
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.