Php bezpieczne logowanie

0

Witam, napisałem taki o to kod i nie wiem czy jest bezpieczny. do pliku login.php leci postem login i haslo z formularza, następnie sprawdza czy istnieje takie w bazie jeżeli tak to tworzy sesje $_SESSION['admin'] = true; następnie by przejść do pliku admin.php trzeba mieć tą sesje jeżeli nie istnieje to przerzuca na login.html

**// Plik konfiguracyjny**
<?php
    class base {
        protected $host="localhost";
        protected $db="base";
        protected $user="root";
        protected $pass="root";
        protected $connect;

        public function __construct() {
            $this->connect = new PDO("mysql:host=".$this->host.";dbname=".$this->db,$this->user,$this->pass, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"));
        }
    } 
    
    $base = new base;
?>





**// Plik logowania**
<?php
   class login extends base{
      function access(){

              $this->login = htmlentities($_POST['login']);
              $this->password = htmlentities($_POST['password']);

                $login = $this->connect->prepare('SELECT * FROM user WHERE login=:login AND password=:password');
                   $login->bindParam(':login', $this->login);
                   $login->bindParam(':password', MD5($this->password));
                   $login->execute();
                   $rows = $login->rowCount();
                   $dane = $login->fetch();

                     if($rows == 1){
                         $_SESSION['admin'] = true;
                         session_regenerate_id();
                         header('Location: admin.php');
                     }else{  $_SESSION['wrong'] = true; exit(); login(); }

      }
   }
      $login = new login;  
      $login->access();
?>




**//Plik dostępu**
<?php
   session_start();
   if(!isset($_SESSION['admin'])){ header('Location login.html'); exit(); }
?>
0

Z jakiego frameworka krzystasz?
Co do sesji admina, to stanowczo Mi to odradzano, gdyż nie jest to wystarczająco bezpieczne. Rozumiem że przypisałeś do jakiegoś innego nicku jak 'admin' sesje admina ?

0

nie, nie korzystam z żadnego frameworka i to nie jest żadna nazwa nicku, jeżeli zaloguje się poprawnie to zostaje stworzona sesja $_SESSION['admin'] = true; , później na stronie powiedzmy dane.php aby cokolwiek zrobić wymagana jest sessja $_SESSION['admin'], jeżeli istnieje to można dalej coś tam sobie robić w tym pliku, jeżeli nie istnieje ta sessja przenosi osobe do login.php i chce wiedzieć czy to jest bezpieczne czy da się to jakoś obejść.

0

I nie jest bezpieczne, tak samo jak poniższy przykład też nie do końca jest bezpieczny ale może bardziej praktyczny. Domyślnie session cookie life powinno być ustawione na 0 i sesja wygaśnie po zamknięciu przeglądarki, w tym czasie jednak ktoś niepowołany zanim zamkniesz przeglądarkę może Ci wejść na panel admina jako zalogowany i co zrobisz???

auth.php

<?php

return array(
    'db_host' => 'localhost',
    'db_name' => 'mojabaza',
    'db_user' => 'root',
    'db_passwd' => 'root',
    'hash_method' => 'sha256',
    'hash_key' => 'gj5PxmUt8CAbcnS2',
    'session_key' => 'auth_user',
);

index.php

<?php

class Auth
{
    private $_config;
    private $_pdo;

    public function __construct($config)
    {
        $this->_config = $config;
        session_start();
        $dsn = 'mysql:host=' . $this->_config['db_host'] . ';dbname=' . $this->_config['db_name'];
        $this->_pdo = new PDO($dsn, $this->_config['db_user'], $this->_config['db_passwd']);

    }

    public function hash_password($password)
    {
        return hash_hmac($this->_config['hash_method'], $password, $this->_config['hash_key']);
    }

    public function login($username, $password)
    {
        $stmt = $this->_pdo->prepare('SELECT * FROM users WHERE username = :username AND password = :password');
        $stmt->execute(array(':username' => $username, 'password' => $this->hash_password($password)));
        if ($row = $stmt->fetch(PDO::FETCH_OBJ))
        {
            session_regenerate_id();
            $_SESSION[$this->_config['session_key']] = $row;
            return true;
        }

        return false;
    }

    public function get_user()
    {
        return isset($_SESSION[$this->_config['session_key']]) ? $_SESSION[$this->_config['session_key']] : null;
    }
}

$config = include 'auth.php';
$auth = new Auth($config);

$user = $auth->get_user();
if ($user)
{
    echo '<pre>';
    echo "Juz jestes zalogowany jako uzytkownik:\n\n";
    print_r($user);
    echo '</pre>';

}
else
{

    $username = 'admin';
    $password = 'jakieshaslo';

    $result = $auth->login($username, $password);
    $user = $auth->get_user();
    if ($user)
    {
        echo '<pre>';
        echo "Zostales zalogowany jako uzytkownik:\n\n";
        print_r($user);
        echo '</pre>';
    }
    else
    {
        echo '<pre>';
        echo 'Nie udalo sie zalogowac';
        echo '</pre>';
    }
}

CREATE TABLE  `users` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `email` varchar(254) NOT NULL,
  `username` varchar(32) NOT NULL DEFAULT '',
  `password` varchar(64) NOT NULL,
  `logins` int(10) unsigned NOT NULL DEFAULT '0',
  `last_login` int(10) unsigned DEFAULT NULL,
  `active` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uniq_username` (`username`),
  UNIQUE KEY `uniq_email` (`email`)
) ENGINE=InnoDB;

Przeanalizuj to sobie dokładniej i spróbuj dojść o co tu biega...

0

I nie jest bezpieczne, tak samo jak poniższy przykład też nie do końca jest bezpieczny ale może bardziej praktyczny. Domyślnie session cookie life powinno być ustawione na 0 i sesja wygaśnie po zamknięciu przeglądarki, w tym czasie jednak ktoś niepowołany zanim zamkniesz przeglądarkę może Ci wejść na panel admina jako zalogowany i co zrobisz???
to równie dobrze trzeba będzie postawić ochroniarza przy każdym użytkowniku żeby mu nikt w cookie nie grzebał. Mi chodziło tylko po stronie serwera czy wszystko jest ok a to czy ktoś w bibliotece korzysta ze strony i ktoś go podsłucha czy ktoś będzie grzebał w przeglądarce to już nie moja sprawa. sesja wygaśnie po zamknięciu przeglądarki ? to korzystanie z faceebooka google poczty itp było by tak uciążliwe że ludzie by powyskakiwali z okien gdyby mieli by się logować po 10 razy dziennie to nie system bankowy.

0

To nie jest zabawne.

$_SESSION['admin'] = true;
//i dalej

if(!isset($_SESSION['admin'])){ header('Location login.html'); exit(); }

Po pierwsze, przez Twoją przypadkową pomyłkę, to w tym swoim kodzie gdzieś indziej możesz sobie przypisać do $_SESSION['admin'] właściwie cokolwiek i z powyższego sprawdzenia wynika, że będziesz wtedy zalogowany.

Po drugie, nie masz żadnego sprawdzania ról, zatem na Twój panel admina to się w zasadzie każdy komu się tak uda zalogować może dostać (mając pełne prawa) do Twojego panelu admina a nie tylko tam gdzie może (np. do swojego panelu użytkownika), to co podałem wyżej też ma tą wadę, natomiast do tej klasy Auth można dopisać metodę sprawdzającą role (potrzebne jeszcze dwie tabele: roles oraz user_roles).

Po trzecie, Ta Twoja sesja jest po to żebyś za każdym razem nie musiał przy wejściu na każdą podstronę się logować, sprawdź sobie jeśli nie wierzysz i zamknij przeglądarkę, po czym otwórz ją ponownie i zobacz czy będziesz na podstawie ustawionej sesji zalogowany. Jeśli jest inaczej to sobie sprawdź na ile jest ustawione session_cookie_lifetime.

Po czwarte, jeśli chodzi Ci o coś co się nazywa Persistent Login, to potrzebujesz jeszcze jednej tabeli user_tokens i tam składujesz dane z jakimś tam terminem ważności dajmy na to tydzień, no można by to jeszcze zrealizować w tej samej tabeli users.

Mam Ci tu podrzucić kody frameworka, gdzie na podstawie kodów jest wszystko klarowne i rozpisane w komentarzach?

0

Ciężko będzie zrobić dobrą autoryzację bez żadnego frameworka. Po to powstały, aby usprawnić programistom pracę i robią to dobrze. Do stosowania frameworka zmotywował mnie właśnie drorat1, za co jestem Mu wdzięczny. Ogarnięcie frameworka wymaga czasu, jak i wytrwałości oraz chęci, ale warto, bo później zwróci się to z nawiązką.

0

Myślałem że na tym forum jest jakiś poziom ale najwidoczniej go nie znalazłem !.

Po pierwsze, przez Twoją przypadkową pomyłkę, to w tym swoim kodzie gdzieś indziej możesz sobie przypisać do $_SESSION['admin'] właściwie cokolwiek i z powyższego sprawdzenia wynika, że będziesz wtedy zalogowany.

Możesz mi powiedzieć jaka jest tu moja pomyłka w kodzie? człowieku jeżeli mam dostęp do kodu to równie dobrze mógłbym zrobić drop database albo ktoś inny lol. I jakbyś chciał wiedzieć tak jest na każdym systemie wordpress joomla presta itd też mogę sobie wgrać moduł i zrobić na przykład drop database albo że na admin panel wchodzę bez hasła.

Po drugie [CIACH!] kto ci powiedział że nie ma żadnych ról i w ogóle kto mówi tu o rolach i czy ort! mi są potrzebne??? temat po prostu wyjęty z d**y a jak byś chciał wiedzieć to mogę sobie zrobić $_SESSION['admin'] tylko na stronę admin a $_SESSION['user'] tylko na stronę user bo tyle mi potrzeba na ten projekt zadowolony?

Po trzecie [CIACH!] kto cię prosił o rozwijanie tematu na temat czasu życia sesji?? to jakbyś oddał kartkówkę z matematyki o funkcjach a panie ciebie się pyta a gdzie informacje na temat całek?? jeżeli chciałbym przedłużyć sesje, nie wiedział bym tego to bym cię chyba o to poprosił czyż nie?

Nie!, nie potrzebuje freameworka bo takie rzeczy umiem napisać sobie sam, nie jestem pierwotniakiem jak wy z 1000 freameworków które i tak mają więcej dziur niż w moich skarpetach i te wszystkie wordpressy joomle itd co miesiąc jest jakaś aktualizacja, w tym roku taki freamework i kupa nauki a za rok inny i tak w kółko, a gdyby nagle usunąć wszystkie freameworki ze wszystkich komputerów na planecie ziemia to 99% was programistów by wróciła do poziomu kamienia łupanego bo tyle niepotrzebnie uczyliście się czyjś freameworków i poleceń że już chyba zapomnieliście co to jest programowanie. I ciągle musicie zaglądać do dokumentacji a dlaczego? :O no przecież to nie wasz kod tylko ktoś inny go napisał :O

Ciężko będzie zrobić dobrą autoryzację bez żadnego frameworka?? a tam są nie wiadomo jakie kody pisane przez einsteina że żaden żyjący człowiek nie da rady tego napisać?

Tyle wiesz co zjesz. Pozdrawiam

0
Pijany Terrorysta napisał(a):

temat po prostu wyjęty z d**y a jak byś chciał wiedzieć to mogę sobie zrobić $_SESSION['admin'] tylko na stronę admin a $_SESSION['user'] tylko na stronę user bo tyle mi potrzeba na ten projekt zadowolony?

W takim razie bardzo chciałbym wiedzieć, w jaki sposób zrealizujesz to w oparciu o standardową tabelę użytkowników np. wg. takiego schematu:

CREATE TABLE IF NOT EXISTS `users` (
  `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `email` varchar(254) NOT NULL,
  `username` varchar(32) NOT NULL DEFAULT '',
  `password` varchar(64) NOT NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `uniq_username` (`username`),
  UNIQUE KEY `uniq_email` (`email`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

I na podstawie czego przypiszesz w takim przypadku odpowiednie dane do $_SESSION['admin'] albo $_SESSION['user'] jak tu napisałeś???? Podaj konkretny przykład kodu w PHP to będziemy mogli gadać.

Nie!, nie potrzebuje freameworka bo takie rzeczy umiem napisać sobie sam

W takim razie spróbuj samodzielnie od zera napisać poważny portal społecznościowy to zobaczymy czy będziesz taki mądry. I nie wiem czy masz jakiekolwiek pojęcie na temat z jak dużą odpowiedzialnością to się wiąże i jak dużo jest pracy.

I przestań trolować.

0

Ja troluje? wydaje mi się że nie umiesz czytać ze zrozumieniem.

W takim razie bardzo chciałbym wiedzieć, w jaki sposób zrealizujesz to w oparciu o standardową tabelę użytkowników np. wg. takiego schematu:

CREATE TABLE IF NOT EXISTS users (
id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
email VARCHAR(254) NOT NULL,
username VARCHAR(32) NOT NULL DEFAULT '',
password VARCHAR(64) NOT NULL,
PRIMARY KEY (id),
UNIQUE KEY uniq_username (username),
UNIQUE KEY uniq_email (email)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Ale o czym my mówimy każdy system ma inną budowę bazy, myślisz że przeniosę wordpressa na joomle i będzie system pięknie działać bo tam jest idealny kod stworzony pod dosłownie wszystko(sztuczna inteligencja) ?

I na podstawie czego przypiszesz w takim przypadku odpowiednie dane do $_SESSION['admin'] albo $_SESSION['user'] jak tu napisałeś???? Podaj konkretny przykład kodu w PHP to będziemy mogli gadać.

To nie jest typowy projekt bazowy który pobiera strony z bazy itd ale jeżeli chodzi o logowanie typu admin/user to na szybko tabela wyglądała by tak login|password|type następnie jeżeli login i hasło się zgadają sprawdza typ, jeżeli jest admin to tworzy sesję admin i no i oczywiście trzeba w plikach ustalić że powiedzmy w panelu admina do konfiguracji ma tylko sesja admin a do dodawania artykułów/produktów zwykły użytkownik, oczywiście to mini projekt na szybko ale takie coś w każdym cms jest w zależności od projektu/złożonośc (nie ma jednego rozwiązania) i trzeba będzie stworzyć odpowiednią bazę i strukturę plików, uważasz że do mojego projektu 2 podstrony admin.php user.php to zamało?? nie trzeba z wyrzutnią rakiet iść na gołębie, po co mi jakiś freamework z setkami plików i opcjami konfiguracje na parę podstron, człowieku takie rzeczy się samemu się piszę je nie robię drugiego facebooka czy google. to jakbyś chciał postawić stronę wizytówkę one page na joomli a na wordpressie ogromny portal wsyzstko ma swoje przeznaczenie więc nie wiem po co wyskoczyłeś z czasem sessji typami użytkowników itp nie skapowałeś że to mały skrypt?.

0

Taka struktura jest w praktycznie każdej bazie (no wiadomo dochodzi jeszcze email, data rejestracji i kupę innych rzeczy ale mówimy o najważniejszych)
struktura joomla: tact5_users: name>super user | username>admin | password>tajne też sprawdza login hasło i typ konta.
struktura wordpress: wp_user: user_login > admin | user_password > admin.
Wszędzie tak działa że sprawdza login password i typ konta a następnie tworzy odpowiednią sesje i otwiera odpowiednią stronę i to nie są jakieś moje widzimisię, tylko wiadomo w każdym cms inaczej jest to napisane po swojemu, nie widzę nic złego w moim skrypcie logowania na innych forach też mówili że jest w porządku, znajomi z kilkuletnim doświadczeniem w php też sprawdzali i mówili że ok jedyne co to żebym md5 nie używał bo do złamania jest więc tak też zrobię no i skrypt powinny być bardziej oop.

0

SHA-1 też chyba nie jest zalecane. Robiłem dwie małe aplikacje akurat na Kohanie (mały i lekki framework) i przeglądałem już bardzo dokładnie jak to wszystko jest zrobione. Akurat domyślnie do hashowania haseł jest hash_hmac i SHA-256. W innych rozwiązaniach jest to:

http://php.net/manual/en/function.password-hash.php

0

Odnośnie szyfrowania to mam minimalne pojęcie

SHA-1 też chyba nie jest zalecane.

też słyszałem od doświadczonych żeby nie używać, ale w sumie nie wiem czego używać bo siedzę na mysql i tam mam md5 i SHA-1 na bazach się nie znam więc nie wiem czy tam się dogrywa jakieś moduły z szyfrowaniami czy jak.

0
Pijany Terrorysta napisał(a):

Nie!, nie potrzebuje freameworka bo takie rzeczy umiem napisać sobie sam, nie jestem pierwotniakiem jak wy z 1000 freameworków które i tak mają więcej dziur niż w moich skarpetach i te wszystkie wordpressy joomle itd co miesiąc jest jakaś aktualizacja, w tym roku taki freamework i kupa nauki a za rok inny i tak w kółko, a gdyby nagle usunąć wszystkie freameworki ze wszystkich komputerów na planecie ziemia to 99% was programistów by wróciła do poziomu kamienia łupanego bo tyle niepotrzebnie uczyliście się czyjś freameworków i poleceń że już chyba zapomnieliście co to jest programowanie. I ciągle musicie zaglądać do dokumentacji a dlaczego? :O no przecież to nie wasz kod tylko ktoś inny go napisał :O

Gwoli ścisłości, podejrzewam, że większość programistów na średnim poziomie napisała by taki skrypt z palcem w tyłku, tylko zadaje sobie pytanie po co? dlaczego mam nie korzystać z gotowych rozwiązań sprawdzonych przez spore grono programistów? bo lepiej samemu napisac w imię zasad? imo bezsens. Wordpressy, joomle to nie frameworki więc nie wiem co Ty porównujesz tutaj. No ale spoko, pisz wszystko w czystym php, jak będziesz stawiał średniej wielkości portal i po miesiącu pracy stwierdzisz, że jest tam taki syf, że nie wiadomo co gdzie jest to zaczniesz myśleć o MVC. Możesz wmawiać wszystkim, że utrzymasz porządek, tyle, że nikt w takie bajki nie uwierzy komuś kto nie ma w ogóle doświadczenia.

Ty będziesz pisał crudy i widoki 5h a ja to zrobię w 5 min. Do tego zapewniam cię, że szybkosć działania portalu będzie na podobnym poziomie,

p.s do tworzenia użytkowników można wykorzystać pattern design factory

p.s2 twój przykład klasy base jest imo bez sensu, bo nic nie robi. Wystarczy dane przekazać po przez wstrzykiwanie zależności (DI) do konstruktora jak zostało to pokazane w przykładzie kolegi.

http://stackoverflow.com/questions/2083424/what-is-a-factory-design-pattern-in-php

0

Gwoli ścisłości, podejrzewam, że większość programistów na średnim poziomie napisała by taki skrypt z palcem w tyłku, tylko zadaje sobie pytanie po co?

Właśnie na średnim poziomie, a z waszymi freameworkami nie trzeba mieć żadnego poziomu bo jak debilowi każe się wkleić taki i taki kod i tyle jak klocki lego a przy własnym projekcie trzeba niestety pomyśleć ale najwidoczniej niektórych to przerasta bo bez takiego freameworka żyć nie mogą.

dlaczego mam nie korzystać z gotowych rozwiązań sprawdzonych przez spore grono programistów? bo lepiej samemu napisac w imię zasad?

Tak żeby na przykład zobaczyć jak to wszystko działa a nie jak wy klient piszę od czego jest taki i taki folder albo co to za linijka kodu bo mam problem a wy najpierw lecicie na dokumentacje, fora i dajecie klientowi odpowiedź w ciągu kilku godzin ja mu daje odpowiedź po 1min. i 99% z was nawet nie zna swojego freameworka korzysta tylko z kilku potrzebnych mu plików a reszta go nie obchodzi a jak coś po czasie się rozjedzie to :0 jak to o co chodzi i na formu biegiem a oto pierwsze wasze tematy na forum:

Uwierzytelnianie bez aristana - Laravel 5.2
Skalowalna aplikacja w php/symfony.
Symfony - serwer globalny
Project symfony 3 na symfony 2
Zabezpieczenie formularza Zend Framework 2
Laravel 5 - request is not instantiable

Tak jak mówiłem skąd ludzie mają to wiedzieć skoro nie oni to pisali a później płacz i zgrzytanie zębami bo w połowie projektu ktoś nie wie jak co zrobić.

imo bezsens

imo bezsens to taka droga na skróty i pretensje że ktoś chce napisać apke sam bez freameworków.

Wordpressy, joomle to nie frameworki więc nie wiem co Ty porównujesz tutaj. No ale spoko

Tak tylko też zostały napisane na freameworkach przez takie grono profesjonalistów że co miesiąc jakaś luka wychodzi a fora są zawalone pytaniami jak zrobić moduł ,szablon jak co zmienić itd bo dla 99% ludzi ten piękny kod napisany przez tych cudownych profesjonalistów jest niezrozumiały.

pisz wszystko w czystym php, jak będziesz stawiał średniej wielkości portal i po miesiącu pracy stwierdzisz, że jest tam taki syf, że nie wiadomo co gdzie jest to zaczniesz myśleć o MVC

Przepraszam kolejny pierwotniaku ale czy widziałeś mój cały projekty i wiesz jak piszę projekty że twierdzisz że będzie syf i nie wiadomo gdzie co jest? a podobno to ja troluje. Używam smarty mam osobno oddzielone szablony front end, backend, szablony aplikacji front i back osobno katalog private z danymi osobno z logowaniem , osobno moduły itp więc gdzie tu jakiś syf?? trzeba dodać coś do modułów do front end ok wchodzę do moduły/mój-moduł/front/index.tpl i dodaję :) więc co ma mi niby zająć 5h po pierwsze jak ty to wyliczyłeś? to twoja średnia czasowa reakcji na pytanie klienta?

p.s do tworzenia użytkowników można wykorzystać pattern design factory

nie wiem co to jest i mnie to nie interesuje bo ja mam własny skrypt rejestracji użytkowników.

p.s2 twój przykład klasy base jest imo bez sensu, bo nic nie robi. Wystarczy dane przekazać po przez wstrzykiwanie zależności (DI) do konstruktora jak zostało to pokazane w przykładzie kolegi.

ok mistrzu więc usuń ten kod i spróbuj się połączyć z bazą ok? a odnośnie kolegi to szkoda patrzeć na ten kawałek kodu po pierwsze session_start(); daje się na samej górze żeby w pierwszej kolejność skrypt włączał sesje a po drugi żeby inny programista wiedział że dany plik opiera się na sesji bo w tym skrypcie dopiero po kilku linijkach to widać.
po drugie kod html w php większej amatorszczyzny nie widziałem takie rzeczy daje się do pliku widoku i następnie jeżeli istnieje np zmienna $login_succes to wyświetla w tpl jakieś tam dane, brawo napiszecie kod html w kilkunastu plikach php a później co zmieniacie to ręcznie? po prostu brawo a i tak ten kod jest napisany okropnie u mnie jest przejrzyście żeby inny programista mógł szybko przeczytać a w tym teks jest dziwnie porozrzucany i mało przejrzysty. A nawet co ja będę tłumaczył ludziom którym nawet nie chce się myśleć.

0

To przestań tu wyjeżdżać z obraźliwymi tekstami określając innych (bo widzę że nie tylko mnie to dotyczy) mianem pierwotniaków. Ale akurat Twoje podejście jest jak najbardziej zdrowe. Też mam takie wrażenie, że dużo programistów, co wykorzystują frameworki to by chcieli bazować np. na gotowcach z gitguba itd, po ponad roku doświadczeń z Kohaną dochodzę do tych samych wniosków co i Ty. To samo dotyczyłoby np. Laravela czy tam Symfony, bez gruntownej znajomości tego co się dzieje w kodzie już teraz wiem, że nie ma co się zabierać za żaden projekt.

Natomiast co do mojego kodu który tu podałem i twojej opinii, dałem to tylko jako prosty przykład a te pre w kodzie jest tylko po to, żeby łatwo można było sobie przejrzeć co się zapisuje do sesji w postaci ładnie sformatowanego tekstu i nic poza tym.

Nie masz pojęcia o frameworkach, więc mi tu nie graj kogoś kto pozjadał wszystkie rozumy. Wielu programistów bez problemu pojedzie po Kohanie czy Laravelu, wychwalając tylko to swoje Symfony i świata poza tym nie widzą, tak jak ty możesz nie widzieć świata poza swoimi rozwiązaniami. Przedstaw publicznie te kody i wystaw pod ocenę, to zobaczysz ilu programistów po Tobie pojedzie. Jest w PHP tych frameworków dużo i co każdy inny to inne podejście i zapewniam Cię że po każdym rozwiązaniu można pojechać.

Co do bezpieczeństwa i tego MD5 czy tam SHA1 (i tego czasu życia sesji o którym wspomniałeś zarzucając mi pewne rzeczy), również wydaje mi się że nie masz o niczym pojęcia. W PHP 5.4 nie masz password_hash (jest dopiero od 5.5), możesz więc wykorzystać hash_hmac i w oparciu o tą swoją sól oraz jeden z hasów które są dostępne czyli SHA-224, SHA-256, SHA-384, SHA-512 ale i pod to też musisz przygotować odpowiednią długość pola varchar w bazie.

Co do czasu życia sesji, no to ustaw sobie session_cookie_lifetime np. na miesiąc i się zaloguj na laptopie kogoś innego a później na tym swoim, ktoś na tym komputerze na którym się wcześniej logowałeś może Ci przez takie coś łatwo namieszać w tym Twoim super serwisie a Ty nawet nie będziesz miał szans go wylogować. Dlatego do persistent login stosuje się jeszcze np. tabelę user_tokens i to tam się zapisuje dane i jeszcze odpowiednie terminy ważności. Z rolami to trochę inna sprawa, bo może być ich więcej niż tylko admin, user, po to więc te dodatkowe tabele roles oraz user_roles, więm że te role mogą być tylko w tabeli users jako dodatkowe pole ale nie zawsze jest to rozwiązanie.

Nie przemawia do mnie to co napisałeś że możesz to sobie stosować w tych swoich prostych skryptach, będziesz chciał to potem rozbudowywać to pewne rzeczy mogą nawet przeszkadzać. Patrząc na kody frameworków to można mieć nieodparte wrażenie, że zostało to stworzone przez doświadczonych i mądrych ludzi którzy przewidzieli wiele różnych możliwości. Zapoznaj się najpierw dokładnie z frameworkami a potem spróbuj napisać swój kod w oparciu o jeden z nich, to założę się że już nie wrócisz do swoich genialnych rozwiązań.

0

Natomiast co do mojego kodu który tu podałem i twojej opinii, dałem to tylko jako prosty przykład a te pre w kodzie jest tylko po to, żeby łatwo można było sobie przejrzeć co się zapisuje do sesji w postaci ładnie sformatowanego tekstu i nic poza tym.

Nawet takich przykładów się nie podaje bo to wprowadza ludzi w błąd.

Nie masz pojęcia o frameworkach, więc mi tu nie graj kogoś kto pozjadał wszystkie rozumy. Wielu programistów bez problemu pojedzie po Kohanie czy Laravelu, wychwalając tylko to swoje Symfony i świata poza tym nie widzą, tak jak ty możesz nie widzieć świata poza swoimi rozwiązaniami. Przedstaw publicznie te kody i wystaw pod ocenę, to zobaczysz ilu programistów po Tobie pojedzie. Jest w PHP tych frameworków dużo i co każdy inny to inne podejście i zapewniam Cię że po każdym rozwiązaniu można pojechać.

Rozmawiając z tobą twierdzę że ty nie masz pojęcia o budowaniu samemu całej struktury bo opierasz się na czyiś rozwiązaniach (ktoś za ciebie odwalił całą robotę).

Co do czasu życia sesji, no to ustaw sobie session_cookie_lifetime np. na miesiąc i się zaloguj na laptopie kogoś innego a później na tym swoim, ktoś na tym komputerze na którym się wcześniej logowałeś może Ci przez takie coś łatwo namieszać w tym Twoim super serwisie a Ty nawet nie będziesz miał szans go wylogować. Dlatego do persistent login stosuje się jeszcze np. tabelę user_tokens i to tam się zapisuje dane i jeszcze odpowiednie terminy ważności. Z rolami to trochę inna sprawa, bo może być ich więcej niż tylko admin, user, po to więc te dodatkowe tabele roles oraz user_roles, więm że te role mogą być tylko w tabeli users jako dodatkowe pole ale nie zawsze jest to rozwiązanie.

A niby jak może mi namieszać w moim serwisie? i znów się muszę powtarzać czy widziałeś moją bazę że twierdzisz że tam nie będzie długości życia sesji i innych rzeczy? powiedzmy że user może dodawać tylko artykuły, okazało się jednak że oszalał i dodaje spam, w moim panelu w zakładce user daje mu user z 1 na 0 i jest zablokowany.

Nie przemawia do mnie to co napisałeś że możesz to sobie stosować w tych swoich prostych skryptach, będziesz chciał to potem rozbudowywać to pewne rzeczy mogą nawet przeszkadzać. Patrząc na kody frameworków to można mieć nieodparte wrażenie, że zostało to stworzone przez doświadczonych i mądrych ludzi którzy przewidzieli wiele różnych możliwości. Zapoznaj się najpierw dokładnie z frameworkami a potem spróbuj napisać swój kod w oparciu o jeden z nich, to założę się że już nie wrócisz do swoich genialnych rozwiązań.

Ale ja po pierwsze nie tworze freameworka pod wszystko tylko cms pod dodawanie podstron i modułów upiększające te podstrony jak i strony admina więc nie wiem po co te pretensję i niby co mi ma przeszkadzać w rozbudowie.

zostało to stworzone przez doświadczonych i mądrych ludzi którzy przewidzieli wiele różnych możliwości

tak dokładnie zostało to stworzone przez mądrych ludzi dla tych którzy sami nie mogą trochę pomyśleć i nie umieją czytać ze zrozumieniem.

Zapoznaj się najpierw dokładnie z frameworkami a potem spróbuj napisać swój kod w oparciu o jeden z nich, to założę się że już nie wrócisz do swoich genialnych rozwiązań.

Aha czyli twierdzisz że w wordpresie, joomli, prestashop i innych cms-ach to są nędzne rozwiązania?? bo ja już wcześniej mówiłem że właśnie opieram się na ich systemie i ich strukturze plików/bazy tylko piszę własne klasy moduły, szablony itp.

0

Znam na wylot KO3 i trochę Laravel, jak również tylko pobieżnie Symfony. Ale w szczególności przeleciałem przez wszystkie kody Kohany, celem dokładnego zapoznania się z nimi. A potem napisałem trochę własnych modułów, których ten framework w standardzie nie ma. Stosunkowo szybko można dojść do wniosku, że zaprojektować cokolwiek (np. własny framework) od zera nie jest tak prosto jakby się wydawało a te frameworki były rozwijane przez lata. Dobrze wiem jak działa KO3, dobrze również wiem jak działa mechanizm logowania, sesji i wiele innych rzeczy. Oczywiście pewnie masz rację, nie wiem, może ja patrzę tylko przez pryzmat frameworków?

0

Ok rozumiem ty znasz bo się interesujesz ale ile tak naprawdę osób wie do czego służy większość życzę oferowanych przez te freameworki.

Stosunkowo szybko można dojść do wniosku, że zaprojektować cokolwiek (np. własny framework) od zera nie jest tak prosto jakby się wydawało a te frameworki były rozwijane przez lata.

oczywiście takie rzeczy wychodzą podczas tworzenia projektu i dla tego nie ma jednego systemu cms tylko kilka bo jeden jest pod małe strony a inny pod wielkie portale i takie rzeczy omawia się od razu ze zleceniodawca podczas tworzenia projektu no sorry jeżeli ktoś chce mały sklep i robi mu się to na preście a później chce z tego ewoluować do postaci allegro to przecież nie będzie się całej presty zmieniało i narzekało dla czego z niej nie da się zrobić allegro tylko postawi się nowy cms pod taki projekt logiczne.

Oczywiście pewnie masz rację, nie wiem, może ja patrzę tylko przez pryzmat frameworków?

Wiesz każdy narzeka na cms że w każdym coś mu się nie podoba, ja jestem inny i zamiast narzekać robię swój pod swoje strony będę dodawał szablony i moduły jak mi jest wygodnie a nie jak ktoś mi narzuca. I druga kwestia to też bezpieczeństwo, ja jestem do przodu bo nawet jeżeli mam tam jakąś lukę to ktoś musiał by spędzić kupę czasu żeby poszperać na mojej stronie (typu a może uda mi się odczytać jego pliki tpl a niech to używa <FilesMatch ".tpl$"> Deny from all, tp może dostane się na stronę strona.pl/admin bez logowania kurczę też nie działa itd) a w innych cms-ach kod jest podany na tacy więc są takie akcję że następnego dnia ktoś się już włamuje a we własnym cms nie jest to już takie proste bo nie znasz struktury bazy ani katalogów nie wiesz co może dany użytkownik więc musisz strzelać, ja miałem do czynienia z 1 sklepem napisanym w php z przed kilku lat i nikt się do niego nie włamał choć z logów pokazywało że już kilkadziesiąt osób próbowało a dlaczego? bo właśnie nie wiedzą gdzie co jest a luk jest pełno i na tak zwanego farta to robili ale nie udało się a byś miał powiedzmy wordpressa albo joomle z 2 lat wstecz to 5min i po serwisie bo na forach piszę co i jak, jaki kod przesłać albo pod jaki adres wejść żeby się .

0

Halo, "pierwotniaki", dyskutujcie kulturalnie; Jak nie potraficie spokojnie wymieniać się argumentami to odejdźcie od komputerów i ochłońcie; W przeciwnym razie wątek poleci do kosza i tylko zmarnujecie czas na bzdurną bijatykę.

0

Security by obscurity, tsaaaa ;-) - Patryk27

To nie jest tak że jeżeli jest jakaś luka to nich sobie będzie mi to leży, każdy plik jest od razu sprawdzany prze zemnie i sprawdzam czy można tak czy inaczej to obejść czy wykonam sql injection itp jak na razie sprawdzałem ja i kilka osób i nie naleziono żadnych luk. Widzę że nie znaleziono żadnych argumentów więc trzeba się do czegoś przyp... w końcu wróg freameworków i gotowych rozwiązań jest waszym wrogiem.

0

Właśnie na średnim poziomie, a z waszymi freameworkami nie trzeba mieć żadnego poziomu bo jak debilowi każe się wkleić taki i taki kod i tyle jak klocki lego a przy własnym projekcie trzeba niestety pomyśleć ale najwidoczniej niektórych to przerasta bo bez takiego freameworka żyć nie mogą.

A przy FW wklejasz jak klocki :D lol śmiechłem

Tak żeby na przykład zobaczyć jak to wszystko działa a nie jak wy klient piszę od czego jest taki i taki folder albo co to za linijka kodu bo mam problem a wy najpierw lecicie na dokumentacje, fora i dajecie klientowi odpowiedź w ciągu kilku godzin ja mu daje odpowiedź po 1min. i 99% z was nawet nie zna swojego freameworka korzysta tylko z kilku potrzebnych mu plików a reszta go nie obchodzi a jak coś po czasie się rozjedzie to :0 jak to o co chodzi i na formu biegiem a oto pierwsze wasze tematy na forum:

A co klienta obchodzi kod skoro on się na tym nie zna? Mówisz, że klient pyta ciebie dlaczego masz folder src a nie source? heh beka :D Zapewniam cię, że programiści piszący w FW potrafią dać komuś odpowiedź w ciągu 15 sekund.

Uwierzytelnianie bez aristana - Laravel 5.2
Skalowalna aplikacja w php/symfony.
Symfony - serwer globalny
Project symfony 3 na symfony 2
Zabezpieczenie formularza Zend Framework 2
Laravel 5 - request is not instantiable

I o czym to świadczy? może o tym, że w programowaniu nie zawsze wszystko idzie tak jak się chce? mam ci wyciągnąć tematy o podłączeniu do bazy danych w php? Na co tym razem zwalisz?

Tak jak mówiłem skąd ludzie mają to wiedzieć skoro nie oni to pisali a później płacz i zgrzytanie zębami bo w połowie projektu ktoś nie wie jak co zrobić.

Być może z dokumentacji która jest zazwyczaj tak obszerna, że większość ludzi i tak jej nie czyta od deski do deski?

imo bezsens to taka droga na skróty i pretensje że ktoś chce napisać apke sam bez freameworków.

Na skróty bo ktoś oszczędza czas przy projektowaniu modułów nie bawiąc się w dostęp do bazy czy routing? brawo dla ciebie :D

Tak tylko też zostały napisane na freameworkach przez takie grono profesjonalistów że co miesiąc jakaś luka wychodzi a fora są zawalone pytaniami jak zrobić moduł ,szablon jak co zmienić itd bo dla 99% ludzi ten piękny kod napisany przez tych cudownych profesjonalistów jest niezrozumiały.

Wordpress/joomla/presta nie zostały napisane w żadnym Frameworku :D lol, twoja wiedza jest porażająca w tym temacie :D

Przepraszam kolejny pierwotniaku ale czy widziałeś mój cały projekty i wiesz jak piszę projekty że twierdzisz że będzie syf i nie wiadomo gdzie co jest? a podobno to ja troluje. Używam smarty mam osobno oddzielone szablony front end, backend, szablony aplikacji front i back osobno katalog private z danymi osobno z logowaniem , osobno moduły itp więc gdzie tu jakiś syf?? trzeba dodać coś do modułów do front end ok wchodzę do moduły/mój-moduł/front/index.tpl i dodaję :) więc co ma mi niby zająć 5h po pierwsze jak ty to wyliczyłeś? to twoja średnia czasowa reakcji na pytanie klienta?

