Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [php] Zabezpieczanie panelu admina
krzysiek_raven
post
Post #1





Grupa: Zarejestrowani
Postów: 86
Pomógł: 0
Dołączył: 28.09.2007

Ostrzeżenie: (0%)
-----


Witam. Jestem nowy na tym forum. Niedawno zacząłem uczyć sie php i im głębiej w to wchodze tym większe problemy napotykam:P
Zrobiłem prosty system artykułów i komentarzy do nich i panel do zarządznia tym systemem. Panel znajduje sie w oddzielnym folderze i składa sie z kilku plików .php. Chciałbym zabezpieczyć jakoś pliki w tym folderze albo najlepiej cały folder wraz z zawartością. Znalazłem już kilka rozwiązań np. coś takiego jak tu http://www.webdiary.pl/technologie+art.id+217.htm ale mój panel składa sie z kilku plików i zabezpieczanie każdego pliku z osobna oznaczało by, przy przejściu na podstrone, konieczność ponownego podania hasła:/ Oznacza to że trzeba tak zrobić panel aby wszystko zawierało się np. w stronie index.php? Czy może da rade jakoś zabezpieczyć cały folder z zawartością?
Link do stronki: http://www.testyphpsql.yoyo.pl/index.php
Link do panelu: http://www.testyphpsql.yoyo.pl/admin_panel/
Go to the top of the page
+Quote Post
kossa
post
Post #2





Grupa: Zarejestrowani
Postów: 1 165
Pomógł: 9
Dołączył: 9.04.2002
Skąd: Toruń

Ostrzeżenie: (0%)
-----


Na sam początek zacznij od logowania opartego na sesjach - session" title="Zobacz w manualu PHP" target="_manual. W każdym pliku sprawdzaj czy wartość sesji jest OK, jeśli tak to wyświetlaj plik, jeśli nie to zrób przekierowanie na stronę logowania.

Łukasz
Go to the top of the page
+Quote Post
krzysiek_raven
post
Post #3





Grupa: Zarejestrowani
Postów: 86
Pomógł: 0
Dołączył: 28.09.2007

Ostrzeżenie: (0%)
-----


