PHP Помощь класса безопасности пользователя? - PullRequest
0 голосов
/ 07 февраля 2011

Я новичок в разработке классов на PHP, однако я все еще довольно озадачен концепцией сессий.

Вопрос 1. Можно ли изменять сеансы с помощью манипуляций клиента? Если нет, могу ли я установить статические сеансы и использовать их без проверки?

Вопрос 2. Как мне управлять своими учетными записями?

Я использую SALT, однако, код генерируется при регистрации и вставляется в БД, где он используется для ссылки на логин. Будем весьма благодарны за любые исправления с объяснениями, а также за любые изменения, которые клиент изменяет.

class user {
    private $username   = '';   
    private $password   = '';
    private $salt       = '';
    public  $prefix     = 'rhs_';

    function __construct () {
        $this->username = '';
        $this->password = '';
        $this->salt     = '';

        session_start();
    }

    public function login ($username, $password) {
        $mysql_conn = Database::obtain();
        $username = $mysql_conn->escape($username);
        $sql = 'SELECT `password`, `salt`, `first_name`, `last_name`, `permission` FROM `accounts` WHERE `username`="'.$username.'"';
        $row = $mysql_conn->query_first($sql);

        if(!empty($row['password'])) {
            $encrypted = md5(md5($mysql_conn->escape($password)).$row['salt']);
            if ($encrypted == $row['password']) {
                $_SESSION[$this->prefix.'username']     = $username;
                $_SESSION[$this->prefix.'password']     = $password;
                $_SESSION[$this->prefix.'name']         = $row['first_name'].' '.$row['last_name'];
                $_SESSION[$this->prefix.'permission']   = $row['permission'];
                header('location: ?page=cpanel');
            } else {
                return false;
            }
        } else {
            return false;
        }
    }

Ответы [ 2 ]

3 голосов
/ 07 февраля 2011

Сессия - это файл на вашем сервере, в который можно записывать и сохранять переменные. Каждый файл сеанса соответствует одному активному посетителю вашего сайта. PHP автоматически удаляет файлы, которые не были прочитаны или записаны в течение ~ 24 минут.

Сессии связаны с пользователями с помощью куки. Когда пользователь заходит на вашу страницу, где вы используете сеансы, PHP проверяет, был ли файл cookie со специальным именем отправлен с запросом, содержащим его идентификатор сеанса.

  • Если cookie существует, этот идентификатор сообщает PHP, какой файл сеанса открывать и читать для заполнения $_SESSION.
  • Если файл cookie не существует, новый идентификатор создается и отправляется пользователю в виде файла cookie, а также создается новый пустой файл сеанса.

Поскольку сеансы являются файлами на вашем сервере, ваши пользователи не могут их изменять.

0 голосов
/ 07 февраля 2011

Я новичок в разработке классов на PHP

Даже если вы опытный программист, сделать небезопасную систему аутентификации просто, как пирог.Вместо этого вы должны использовать OpenID (или такие системы, как, например, Facebook Connect).У них есть эксперты по безопасности в качестве сотрудников.Я создал небольшую библиотеку, которую вы можете использовать для этого .Вы можете увидеть демо на http://westerveld.name/php-openid//

Можно ли изменять сеансы с помощью манипуляций клиента?Если нет, я могу установить статические сеансы и использовать их без проверки?

Это не может быть изменено клиентами, но сеанс пользователя может быть украден хакерами.Вам необходимо предотвратить фиксацию сеанса => session_regenerate_id

Как мне управлять учетными записями пользователей?

Вывероятно, не следует этого делать, потому что сделанное вами изменение является БОЛЬШИМ.Но ниже приведены несколько простых советов:

  • Вы должны использовать phpass , чтобы сохранить свой пароль в базе данных.Потому что я заметил, что вы не используете растяжение ключа .Вы должны выполнить тестирование, и если вы можете быстро генерировать хэши, то вы определенно не можете надежно защитить свои пароли.Bcrypt очень хорош для хеширования (используется phpass. Вам следует использовать эту библиотеку), потому что это доказательство закона Мура.
  • Защита ваших пользователей от CSRF .
  • Вы должны прочитать OWASP top 10 .

Я также создал небольшую библиотеку аутентификации просто для удовольствия.И я думаю, что это довольно безопасно, хотя, например, logout.php все еще уязвим для CSRF , хотя это не очень большая проблема (и исправить это очень легко).

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