Wystarczy mi, że napisałeś o smarty, zatem nie czytam dalej, bo nie ma sensu :)

nie wiem co to jest i mnie to nie interesuje bo ja mam własny skrypt rejestracji użytkowników.

Właśnie potwierdziłeś swoją niewiedzę w projektowaniu ;) punkt dla mnie!

ok mistrzu więc usuń ten kod i spróbuj się połączyć z bazą ok? A nawet co ja będę tłumaczył ludziom którym nawet nie chce się myśleć

Ja nie pisałem o całkowitym usunięciu połączęnia, poza brakiem podstawowej wiedzy nie potrafisz również czytać ze zrozumieniem. Dlatego nie warto z tobą polemizować. Wiem, że próbujesz trollować, ale wychodzisz na ignoranta ;)

pochwal się swoim projektem, zobaczymy ten wspaniały kod i strukturę :D

0

A przy FW wklejasz jak klocki :D lol śmiechłem

Widać że masz niski poziom inteligencji jeżeli takie rzeczy cię bawią.

A co klienta obchodzi kod skoro on się na tym nie zna? Mówisz, że klient pyta ciebie dlaczego masz folder src a nie source? heh beka :D Zapewniam cię, że programiści piszący w FW potrafią dać komuś odpowiedź w ciągu 15 sekund.

