Forum Programowanie c++, delphi Ostatnio aktywny: Nigdy
Nie zalogowany [Zaloguj ]
Pokaż koniec
Wersja do druku | Zapisz | Dodaj do Ulubionych   Wyślij nową wiadomość Sonda:
Autor: Temat: [php/mysql] System Logowania
haptor
Junior Member
*


Avatar


Postów: 13
Zarejestrowano: 24-1-2006
Miasto: Poznan
Offline

Nastrój: Not your f*(@# biznes^^

[*] wysłano w 25-1-2006 o godz. 09:01 Odpowiedz cytując
[php/mysql] System Logowania



Tak wiec uznalem, za stosowane opublikowanie kodu systemu logowania, poniewaz liczna grupa osob pisala do mnie abym im w tym pomogl....

1. Formularz logowania i samo logowanie:

plik: admin/index.php
url: index.php?job=index
Kod:

<?php

//sprawdzamy czy haslo i login nie zostalo przeslane
if(isset($_POST['login']) && isset($_POST['haslo'])) {
$login = $_POST['login']; //w $login mamy login :P
$haslo = $_POST['haslo']; //w $haslo mamy haslo :P

mysql_connect("localhost", "root", "root") or die("Nie mozna polaczyc"); //laczymy z baza
mysql_select_db("db"); //wybieramy baze

//pobieramy wszystkie dane z tabeli admins gdzie kolumna user jest rowna $login a pass rowna $haslo
$wyn= mysql_query("SELECT * FROM admins WHERE user='$login' and pass='$haslo'");
$num = mysql_num_rows($wyn); //pobieramy liczbe wynikow

//jezeli jest wieksza od 0 a wiec znaleziono taki login i pass
if($num > 0 ){
$_SESSION['admin'] = $login; //nadajemy wartosc zmiennej SESSION
}

mysql_close; //konczymy prace z mysql'em
}

echo "Panel Administratora<br><br>"; // powitalny tekst;P

//jezeli $_SESSION['admin'] ma wartosc to....
if (isset($_SESSION['admin'])){

//tekst powitalny
echo "Witaj ".$_SESSION['admin']."! Mamy dzisiaj: ".date('d.m.Y G:i')."<br> W kazdej podstronie znajdziesz stosowny opis ze wskazowkami. Wrazie problemow pisac na gg: 7770408";
//wylogowanie (pozniej to opisze)
echo "<br><b><a href='index.php?destroy=true'>Wyloguj</a></b><br><br><hr><br><br>";

/*
tutaj menu
dla administratora
mozna dodac
*/

} else { //jezeli $_SESSION['admin'] jest puste

if(isset($login)){ //sprawdzamy czy $login ma wartosc
echo "<br><font class='error'>Zalogowanie niemozliwe...<br><br></font>";
} else { //jezeli nie ma zmiennych z posta komunikat
echo "<br><font class='error'>Uzytkownik niezalogowany...<br><br></font>";
}


//formularz
echo "<form method='post' action='/index.php?job=index'>";
echo "<table>";
echo "<tr><td>Login:</td>";
echo "<td><input type='text' name='login'></td></tr>";
echo "<tr><td>Haslo:</td>";
echo "<td><input type='password' name='haslo'></td></tr>";
echo "<tr><td colspan='2' algin='center'>";
echo "<input type='submit' value='Logowanie'></td></tr>";
echo "</table></form>";
}

?>


2. Opis zmiennych get i jak dzialaja + wylogowanie:

plik: index.php
url: index.php
Kod:

<?php

//tresc strony


if ($_GET['job']) {

//czy zmienna SESSION jest pus
if (isset($_SESSION['admin'])){

//czy plik istnieje
if (file_exists('admin/'.$job.'.php')){
include('admin/'.$job.'.php'); //includujemy taki plik
} else {
print "<br><font class='error'>Strona o podanym adresie nie istnieje</font>";
} } elseif($_GET['job']=='index') {
include('admin/index.php');
} else {
print "<br><font class='error'>Nie masz uprawnien do ogladania tej strony!</font>";
}
} elseif ($_GET['destroy']){
if (isset($_SESSION['admin'])){
session_destroy(); //niszczymy sesje
echo "<br><font class='error'>Wylogowano poprawnie! Dziekuje! </font>";
} else {
print "<br><font class='error'>Nie masz uprawnien do wykonania tej czynnosci</font>";
} }

?>


teraz jezeli chcemy zrobic zeby jakas strona byla dostepna tylko dla zalogowanych uzytkonikow robimy:

Kod:

<?php

if (isset($_SESSION['admin'])){

//jezeli zalogowany

} else {

//jezeli niezalogowany

}

?>


No i teraz zapytanie do bazy mysql

Kod:


CREATE TABLE `admins` (
`user` text NOT NULL,
`pass` text NOT NULL
) TYPE=MyISAM;



Jest to najprostszy chyba system logowania... nie jest on jeszcze zabezpieczony przed atakami sql injecton .... jezeli ktos ma jakiej dodatkowe pomysly, albo jest nie jasny kod prosze pisac....

Jestem otwarty na kazde propozycje i modyfikacje(i na wspolprace:P)
Pokaż profil użytkownika Pokaż wszystkie wiadomości użytkownika Użytkownik U2U Ten użytkownik posiada komunikator Gadu-Gadu
MitS
Top Coder
***


Avatar


Postów: 384
Zarejestrowano: 1-1-2006
Miasto: Olsztyn
Offline

Nastrój: Uhahany

[*] wysłano w 25-1-2006 o godz. 11:37 Odpowiedz cytując


Bardzo przydatne ...
Skrzystam z tego :)




