PHP скрипт безопасности входа в систему - PullRequest
0 голосов
/ 26 июня 2010

Я просто хотел, чтобы вы, ребята, запустили мой скрипт входа в систему, чтобы увидеть, есть ли другие меры безопасности, которые я должен предпринять.

Я знаю, что мне нужно переместить мои константы БД в файл конфигурации, но помимо этого и некоторой обработки ошибок, какие еще проверки мне нужно добавить, чтобы убедиться, что этот скрипт безопасен?

<?php
    ob_start();
    session_start();
    require 'phpDatabaseClass.php';

    define('DBhost', 'localhost');
    define('DBusername', 'root');
    define('DBpassword', 'root');
    define('DBname', 'campbellCustomCoatings');


    if(isset($_POST['submit']))
    {       
        if((!empty($_POST['username'])) && (!empty($_POST['password'])))
        {
            //creates the db object and the constructor automatically creates the db connection
             $db = new phpDatabaseClass();

            //sets the username and password to variables and sanitizes them
            $username = $_POST['username'];
            $password = $_POST['password'];

            //sets the username to only alphanumeric characters
            $username = preg_replace('/[^A-Za-z0-9]/', '', $_POST['username']);

            //if the username and password are valid
            if($db->validateLogin($username, $password))
            {
                $_SESSION['loggedIn'] = $username;

                header('Location: uploadImages.php');
            }
        }        
    }
?>

и мой phpDatabaseClass

<?php
/********************************************
* Created by Tom Caflisch
* 
* Class to connect and query a mysql database 
*
*********************************************/

class phpDatabaseClass {

    private $mysqli;

    /****************************
    * Constructor function which makes the connection to the database
    ****************************/
    public function __construct()
    {
        $this->mysqli = new mysqli(DBhost, DBusername, DBpassword, DBname);
    }
/****************************
    * Function which checks to see if the username and password validate
    *
    * $username is the username that the user entered in the form
    * $password is the password that the user entered in the form
    *
    ****************************/
    public function validateLogin($username, $password)
    {

        //if magic quotes are turned on, remove the slashes
        if(get_magic_quotes_gpc())
        {
            $username = stripslashes($username);
            $password = stripslashes($password);
        }

        $username = $this->mysqli->real_escape_string($username);
        $password = $this->mysqli->real_escape_string($password);

        $password = md5($password);

        //the query
        $sql = 'select * from users
                where username = \''.$username.'\'
                and password = \''.$password.'\'';

        $results = $this->mysqli->query($sql);

        //if something is wrong with the query
        if($results === false)
        {
            echo 'Whoa you trying to hack this thing?';
        }
        else 
        {
            echo $results->num_rows;
            if(($results->num_rows) == 1)
            {

                while($row = $results->fetch_row())
                {
                    //if the username and password match return true else return false
                    if($username == $row[1] && $password == $row[2])
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }   
            }
        }

        //return false;
    }


}
?>

Ответы [ 2 ]

3 голосов
/ 26 июня 2010

Я бы не стал использовать MD5 для хэширования паролей, подумайте над тем, чтобы использовать что-то еще, например, sha1 или гидромассажную ванну, и, возможно, также запишите пароли.

Я считаю эту ссылку очень полезной: http://www.richardlord.net/blog/php-password-security она описывает, как подсолить пароли и т. Д.

2 голосов
/ 05 сентября 2011

Кроме того, зачем оповещать пользователя о том, что ваш скрипт обнаружил потенциальную уязвимость? Просто действуйте так, как будто это неверный логин. Чем больше времени они тратят на вещи, о которых вы уже думали, тем меньше им приходится тратить на вещи, которых у вас нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...