• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Opinia o skrypcie logowania

Object Storage Arubacloud
0 głosów
215 wizyt
pytanie zadane 30 maja 2017 w PHP przez mordimer Mądrala (5,720 p.)
edycja 1 czerwca 2017 przez mordimer

Witam prosze o opinie na temat skryptu logowania ... jak oceniacie jego bezpieczeństwo jako tylko i wyłącznie dostęp do pewnych danych na stronie przez jednego użytkownika powiedzmy admina bez ról itd ... Tylko nie bijcie :]

//Auth.php

<?php
class Auth {

    public function __construct() {
        $db = Db::getInstance();
        $this->_dbh = $db->getConnection();
    }

    public function getLogin($user, $pass) {

        if ((!empty($user)) && (!empty($pass))) {

            $sth = $this->_dbh->prepare('SELECT * FROM users WHERE user = :user');
            $sth->bindParam(':user', $user, PDO::PARAM_STR);
            $sth->execute();
            $result = $sth->fetch();
            if (password_verify($pass, $result['pass'])) {
                session_regenerate_id();
                $_SESSION['is_login'] = true;
                $_SESSION['user_ip'] = $_SERVER['REMOTE_ADDR'];
                $_SESSION['user_data'] = $_SERVER['HTTP_USER_AGENT'];

            } else {
                echo 'nie poprawne dane błąd!';
            }

        } 

    }


    public function is_login() {
        if (isset($_SESSION['is_login']) && isset($_SESSION['is_login'])===true && isset($_SESSION['user_ip']) && isset($_SESSION['user_data'])) {

            if ($_SERVER['REMOTE_ADDR'] === $_SESSION['user_ip'] && $_SERVER['HTTP_USER_AGENT'] === $_SESSION['user_data']) {
                session_regenerate_id();
                // echo session_id().'<br>';
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }

}
?>

//Db.php

<?php 

class Db
{
    private $_connection;
    private static $_instance; //The single instance
    private $_host = 'localhost';
    private $_port = 8080;
    private $_username = 'root';
    private $_password = '';
    private $_database = 'testmilion';
    /*
    Get an instance of the Database
    @return Instance
    */
    public static function getInstance()
    {
        if (!self::$_instance) { // If no instance then make one
            self::$_instance = new self();
        }
        return self::$_instance;
    }
    // Constructor
    private function __construct()
    {
        try {
            $this->_connection  = new PDO("mysql:host=$this->_host;dbname=$this->_database", $this->_username, $this->_password);
            $this->_connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $this->_connection->setAttribute( PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC );
            $this->_connection->query('SET CHARACTER SET utf8');
            $this->_connection->query('SET NAMES utf8');
            /*** echo a message saying we have connected ***/
            // echo 'Connected to database';
        } catch (PDOException $e) {
            $e->getMessage();
            die('<h1 style="color:red">Bład-przepraszmy za niedogodności </h1>');
        }
    }
    // Magic method clone is empty to prevent duplication of connection
    private function __clone()
    {
    }
    // Get mysql pdo connection
    public function getConnection()
    {
        return $this->_connection;
    }
}

 ?>

//index.php

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
    </head>
    <body>
        <?php
        session_start();
       
        require_once 'Db.php';
        require_once 'Auth.php';
        $auth = new Auth;
        if ((isset($_POST['user'])) && (isset($_POST['pass']))) {
            $auth->getLogin($_POST['user'], $_POST['pass']);
        }


        if ($auth::is_login()===true) {
        echo 'zalogowany!!!!!!!!!!!!!!!!';
        }else{
        echo 'nie zalogowany';
        }
        ?>
        <div class="container-fluid ligh-bg2 table-1">
            <div class="container table-cell height-100">
                <div id="loginbox"  class="mainbox col-lg-4 col-lg-offset-4 col-md-6 col-md-offset-3 col-sm-6 col-sm-offset-3 pd-zero">
                    <div class="panel panel-info " >
                        <div class="panel-heading">
                            <div class="panel-title">Panel logowania</div>
                        </div>
                        <div style="padding-top:30px" class="panel-body" >
                            <form id="loginform" class="form-horizontal" role="form" method="post">
                                <div style="margin-bottom: 25px" class="input-group">
                                    <span class="input-group-addon"><i class="glyphicon glyphicon-user"></i></span>
                                    <input id="login-username" type="text" class="form-control" name="user" value="" placeholder="username or email">
                                </div>
                                <div style="margin-bottom: 25px" class="input-group">
                                    <span class="input-group-addon"><i class="glyphicon glyphicon-lock"></i></span>
                                    <input id="login-password" type="password" class="form-control" name="pass" placeholder="password">
                                </div>
                                <div style="margin-top:10px" class="form-group">
                                    <!-- Button -->
                                    <div class="col-sm-12 controls">
                                        <input type="submit" class="blok-link line-height-20" value="zaloguj">
                                    </div>
                                </div>
                            </form>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <a class="blok-link" href="?action=logout" style="line-height: 100px">WYLOGUJ</a>
        <?php
        if (isset($_GET['action'])=='logout') {
        session_unset();
        session_destroy();
        }
        ?>
        
    </body>
</html>

w bazie wiadomo jest prosta tabela z kolumnami user i pass w postaci bcrypt

1
komentarz 30 maja 2017 przez kubaapk Nałogowiec (44,270 p.)
Nie znam się na PHPie, ale popracuj nad nazwami metod, bo w pierwszej chwili myślałem, że getLogin() zwraca login, a nie odpowiada za logowanie. ( ͡° ͜ʖ ͡°) Zwłaszcza, że jest metodą klasy Auth.
komentarz 30 maja 2017 przez mordimer Mądrala (5,720 p.)
To jakbyś ją nazwał poprostu "login" ?
komentarz 30 maja 2017 przez OfftheCode Gaduła (4,050 p.)
kubaapk ma rację, uważaj czasem z nazwami zmiennych gdyż przykładowo właśnie gettery i settery mają już pewne przyjęte funkcjonalności, że tak to ujmę.
komentarz 30 maja 2017 przez mordimer Mądrala (5,720 p.)
Ok dzięki wezmę to pod uwagę :]

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 257 wizyt
0 głosów
1 odpowiedź 425 wizyt
pytanie zadane 11 kwietnia 2018 w PHP przez niezalogowany
0 głosów
1 odpowiedź 98 wizyt
pytanie zadane 28 listopada 2023 w Bezpieczeństwo, hacking przez Pedro90 Nowicjusz (120 p.)

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...