Pokaż profil użytkownika E-Mail Użytkownika Pokaż wszystkie wiadomości użytkownika Użytkownik U2U MitS's Aim Ten użytkownik posiada komunikator Gadu-Gadu
Zed
Newbie
*




Postów:
Zarejestrowano: 1-1-1970
Offline


[*] wysłano w 25-1-2006 o godz. 14:35 Odpowiedz cytując


Fajnie, ze bedziesz tego uzywal [;
Po pierwsze, 'use of undefined constant mysql_close' ;P zapomniales dodac (), czyli wowalanie funkcji [;
Kod:
mysql_close();

Po drugie, nie trzeba znac nawet loginu, aby sie zalogowac ( masz buga, SQL injection sie to chyba zwie).
Wystarczy jako login podac : tamburyno
a jako haslo :
drugietamburyno' OR 'ZLO'='ZLO, co w efekcie doprowadzi do powstania zapytania :
Kod:

SELECT * FROM admins WHERE user='tamburyno' AND pass='drugieramburyno' OR 'ZLO'='ZLO'

(przypominam, to w wyniku podstawienia do zmiennej $_POST['haslo']
wartosci drugietamburyno' OR 'ZLO'='ZLO , ' -ostani aposrtof jest dodany przez zapytanie, jesli tego nie kumasz, przecwicz.
Na przyszlosc zalecam na poczatku skryptu glownego:
Kod:

$kpost=array_keys($_POST);
$kget=array_keys($_GET);
$cpost=count($kpost);
cget=count($kget);
for($i=0;$i<$cpost;$i++)
{
$_POST[$kpost[$i]]=mysql_escape_string(htmlspecialchars($_POST[$kpost[$i]]));
}
for($i=0;$i<$cget,$i++)
{
$_GET[$kget[$i]]=mysql_escape_string(htmlspecialchars($_GET[$kget[$i]]));
}

ew zamiast mysql_escape_string(); addslashes(); ;P
Przefiltruje wszystko [; ( jesli mamy jakies wyjatki, mozna to przeciez przerobic , ah i nie sprawdzilem, czy na pewno jest ok, pisze tak o na szybko ;P ).




Pokaż profil użytkownika Pokaż wszystkie wiadomości użytkownika Użytkownik U2U
haptor
Junior Member
*


Avatar


Postów: 13
Zarejestrowano: 24-1-2006
Miasto: Poznan
Offline

Nastrój: Not your f*(@# biznes^^

[*] wysłano w 25-1-2006 o godz. 14:41 Odpowiedz cytując


No wiem wiem, wlasnie zamiescilem informacje ze nie jest zabezpieczony przed tego rodzajem ataku^^
Pokaż profil użytkownika Pokaż wszystkie wiadomości użytkownika Użytkownik U2U Ten użytkownik posiada komunikator Gadu-Gadu
faxe
Coder
***


Avatar


Postów: 130
Zarejestrowano: 17-12-2005
Miasto: Gdynia
Offline

Nastrój: czarna rozpacz

[*] wysłano w 26-1-2006 o godz. 10:23 Odpowiedz cytując


Zed - ten kod jest przekombinowany - teraz, gdy serwer automatycznie dodaje backslasze przed niebezpiecznymi znakami (a było tak przez więksość serii PHP 4 domyślnie ustawione) to zawartość $_GET i $_POST będzie zafałszowana dodatkowymi backslaszami.

Oto rozwiązanie uniwersalne:

Kod:

<?php

if( !magic_quotes_gpc() )
{
foreach( $_POST as $k => $v )
$_POST[ $k ] = addslashes( $v );
foreach( $_GET as $k => $v )
$_GET[ $k ] = addslashes( $v );
}

?>


W ten sposób, jeśli serwer nie zrobił tego za nas, to skrypt eskejpnie niebezpieczne znaki w danych pochodzących od juzera. Oczywiście, gdy ciągniemy dane z _COOKIE, które dziedzinnie łatwo się fałszuje, to również nalezy dodać do kodu.




Pokaż profil użytkownika Pokaż wszystkie wiadomości użytkownika Użytkownik U2U faxe's Aim Ten użytkownik posiada komunikator Gadu-Gadu faxe's Yahoo
Zed
Newbie
*




Postów:
Zarejestrowano: 1-1-1970
Offline


[*] wysłano w 29-1-2006 o godz. 22:33 Odpowiedz cytując


Mhm, moze i przekombinowany, ale ... ;>
Oczywiscie masz na mysli funkcje get_magic_quotes_gpc() ;P
Dzieki, sam se updateowalem jedna klase.




Pokaż profil użytkownika Pokaż wszystkie wiadomości użytkownika Użytkownik U2U
Wyślij nową wiadomość Sonda:


Pokaż początek

Sitemap
Copyright © 2005-2007 by coding-portal.com
Programowaniedla każdego. Programowanie w c++, java, delphi, pascal, perl oraz innych językach. Tworzenie stron w html, xhtml, php z użyciem mysql, css oraz ich pozycjonowanie. Zapraszamy do udziału w życiu naszego forum!
[zapytań: 15]
[PHP: 93.6% - SQL: 6.4%]