
Большинство современных сайтов, хранящих клиентскую информацию, используют системы авторизации (идентификации) пользователя. Существуют несколько наиболее распространенных сценариев авторизации:
1. Наиболее распространенный – авторизация пользователя на конечном сайте, используя пару «логин – пароль». В базе данных такая пара хранится обычно в виде логина в открытом доступе и пароля зашифрованного с помощью некого алгоритма хеширования (md5, sha* и т.д.). Пароль практически никогда не хранится в базе данных в открытом виде.
2. Так же распространенный, как и первый способ авторизации – открытые API сторонних сервисов (facebook, vkontakte, openID и т.д.). В данном случае логин/пароль хранятся на стороннем сервисе, и избавляет пользователя от головной боли в виде регистрации, а разработчика, в свою очередь, от необходимости задумываться о большинстве аспектов безопасности.
3. Наименее распространенный способ – кроссдоменная авторизация (в данный момент используется на habrahabr). Логику работы можете посмотреть там же.
Если в первом варианте проблема кражи пароля (хэша пароля) практически исключена, то для второго и третьего случая данную возможность нельзя полностью исключать. В случае же, если злоумышленник сможет получить хэш вашего пароля, его будет тем сложнее расшифровать, чем сложнее был незашифрованный пароль.
Рассмотрим ситуацию на примере четырех паролей:
Незашифрованный пароль | md5 | Время разбора хэша |
---|---|---|
123456 | e10adc3949ba59abbe56e057f20f883e | 15 секунд |
Test123456 | 126cfbcd4d16ae6d25c9bfcae76d8ee4 | 3 минуты (был в базе) |
138866429390 | 64935ce1862aa84c2a2513bec14bc792 | 2 часа 10 минут |
e*sT8An6q[5e | c19b0ea9355a22d50f59019aa3c56701 | 48 часов, приостановлено |
В качестве алгоритма хеширования не случайно был выбран именно md5, поскольку есть вариант парных хэшей. Подбор осуществлялся по базам + радужным таблицам + брутом. Вполне наглядно видна разница во времени расшифровки сложных и легких паролей. Все вычисления происходили на рабочем компьютере, в реальной ситуации вы можете смело уменьшить время подбора в 100 раз. Таким образом, для вашей же безопасности идеальный вариант - использовать авторизацию через сторонние сервисы, пароли устанавливать сложные (в обязательном порядке). Советую так же не сохранять пароли в браузере, а использовать связку keepass+dropbox. Для получения надежных паролей обычно используют так называемые модули генераторов паролей. Специально для целей наших клиентов мы разработали собственный бесплатный генератор паролей. Пользуясь данным инструментом, вы сможете за 1 секунду создать надежный пароль, который обезопасит ваши данные. JS код (используется jQuery):
jQuery().ready(function () {
function getRandomInt(min, max) { // Функция для получения случайного целого числа в заданном промежутке
return Math.floor(Math.random() * (max - min + 1)) + min;
}
function getpwd(symb, len) { // Функция для генерации пароля. symb - строка символов для генерации, len - длина пароля
var pwd = '';
for (var i = 0; i < len; i++) {
pwd = pwd + symb[getRandomInt(0, (symb.length - 1))];
}
return pwd;
}
function escapeHtml(text) { //Функция для экранирования спецсимволов
return text
.replace(/&/g, "&")
.replace(//g, ">")
.replace(/"/g, """)
.replace(/'/g, "'");
}
var chars = ["abcdefghijklmnopqrstuvwxyz", "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "0123456789", "!@#$%^&*()_-<>,.[]{};:№?"]; //Коллекция символов
jQuery("#generate").click(function () { //Генерация паролей ко плику
if (jQuery("input.innerVars:checked").length > 0 && jQuery("#countpwd").val() > 0 && jQuery("#countsymb").val() > 0) {
var genspwd = '', symb = '', obj = jQuery("input.innerVars:checked");
for (var j = 0; j < obj.length; j++) {
symb = symb + chars[obj[j].value];
}
for (var j = 0; j < (jQuery("#countpwd").val()); j++) {
genspwd = genspwd + '' + escapeHtml(getpwd(symb, parseFloat(jQuery("#countsymb").val()))) + '
';
}
jQuery("#result").html(genspwd);
} else {
jQuery("#result").html('Выберите значения для генерации пароля
');
}
})
})
Код html ( без стилей ):
<input type="checkbox" value="0" id="chars" class="innerVars"><span>Строчные латинские буквы</span>
<input type="checkbox" value="1" id="bigChars" class="innerVars"><span>Заглавные латинские буквы</span>
<input type="checkbox" value="2" id="numChars" class="innerVars">Цифры (0-9)
<input type="checkbox" value="3" id="specChars" class="innerVars"><span>Спец символы (!@#$%^&*()_-<>,.[]{};:№?)</span>
<input type="text" id="countsymb"><span>Количество символов</span>
<input type="text" id="countpwd"><span>Количество паролей</span>
<input type="button" id="generate" value="Сгенерировать">