Na przykład to że inny programista pisze mu moduły i chce wiedzieć np co ma być w jakim katalogu albo jak wygląda struktura ale najwidoczniej twoje projekty umrą razem z tobą.

I o czym to świadczy? może o tym, że w programowaniu nie zawsze wszystko idzie tak jak się chce?

O tym że takie freameworki i tak nic nie dają bo ludzie nie umieją ich obsługiwać.

mam ci wyciągnąć tematy o podłączeniu do bazy danych w php? Na co tym razem zwalisz?

nie, nie trzeba bo zanim wejdziesz na dokumentację napisaną przez kogoś i skopiujesz czyjś kod to trochę zajmie, nie trać czasu pozerze, widzę twoja pewność siebie i ignorancja nie zna granic, nie doceniasz przeciwnika i myślisz że jesteś pępkiem świata.

Być może z dokumentacji która jest zazwyczaj tak obszerna, że większość ludzi i tak jej nie czyta od deski do deski?

to szkoda bo przeczysz samemu sobie

heh beka :D Zapewniam cię, że programiści piszący w FW potrafią dać komuś odpowiedź w ciągu 15 sekund.
15sekund choć nie zna całej dokumentacji ale wie wszystko tak?? typowy student co myśli że pozjadał wszystkie rozumy.

