Используйте MySQL ПАРОЛЬ () в Laravel Eloquent - PullRequest
0 голосов
/ 19 января 2020

я кодирую регистрацию для старой игры, эта игра использует ПАРОЛЬ () для шифрования. Есть ли способ использовать эту функцию в Laravel Eloquent?

текущая форма:

 public function registerPost(Request $request)
    {
        $request->validate([
            'login' => 'required|min:4|unique:account',
            'email' => 'required|email|unique:account',
            'password' => 'required|min:8',
            'repeat_password' => 'required|same:password',
        ], [], [
            'login' => 'Username',
            'password' => 'Password',
            'email' => 'E-Mail',
            'repeat_password' => 'Repeat password'
        ]);

        $data = $request->all();

        if (Account::create($data)) {
            return Redirect::to("/registration")->withErrors(['success' => 'Account created']);
        }

        return Redirect::to("/registration")->withErrors(['message' => 'Account creation failed']);
    }

Ответы [ 2 ]

0 голосов
/ 19 января 2020

Я рекомендую НЕ использовать функцию MySQL ПАРОЛЬ (). Прочитайте документацию . В нем говорится:

ПАРОЛЬ () используется системой аутентификации на MySQL Сервере; Вы не должны использовать его в своих собственных приложениях.

Эта функция официально устарела в MySQL 5.7.6, а MySQL 8.0.11, функция ПАРОЛЬ () была удалена . Вы не можете перейти на текущую версию MySQL, если зависите от функции PASSWORD ().

Плохо использовать любую функцию в SQL, чтобы иметь sh пароли, потому что если вы делаете это, пароли в виде открытого текста (то есть до хэширования) будут появляться в ваших журналах запросов и двоичных журналах на основе операторов. Это слабая сторона безопасности вашего приложения, поэтому любой аудитор потребует от вас изменения.

Вместо этого лучший способ хеширования пароля в PHP - это использовать password_ha sh () , когда хранение пароля и password_verify () , когда при входе в систему необходимо проверить ввод по сохраненному паролю.

Если вы используете Laravel, изучите использование класса Ha sh : https://laravel.com/docs/6.x/hashing


Что касается вашего комментария к другому ответу:

, как я уже сказал, это для старой игры, и мы не можем изменить, как пароль зашифрован. в противном случае я бы c использовал бы метод ha sh.

Вам нужно исправить это или выйти из игры. Это небезопасно.

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

  1. Добавить новый столбец в таблицу учетных записей для хранения нового формата пароля-ха sh.
  2. Когда пользователь входит в систему, проверьте ввод пользователя по старому паролю ha sh, как обычно. То есть, sh пользовательский ввод и сравнение результата с тем, что хранится в базе данных.
  3. Если ha sh ввода пользователя совпадает с ha sh, тогда ОБНОВИТЕ базу данных: сохраните новый формат ha sh в столбце нового пароля и назначьте NULL старому паролю. column.
  4. Измените код входа в систему, чтобы он выбирал оба столбца, и если столбец старого пароля имеет значение NULL, введите sh пользовательский ввод с новым методом и сравните его со столбцом нового пароля.

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

Вполне возможно, что найдутся какие-то посторонние пользователи, которые никогда не будут входить в систему неделями или месяцами. Не жди их. Когда все обычные пользователи преобразовали свои пароли, просто удалите старые пароли. Пользователи бродяги должны будут восстановить пароль, если они когда-нибудь вернутся.

0 голосов
/ 19 января 2020

Вы должны сделать запрос вручную, чтобы достичь своей цели. Как показано ниже

Account::statement(DB::raw('insert query here'));

Почему бы не использовать метод ha sh для шифрования? Он прост в использовании и очень надежен.

Step1 : импортируйте этот код ниже

use Illuminate\Support\Facades\Hash;

Step2 , затем вы можете использовать ha sh метод по этому

'password' => Hash::make($data['password']),

см. документы здесь источник

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