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

Вы можете map использовать функцию int для каждой подстроки или использовать понимание списка :

>>> file = '8743-12083-15'
>>> list(map(int, file.split('-')))
[8743, 12083, 15]
>>> [int(d) for d in file.split('-')]
[8743, 12083, 15]

В приведенном выше вызове list не требуется, если только вы не работаете с Python 3.x. (В Python 2.x map возвращает список, в Python 3.x он возвращает генератор.)

Также возможно непосредственное присвоение трем переменным (в этом случае выражение генератора вместо составления списка сделаю):

>>> xval, yval, zval = (int(d) for d in file.split('-'))
>>> xval, yval, zval
(8743, 12083, 15)

168
задан Scott Arciszewski 15 February 2016 в 08:23
поделиться

4 ответа

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

28
ответ дан 23 November 2019 в 20:55
поделиться

использование:

url in q.queue

который возвращает True, если URL-адрес находится в очереди

специалисты по безопасности теперь (2017 г.) рекомендуют добавлять « перец » к (автоматически) солёным хешам паролей.

Я рекомендую простой простой класс, который надежно реализует этот шаблон: Netsilik / PepperedPasswords ( github ).
Он поставляется с лицензией MIT, поэтому вы можете использовать его, как хотите, даже в частных проектах.

Пример кода с использованием Netsilik / PepperedPasswords :

<?php
use Netsilik/Lib/PepperedPasswords;

// Some long, random, binary string, encoded as hexadecimal; stored in your configuration (NOT in your Database, as that would defeat the entire purpose of the pepper).
$config['pepper'] = hex2bin('012345679ABCDEF012345679ABCDEF012345679ABCDEF012345679ABCDEF');

$hasher = new PepperedPasswords($config['pepper']);

// $hash is what you would store in your database
$hash = $hasher->hash($_POST['password']);

// $hash would be the $hash (above) stored in your database for this user
$checked = $hasher->verify($_POST['password'], $hash);
if ($checked) {
    echo 'password correct';
} else {
    echo 'wrong credentials';
}


Стандартная библиотека OLD

Обратите внимание : вам это больше не нужно! Это здесь только для исторических целей.

Взгляните на: Портативный фреймворк для хеширования паролей PHP : phpass и убедитесь, что вы используете алгоритм CRYPT_BLOWFISH , если все возможно.

Пример кода с использованием phpass (v0.2):

<?php
require('PasswordHash.php');

$pwdHasher = new PasswordHash(8, FALSE);

// $hash is what you would store in your database
$hash = $pwdHasher->HashPassword( $password );

// $hash would be the $hash (above) stored in your database for this user
$checked = $pwdHasher->CheckPassword($password, $hash);
if ($checked) {
    echo 'password correct';
} else {
    echo 'wrong credentials';
}

PHPass был реализован в некоторых довольно известных проектах:

  • phpBB3
  • WordPress 2.5+, а также bbPress
  • Выпуск Drupal 7, (модуль доступен для Drupal 5 и 6)
  • другие

Хорошо, что вам не нужно беспокоиться о деталях, эти детали были запрограммированы людьми с опытом и проверены многими людьми в Интернете.

Для получения дополнительной информации о схемах хранения паролей прочтите сообщение в блоге Джеффа : Вы, вероятно, храните Неправильный пароль

Что бы вы ни делали, если выберете подход « Я сделаю это сам, спасибо », не используйте MD5 или SHA1 больше . Это хороший алгоритм хеширования, но считается неработающим в целях безопасности .

В настоящее время использование crypt с CRYPT_BLOWFISH является наилучшей практикой.
повторное Возможно неправильное хранение паролей

Что бы вы ни делали, если вы выберете подход « Я сделаю это сам, спасибо », не используйте MD5 или SHA1 больше . Это хороший алгоритм хеширования, но считается неработающим в целях безопасности .

В настоящее время использование crypt с CRYPT_BLOWFISH является наилучшей практикой.
re Возможно неправильное хранение паролей

Что бы вы ни делали, если вы выберете подход « Я сделаю это сам, спасибо », не используйте MD5 или SHA1 больше . Это хороший алгоритм хеширования, но считается неработающим в целях безопасности .

В настоящее время использование crypt с CRYPT_BLOWFISH является наилучшей практикой.
CRYPT_BLOWFISH в PHP - это реализация хэша Bcrypt. Bcrypt основан на блочном шифре Blowfish, в котором для замедления алгоритма используется дорогостоящая настройка ключей.

266
ответ дан 23 November 2019 в 20:55
поделиться

Меня устраивает. Г-н Этвуд писал о силе MD5 против радужных таблиц , и в основном с такой длинной солью вы сидите красиво (хотя некоторые случайные знаки препинания / числа, это могло бы улучшить его).

Вы могли бы это улучшить. также посмотрите на SHA-1, который, кажется, становится все более популярным в наши дни.

0
ответ дан 23 November 2019 в 20:55
поделиться

Лучше, чтобы каждый пользователь имел уникальную соль.

Преимущество использования соли состоит в том, что злоумышленнику становится труднее предварительно сгенерировать сигнатуру MD5 для каждое словарное слово. Но если злоумышленник узнает, что у вас есть фиксированная соль, он может предварительно сгенерировать подпись MD5 для каждого словарного слова с префиксом фиксированной соли.

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

11
ответ дан 23 November 2019 в 20:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: