2007-04-23

Как, бывает, хранят пароли

Я, пока, опущу ту вкусную часть, как при помощи SQL-Injection можно получить пароли пользователей, но желающие могут самостоятельно прочесть IV раздел мануала о Безопастности - SQL Injection . И расскажу о самой неприятной (ок, не всем не приятной) привычке - открытых паролях и том как их хранят в других случаях.

Итак, первый и самый простой случай, когда пароли хранятся в таблице (название не имеет значения, но очень часто это бывает таблица users, admins или members, возможны разные префиксы), в поле password (обычно нужные поля очень легко узнать по форме регистрации или логина). Оно очень приятно, когда у сайта есть уязвимость ввиде SQL-Injection - вытянуть пароль и логин нужного вам пользователя не составит никакого труда. Время, нужно на поиск, занимает от 10 минут до нескольких часов - всё зависит от мастерства и фортуны (но не стоит исключать человеческий фактор). Кстати, если базу уводят (физический дамп с сервера), создателям скажут “спасибо”. Такие разработчики обычто оставляют незащищённый phpMyAdmin на сервере в легко доступном месте, а иногда оставляют SQL-Injection в скрипте логина в CMS. Вы конечно скажете - бред, не может быть, но всё-же такие случаи встречаются в моей практике и не раз.

Более сложный вариан для взломщиков - когда пароли хешируют. Обычно, встречаются варианты когда пароль просто хеширую при помощи md5 или других функций. Хотя тут, народ исхитрился иметь небольшие базы готовых хешей. Значит и тут пароли могут пострадать - вопрос размера базы хешей и то, какой это хеш. Конечно, все пароли не раскроют. Часто в базе - словари, фразы, а всякие “kld8jSkhYakKd772″ там наврятли будут - всё зависит от размера базы, вашей удачи и, иногда, от теории вероятности (про коллизию не забываем, да).

Итак, в резюме, получается, что с паролями излишняя параноидальность вам/нам не помешает. Если вы поманипулируете с паролями пользователей (да и администраторов) - вам это не повредит ни в коем случае. Сделать пару SALT, докинуть чего из “логина”, добавить битовую операцию, потом сделать base64 енкодинг и только потом хеш - это наверняка затруднит восстановление ворованного пароля.

А что вы посоветуете?

PHP, Security, Web — Сергей Куракин @ 00:04
Уже комментировало (2) »
  1. Комментиров(ал|ала), encNo Gravatar — 2007-04-23 @ 00:17

    sha-1

  2. Комментиров(ал|ала), runmenNo Gravatar — 2007-04-23 @ 12:45

    salt + sha-1
    остальное уже лишнее

RSS комментариев. TrackBack URI

Оставить свой комментарий