Ok, dzieki. Spróbuje wykombinować coś z tymi sesjami. A może da rade iść na łatwiznę i jakoś dać hasło na cały folder?(IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
TomASS
post
Post #4





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

Ostrzeżenie: (0%)
-----


Hasło na cały katalog to przy pomocy pliku .htaccess.

Zrób tak jak kolega kossa radzi - sesje, proste jak .... strzyżenie psa (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Nie należy jednak zapomnieć o bezpieczeństwu sessji
Go to the top of the page
+Quote Post
krzysiek_raven
post
Post #5





Grupa: Zarejestrowani
Postów: 86
Pomógł: 0
Dołączył: 28.09.2007

Ostrzeżenie: (0%)
-----


Poczytałem troche już o sesjach i chodzi w tym mniej więcej o to że: pierwszą strone zabezpieczam hasłem i po poprawnym wpisaniu hasła otwieram sesje i tworze identyfikator, tak? A na pozostałych stronach sprawdzam czy sesja jest rozpoczęta i czy identyfikator jest prwidłowy, jeśli jest to można sie poruszac po stronach, a jeśli nie to daje linka do strony głównej z hasłem. A dla bezpieczeństwa ten identyfikator przekazuje sie w cookie (o którym też jeszcze nic nie wiem:P), czy o to w tym chodzi?
Go to the top of the page
+Quote Post
mike
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


Tak.
Teraz musisz to ogarnąć w praktyce (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
krzysiek_raven
post
Post #7





Grupa: Zarejestrowani
Postów: 86
Pomógł: 0
Dołączył: 28.09.2007

Ostrzeżenie: (0%)
-----


Czy takie coś powinno wystarczyć, aby przeciętnemu użytkownikowi nie udało sie nic namieszać w panelu administracjnym?

plik login.php
  1. <?php
  2.  
  3. // ---- LOGIN i HASŁO ----
  4. $login = "admin";
  5. $haslo = "f39bfe1e6901e9cc87ca44e435f5671b";
  6. // -----------------------
  7.  
  8. function formularz()
  9. {
  10.  echo '<FORM ACTION="login.php" METHOD="post">
  11.  Wpisz login i hasło<br />
  12.  Login: <INPUT TYPE="tekst" NAME="log"><br />
  13.  Hasło: <INPUT TYPE="tekst" NAME="has"><br />
  14.  <input type="submit" value="zaloguj">
  15. </FORM>';
  16. }
  17. function sprawdz($l, $h, $login, $haslo)
  18. {
  19.  if ($l == $login && md5($h) == $haslo){
  20. return TRUE;
  21.  }
  22.  else return FALSE;
  23. }
  24.  
  25.  
  26. // -- MAIN --
  27.  
  28. $l = $_POST['log'];
  29. $h = $_POST['has'];
  30.  
  31. if (sprawdz($l, $h, $login, $haslo)){
  32.  
  33.  // -- obsługa sesji --
  34.  
  35.  if (!isset($_SESSION['id'])){
  36. $_SESSION['id'] = $login;
  37. header("Location: index.php" . SID);
  38.  }
  39.  
  40. }
  41. else if ($l == TRUE || $h == TRUE){
  42.  echo('Dane niepoprawne - spróbuj jeszcze raz<br>');
  43.  formularz();
  44. }
  45. else formularz();
  46.  
  47. ?>


plik index.php i inne pliki panelu
  1. <?php
  2.  
  3.  if (!isset($_SESSION["id"])){
  4. header("Location: login.php" . SID);
  5. exit();
  6.  }
  7.  else{
  8. echo ('strona główna<br><br>');
  9. echo('<a href="logout.php">Wyloguj</a>');
  10.  }
  11.  
  12. ?>


plik logout.php
  1. <?php
  2.  
  3.  echo "Użytkownik " . $_SESSION["id"];
  4.  echo " został wylogowany.";
  5.  
  6. ?>


Nie używałem cookies bo jeszcze dokładnie nie wiem jak.
Go to the top of the page
+Quote Post
marcio
post
Post #8





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


mam ten sam problem i sesje robie prawie tak samo jak ty ale gdy sie loguje to musze porownac login i haslo wpisane przez user'a z tym co jest w bazie??Bo mi sie zdaje ze tak jesli tak to jak mam je porownac o tak
Kod
$zapytanie = ("select * from shout where login='".$user_login."' and haslo='".sha1($user_pass)."'");
$zrob = mysql_query($zapytanie, $db) or die ('Polaczenie nie powiodlo sie');

if(mysql_num_rows($zrob) > 0) {

     echo ('Zalogowano');
     $_SESSION['user']=$user_login;
}

else {
     echo('Logowanie nie powiodlo sie');
  }
if($_SESSION['user']) {

     mysql_close($db);
     header("Location: user.php");
}

else {

     mysql_close($db);
     header("Location:nieuser.php");
}

to jak mam porownac dane z bazy tymi wpisanymi w formularzu?
cos takiego
if($user_login == $login && $user_pass == sha1($haslo)) {
//tu reszta kodu??
}

Ten post edytował marcio 28.09.2007, 20:53:52
Go to the top of the page
+Quote Post
krzysiek_raven
post
Post #9





Grupa: Zarejestrowani
Postów: 86
Pomógł: 0
Dołączył: 28.09.2007

Ostrzeżenie: (0%)
-----


Hasło w bazie jest zakodowane? Jeśli tak to po wyciągnięciu go z bazy w zakodowanej postaci można chyba porównać w ten sposób
  1. <?php
  2. $wynik = mysql_fetch_array($zrob, MYSQL_BOTH);
  3.  
  4. if ($user_login == $wynik['nazwa_kolumny_z_loginem'] && sha1($user_pass) == $wynik['nazwa_kolumny_z_haslem']) {
  5.  echo 'cos tam';
  6.  exit;
  7.  }
  8. ?>


Nie wiem czy dobrze zrozumiałem o co biega, ale coś takiego mi sie nasunęło;)

Ten post edytował krzysiek_raven 28.09.2007, 21:41:30
Go to the top of the page
+Quote Post
marcio
post
Post #10





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


zrobilem identycznie tylko ze najpierw podalem zmienna z bazy a potem porownalem z ta z forma czyli zrobilem na odwrot ale chyba tez jest dobrze

Kod
<?php if($zrob) {

while($dane = mysql_fetch_assoc($zrob)) {

  if($zrob['login'] == $user_login && $zrob['haslo'] == sha1($user_pass)) {

     echo ('Zalogowano');
     $_SESSION['user'] = $user_login;
     $_SESSION['pass'] = $user_pass;
   }
}
}
?>


Ten post edytował marcio 28.09.2007, 21:58:24
Go to the top of the page
+Quote Post
Grabarz
post
Post #11





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 12.11.2006

Ostrzeżenie: (0%)
-----


Cytat(marcio @ 28.09.2007, 22:57:05 ) *
<?php if($zrob) {

while($dane = mysql_fetch_assoc($zrob)) {

if($zrob['login'] == $user_login && $zrob['haslo'] == sha1($user_pass)) {

echo ('Zalogowano');
$_SESSION['user'] = $user_login;
$_SESSION['pass'] = $user_pass;
}
}
}
?>


coś pokręciłeś. jeżeli już to

while($dane = mysql_fetch_assoc($zrob)) {

if($dane['login'] == $user_login && $dane['haslo'] == sha1($user_pass)) {

echo ('Zalogowano');
$_SESSION['user'] = $user_login;
$_SESSION['pass'] = $user_pass;
}


I ja mam taką cichą nadzieję, że jak podajecie w zapytaniu SQL'a " WHER `login` = '$login_z_formularza' "
to linijke wcześniej stoi $login_z_formularza = addslashes($login_z_formularza);
Inaczej mozesz sobie pisac kod PHP, na sesjach z hashowanie w SHA1, a i tak SQL-injection da sie zrobić...
Go to the top of the page
+Quote Post
krzysiek_raven
post
Post #12





Grupa: Zarejestrowani
Postów: 86
Pomógł: 0
Dołączył: 28.09.2007

Ostrzeżenie: (0%)
-----


Mam jeszcze jeden problem z tym zabezpieczeniem. Jak wpisuje adres http://www.testyphpsql.yoyo.pl/admin_panel/ to pokazuje mi że strona nie istnieje a do linku zostaje doczepione coś takiego
/login.phpPHPSESSID=f56dd27e5eca9821e0b44a485429380d. Główny plik w tym katalogu to index.php i gdy nie ma sesji to powinien przenieść do login.php i niby przenosi ale z tą końcówką w linku. O co chodzi? Czasami jest wszystko ok, a czasem sie to pojawia.

Ten post edytował krzysiek_raven 29.09.2007, 09:34:54
Go to the top of the page
+Quote Post
tiraeth
post
Post #13





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Ale w porządku robi. Przenosi do login.php. Jako dodatkowy parametr dodaje identyfikator sesji, który jest tworzony nawet, gdy użytkownik nie jest zalogowany (sesja uruchamia się przy wywołaniu funkcji session_start).

PHPSESSID jest dodawany do adresu tylko wtedy, gdy przeglądarka ma wyłączone cookies (ang. ciasteczka) lub, gdy konfiguracja php.ini zawiera wyłączone zapisywanie sesji do cookie.
Go to the top of the page
+Quote Post
marcio
post
Post #14





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Grabarz dzieki ale pisalem na szybko i bylo pozno wiec mi sie pokrecilo wielkie dzieki (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) a co do addslashes to one i tak nic nie pomoze jak ktos bedzie chcial zrobic sql injection to moze tylko uchrobnic przed sript kiddies ale ktos kto sie na tym zna to to objedzie do tego sie uzywa mysql_escape_real_string (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
Grabarz
post
Post #15





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 12.11.2006

Ostrzeżenie: (0%)
-----


Też prawda:]
Ale ja dodatkowo sprawdzam funkcją ctype_alpha() - czy podany ciąg jest wyłącznie aklfabetyczny. (ew. wyrażeniami regularnymi - czy są TYLKO cyfry i litery - bez spacji, i innych znaków w loginie)

A co do problemu:

Jak user nie jest zalogowany to go przenosi do login.php
I przy okazji dokleja identyfikator SID:

<?php
session_start();
if (!isset($_SESSION["id"])){
header("Location: login.php" . SID);
exit();
} else {
echo ('strona główna<br><br>');
echo('<a href="logout.php">Wyloguj</a>');
}
?>


Popraw ta linię na header("Location: login.php?" . SID);

I już się nie będzie rypało. Jak wywołujesz plik *php, to parametr jest po "?" więc:
login.php?PHPSID=686868cośtam.
Go to the top of the page
+Quote Post
marcio
post
Post #16





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


a jaka jest roznica jak ja zrobie bez SID??
Go to the top of the page
+Quote Post
-Gość-
post
Post #17





Goście







Utwórz w katalogu z panelem administracyjny plik authpack.php , z taką zawartością:
  1. <?php
  2. $auth_haslo="jakieś hasło"; // tu hasło
  3. $auth_cookie_nazwa="admin_panel_user_data"; // nazwa cookie
  4. $auth_cookie_wartosc=md5($auth_haslo.date("dmY")); // zawartość cookie
  5.  
  6. if($_COOKIE[$auth_cookie_nazwa] != $auth_cookie_wartosc) { // sprawdza czy cookie jest ustawione
  7.  if(isSet($_POST['haslo'])) {
  8. if($_POST['haslo']==$auth_haslo) {
  9.  setcookie($auth_cookie_nazwa,$auth_cookie_wartosc); // wysyła cookie
  10. } else {
  11.  echo"<html>\n<head>\n<meta name=\"robots\" value=\"noindex\">
  12. <title>Nieprawidłowe hasło</title>\n</head>\n<body>\n<center>\nNieprawidłowe hasło<br>
  13. [<a href=\"".basename($_SERVER['PHP_SELF'])."\">Spróbój ponownie</a>]\n</center>\n</body>\n</html>";
  14.  exit; // blokuje dostęp
  15. }
  16.  } else {
  17. echo"<html>\n<head>\n<meta name=\"robots\" value=\"noindex\">
  18. <title>Podaj hasło</title>\n<body>\n<form method=\"post\">\n<center>
  19. Hasło: <input name=\"haslo\"><input type=\"submit\" value=\"OK\">
  20. </center>\n</form>\n</body>\n</html>";
  21. exit; // blokuje dostęp
  22.  }
  23. }
  24. ?>


A potem w plikach panelu administracyjnego umieść taki kod:
  1. <?php
  2. require("authpack.php");
  3. ?>
Go to the top of the page
+Quote Post
jarekjr
post
Post #18





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 13.10.2008

Ostrzeżenie: (0%)
-----


Witam mam podobną rzecz do zrobienia i mam jedno pytanko odnosnie sesji:
Kod
<?php
  session_start();

  echo '<h1>DLA ZOLOGOWANYCH</h1>';

  // sprawdzenie zmiennej sesji

  if(isset($_SESSION['prawid_uzyt']))
  {
    echo '<p>Użytkownik zalogowany jako '.$_SESSION['prawid_uzyt'].'</p>';
    echo '<p>tu wyswietla sie komunikat  dla zarejestrowanych</p>';
  }
  else
  {
    echo '<p>Użytkownik niezalogowany.</p>';
    echo '<p>Tylko zalogowani użytkownicy mogą oglądać tę stronę.</p>';
  }
    

?>

znalzłem gdzies taki skrypt odnosnie sesji uwierzytelniania, logowania itp... ale mam takie bardzo glupie pytanie i pewnie bedziecie mieli niezały ubaw ale trudno (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) .
w którym miejscu tego skryptu umieścić poprostu strone?! zeby nie bylo napisu "tu wyswietla sie komunikat dla zarejestrowanych " tylko było widac strone od znacznika <html> do znacznika </html>. Prosze was o odpowiedz i nie smiejcie sie za bardzo (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
tiraeth
post
Post #19





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Przed znacznikiem <html> wstaw:
  1. <?php session_start();
  2. if ( !isset($_SESSION['prawid_uzyt']) ) header("Location: logowanie.php");
  3. ?>

Pod tym wrzuć normalnie stronę. Każdego niezalogowanego przekieruje z automatu do pliku logowanie.php, gdzie możesz np. umieścić formularz logowania.
Go to the top of the page
+Quote Post
jarekjr
post
Post #20





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 13.10.2008

Ostrzeżenie: (0%)
-----


Jeszcze jakby mi ktos wyjasnił o co chodzi z takim warningiem to był bym bardzo dźwieczny (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) :
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\wamp\www\sesje\tylko_czlonkowie.php:3) in C:\wamp\www\sesje\tylko_czlonkowie.php on line 3
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 9.06.2026 - 10:57