Можно сделать это путем определения чередующий имена классов на строках. Я предпочитаю использовать row0
и row1
, что означает, что можно легко включить их, если список создается программно:
for ($i = 0; $i < 10; ++$i) {
echo '<tr class="row' . ($i % 2) . '">...</tr>';
}
Иначе должен был бы использовать JavaScript. jQuery используется в этом примере:
$('table tr:odd').addClass('row1');
Редактирование: я не знаю, почему я дал примеры с помощью строк таблицы... заменяют tr
li
и table
с ul
, и это относится примеру
Это не отменяет предназначение уникальной соли - хранить ее. Смысл уникальной «соли» - защитить весь репозиторий пользователей от атак, а не отдельного пользователя. Если злоумышленник скомпрометирует вашу базу данных и будет достаточно решителен, чтобы взломать учетную запись конкретного пользователя, он это сделает. Мы ничего не можем с этим поделать. Но им пришлось бы потратить на это непомерно много компьютерного времени - достаточно, чтобы было бы невозможно тратить столько времени на каждого пользователя - таким образом защищая всех ваших пользователей. Сравните это с использованием одной и той же соли для всех пользователей - как только злоумышленник получит соль, те же таблицы / процессы могут быть повторно запущены для каждого пользователя за относительно короткое время.
Соль генерируется случайным образом для каждого пользователя, но сохраняется где-то в базе данных. Вы ищите соль для конкретного пользователя и используете ее для аутентификации пользователя.
Дело в том, что, поскольку соль различается для каждого пользователя, вы не можете использовать предварительно созданный словарь хэшей для сопоставления хешированных паролей с открытым текстом ([ атака радуги ).
Соль не позволяет кому-либо получить копию вашей зашифрованной базы данных паролей и организовать автономную атаку против всех паролей одновременно. Это не предотвращает атаки на один пароль.
Возможно, вам понравится прочитать оригинальную статью о безопасности паролей в Unix. Он очень хорошо объясняет, что такое соль и почему она у нас есть: http://portal.acm.org/citation.cfm?id=359172
при создании хешированного пароля вы должны использовать "двойную" соль
Создайте соль (случайный md5 или sha1), затем используйте формат, например, sha1 ("- $ password - $ salt - "), а затем сохранить хешированный пароль и соль в базе данных.
Затем при аутентификации вы воссоздаете хэш из строки - $ pass - $ salt-- и сравниваете его с проходом, хранящимся в db.
Вам не нужно отдельное поле для каждого пароля.
Цель «соления» - противостоять радужным таблицам - вы конвертируете потенциальный пароль в новую строку, в которой есть ваша соль; Поскольку соль - это некоторая личная строка, которой владеете только вы, знание хеш-кода соленого пароля не поможет злоумышленнику, у которого есть обычная радужная таблица.
Умный злоумышленник может попытаться создать настраиваемую радужную таблицу специально для вашей службы, создав учетную запись и изменив свой пароль, чтобы посмотреть, каков будет полученный хэш. Если соль одинакова для каждого пользователя, то, когда он видит, что хэш «xyz123» соответствует «яблоку», и замечает, что хеш другого пользователя также является «xyz123», он может сделать вывод, что пароль этого пользователя - «яблоко». Это момент, когда большинство людей решают хранить уникальную соль для каждого пользователя.
Однако, в этом нет необходимости . У вас уже есть уникальная строка для каждого пользователя - имя пользователя. Это не секрет, значит, это плохая соль; однако объединение имени пользователя и глобальной секретной соли является секретным и уникальным. Если вы храните хэш (имя пользователя + соль + пароль), вам нужно знать только одно глобальное значение соли во время поиска.
(это правда, что это представляет больший риск, если кто-то утекает единственную глобальную соль. Но это метод, заслуживающий рассмотрения).
Верно то, что это представляет больший риск, если кто-то утекает единственную глобальную соль. Но эту технику стоит рассмотреть). Верно то, что это представляет больший риск, если кто-то утекает единственную глобальную соль. Но эту технику стоит рассмотреть).