Na skróty bo ktoś oszczędza czas przy projektowaniu modułów nie bawiąc się w dostęp do bazy czy routing? brawo dla ciebie

tak oszczędzisz godzine na napisani modułu a przez kolejny rok po 1h w miesiącu będziesz zaglądał w dokumentację co i jak edytować.

Wordpress/joomla/presta nie zostały napisane w żadnym Frameworku :D lol, twoja wiedza jest porażająca w tym temacie

nie zostały?? tylko ktoś musiał stworzyć całą strukturę

Wystarczy mi, że napisałeś o smarty, zatem nie czytam dalej, bo nie ma sensu

nie przejmuj się rozumiem że smarty przewyższają twoje możliwości intelektualne.

nie wiem co to jest i mnie to nie interesuje bo ja mam własny skrypt rejestracji użytkowników. Właśnie potwierdziłeś swoją niewiedzę w projektowaniu ;) punkt dla mnie!

Tak nie interesuje mnie nazewnictwo we freameworkach bo mam własne, punkt dla mnie.

Ja nie pisałem o całkowitym usunięciu połączęnia, poza brakiem podstawowej wiedzy nie potrafisz również czytać ze zrozumieniem. Dlatego nie warto z tobą polemizować. Wiem, że próbujesz trollować, ale wychodzisz na ignoranta

