2010-05-05 2 views
3

вчера я задал вопрос о безопасности паролей ...Безопасность паролей; Это безопасно?

Я новичок в безопасности ...

Я использую MySQL БД, и нужно хранить пароли пользователей там. Мне сказали в ответах, что hashing и THEN сохранение правильного способа ввода пароля HASHED.

Так что в основном я хочу проверить с вами, ребята, это сейчас правильно.

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

В файле под названием «put_ad.php» Я использую метод $_POST для получения прохода из формы. Тогда я его хэш и поместил в таблицу mysql. Затем, когда пользователи хотят удалить объявление, я проверяю введенный пароль, хешируя его и сравнивая хешированное значение введенного пароля с хешированным значением в mysql db, правильно?

НО, что делать, если я как администратор хочу удалить классифицированный, есть способ «развязать» пароль легко?

sha1 используется в настоящее время кстати.

некоторые код очень оценен.

Благодаря

+2

Ваши комментарии на вопросы о переменной, поступающей из страницы - это должно быть хорошо, но вы можете хотите использовать эту страницу через SSL. – Paddy

+0

ОК спасибо:) ... – 2010-05-05 09:06:21

+2

Хеширование одного недостаточно - вы также должны использовать соль. Прочтите ответ Арха –

ответ

6

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

Это разница между аутентификацией пользователя и авторизации пользователя

+0

Хорошо, но пароль извлекается в файле «put_ad.php» следующим образом: $ pass = $ _ POST ['password']; это нормально, потому что ACTUAL pass будет внутри этой переменной, пока она не будет хэширована ...или я должен сделать это по-другому? – 2010-05-05 09:04:02

+0

Все должно быть хорошо. Если вы хотите быть «более безопасным», вы можете просто вызвать $ _POST ['password'], когда собираетесь шифровать (при условии, что вы не обрабатываете его каким-либо другим способом (например, соление)). Но, честно говоря, вы должны быть в порядке. –

3

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

+0

Хорошо, но пароль извлекается в файле «put_ad.php» следующим образом: $ pass = $ _ POST ['password']; это нормально тогда, потому что ACTUAL pass будет внутри этой переменной до тех пор, пока он не будет хэширован ... или я должен сделать это другим способом? – 2010-05-05 09:01:26

+3

Вы никогда не будете грубой силой * разобщите * что-нибудь, найдите только строку, которая переварит один и тот же хеш. – alex

+1

@alex: с паролями атаковать входное пространство намного проще и, скорее всего, даст исходный пароль. –

1

Прочитайте это: http://chargen.matasano.com/chargen/2007/9/7/enough-with-the-rainbow-tables-what-you-need-to-know-about-s.html, то вы можете начать использовать Bcrypt для хранения паролей.

+0

* «Для каждого пароля сгенерируйте случайное число (nonce). Хешируйте пароль с помощью nonce и сохраняйте как хэш, так и nonce.» * Это не работает: если они украдут вашу базу данных, они украдут оба md5 ** и ** nonce, так что это бессмысленно. –

+1

Если я получу базу данных, полную пароля хэши sha1, я могу создать 1 радужный стол за несколько часов, а затем быстро получить простые пароли. Теперь, если я получаю базу данных, полную хэшированных и соленых паролей, с хешами (каждая из которых уникальна), мне придется генерировать 1 таблицу радуги за пароль. Если алгоритм хэширования имеет bcrypt с хорошими параметрами, каждое из этих поколений может занять очень много времени. Поэтому даже с помощью хэшей вам лучше использовать dictionnary attack/bruteforce. Какой bcrypt помогает бороться, поскольку каждая попытка занимает больше, чем просто микросекунды. – Arkh

+0

Но в этой ситуации случайное исключение или просто использование идентификатора пользователя не имеет никакого значения: злоумышленнику придется в любом случае перетащить каждый пароль. –

2

Да, у вас есть первая часть справа.

Однако, нет возможности развязать пароль (легко). На самом деле это целая точка хранения хешей вместо настоящих паролей.

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

0

Нет, нет способа «разблокировать» пароль. Хеширование является односторонним процессом и не может быть отменено.

Единственный способ получить рабочий пароль для хэш-кода - это грубая сила; пытаясь использовать разные пароли до тех пор, пока не будет найдено совпадение.

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

1

Да, вы правильно храните пароли. Но, как предлагает Арк, bcrypt - более безопасный алгоритм шифрования.

Но пароль зашифрован на сервере, что означает, что он будет отправлен через Интернет в ясном тексте, если вы не используете SSL-шифрование соединения. Любой, кто нюхает линию где-то между вами и пользователем, может тогда теоретически прочитать пароль. Для вашего использования это может быть приемлемым ...

Я бы предпочел создать интерфейс администратора, позволяющий администратору удалять все, что ему хотелось, что устраняет необходимость «развязывания» пароля.

0

Да, вы правы, но пароль пользователя больше не должен читаться, даже не администратором! Таким образом, даже разоблачение было бы возможно (это не так), было бы неплохо, чтобы расшифровать его обратно на читаемый простой текст!

Другая проблема заключается в том, что вы не должны просто создавать хэш пароля, потому что это небезопасно. Пароль можно найти с помощью грубой силы, означает, что кто-то перебирает возможный пароль и пытается создать хеш-код, который он принюхивает из сети и т. Д. Если он создал тот же хеш, он нашел пароль. Но вы можете использовать соленый хеш. Означает, что вы добавляете соль (некоторые дополнительные строки, которые злоумышленник не знает) к паролю, а не хэш. например вы создаете хэш «username-anytextonlyknownbyourapp-password» или что-то в этом роде.

0

Если вопрос «Как unhash пароль» - ответ - нет никакого решения для декодирования хэш-значение, путь один перебирает его (значит найти исходное значение путем вычисления хэш и сравнить с базой), но это очень медленный процесс. Если пароль является «сильным», это неразрешимая задача.

Если вопрос «Как управлять паролями» - вам не нужно использовать «unhash»

Смежные вопросы