Napisałeś że ta klasa jest niepotrzebna tylko że w tej klasie było połączenie więc ja nie umiem czytać ze zrozumieniem? jeżeli ci chodziło że to nie musi być w klasie było napisać 'to nie musi być w klasie' a nie pisać ta klasa jest niepotrzebna.

Wiem, że próbujesz trollować, ale wychodzisz na ignoranta ;) pochwal się swoim projektem, zobaczymy ten wspaniały kod i strukturę :D

To właśnie wy pokazujecie jakimi jesteście ludźmi nieprzychylnymi do innych, jak faszyści ktoś nie myśli jak wy to do kasacji i zniszczyć go, nie znacie człowieka, nie wiecie kim on jest ale od razu myślicie że jesteście lepsi od niego, jak kiedyś skończą się wam studenckie promocję na piwo i życie u rodziców to inaczej będziecie rozmawiać. A co do mojego projektu nigdy go nie zobaczycie bo to jest na użytek własny ale co wy możecie o tym wiedzieć jak większość waszego kodu jest wygenerowane przez jakiś freamework.

1

Proponuję zamknać wątek, gdyż trollowanie tego Pana powyżej jest na poziomie robaka podglebowego...

0

Ja się postanowiłem nie wtrącać ale generalnie tak:

możecie o tym wiedzieć jak większość waszego kodu jest wygenerowane przez jakiś freamework

Wytłumacz nam jak tworzony jest kod assemblera w oparciu o programy napisane w języku C/C++, które przecież są niczym innym jak tylko frameworkiem na ASM'a. Jeżeli nie znasz assemblera, a piszesz w C/C++ czy nawet w PHP to przeczysz sam sobie, bo korzystasz przecież z czegoś co i tak jest w gruncie rzeczy ASM'em, a idąc dalej... porządnym frameworkiem do ASM'a ;)

Znasz więc framework nie znając podstaw, na których się opiera ;)

Popatrz na to z tego punktu widzenia, a być może zrozumiesz, że Twoje usilne niekorzystanie z frameworków jest... no trochę bez sensu po prostu.

0

Odniosę się jeszcze do tego:

$login->execute();
$rows = $login->rowCount();
$dane = $login->fetch();
 
if($rows == 1){
     session_regenerate_id();
     $_SESSION['admin'] = true;
     header('Location: admin.php');
} else{  $_SESSION['wrong'] = true; exit(); login(); }

Po co w ogóle to sprawdzanie rowCount(). Przecież można równie dobrze:

if ($row = $login->fetch())
{
     $_SESSION['admin'] = true;
     session_regenerate_id(); 
     header('Location: admin.php');     
     exit;
}

Kolejna sprawa to przekierowanie na inną podstronę:

header('Location: admin.php'); 
die(); //albo exit

http://php.net/manual/en/function.die.php
http://php.net/manual/en/function.exit.php

Poczytaj sobie lepiej więcej na ten temat, bo zdaje się że samo hearder('Location: url') nie wystarczy.
http://www.devchunks.com/php/php-header-redirect-dont-forget-to-die/
http://stackoverflow.com/questions/8665985/php-utilizing-exit-or-die-after-headerlocation

0

Z tymi frameworkami to trochę inna bajka. Ponieważ architektura każdego z nich jest dość ściśle ustalona (no chociaż tutaj można by się zastanawiać, bo wiadomo co się dzieje, jak się przejrzy np. Laravel 4.2 vs. 5.x, to samo dotyczyło także Kohany 2.x vs. 3.x a nawet 3.2 vs 3.3), to i każdy kto to ogarnia może potem siąść do takiego projektu i szybciej to ogarnąć niż kod jakiegoś autorskiego frameworka. Dlatego mają zastosowanie tam gdzie ktoś np. odejdzie z pracy a przyjdzie nowy i są tworzone i utrzymywane aplikacje przez wielu programistów.

Natomiast autorskie rozwiązania mogą być też stosowane zarówno przez samodzielnych programistów (którzy mają pełną dowolność, dajmy na to freelancerzy), jak również i przez poważniejsze firmy. Z biznesowego punktu widzenia ma to tą zaletę, że np. konkurencja tak łatwo nie odbierze roboty i można to łatwo zrozumieć.

Niestety opracowanie własnego i co bardziej istotne dobrego rozwiązania wymaga bardzo dużej wiedzy ale do tego można dojść dopiero przeglądając też istniejące FW, przede wszystkim Symfony albo Laravel, choć i inne (no ale widzę jakieś kopiowanie np. założeń z Railsów czy też inspiracje na innych frameworkach, np. można wziąć pod lupę FuelPHP, wiele podobieństw do Kohany), jak również należałoby mieć dobre rozeznanie w opiniach innych.

Oczywiście nie ma tu co toczyć wojny, ja natomiast spojrzałem na to szerzej i może autor to jakoś tak odebrał i stąd te pewne nieporozumienia.

1 użytkowników online, w tym zalogowanych: 0, gości: 1