Надерем хацкерам задницу! Никита "red_way" Кислицин Xakep, номер #065, стр. 065-118-3 Нас интересуют именно хеш-функции. Если тебе нужна теория по этому вопросу, очень советую обратиться к классической книге по информатике - “Алгоритмы и структуры данных”, Н.Вирт. В двух словах, хеш-функция - это необратимое отображение, обладающее свойством хорошей распределенности, т.е. с высокой вероятностью (но не 1.0!) двум разным аргументам соответствуют различные значения функции. Иногда происходят так называемые коллизии, это когда двум разным аргументам соответствует одно и то же значение хеш-функции. Но вернемся к теме аутентификации пользователя. Когда юзер регистрируется, вводимый им пароль шифруется какой-то хеш-функцией (например, md5) и хранится в базе данных в зашифрованном виде. Таким образом, даже получив доступ к информации в таблице с пользовательскими данными, хакер не сможет использовать полученные сведения. Но каким же образом осуществляется аутентификация? При попытке авторизации скрипт шифрует вводимый пользователем пароль и сравнивает его с хешем оригинала. Если значения совпадают, пароль считается верным, и пользовать логинится в систему. Поскольку отображение, как я уже замечал, необратимо (т.е. по известному хешу восстановить точное значение аргумента невозможно), единственным способом подобрать строку, которая пройдет подобную аутентификацию, является тупой перебор всех возможных вариантов. Я специально не буду приводить здесь описания криптографических функций в PHP - подробную документацию по этому поводу ты найдешь на диске либо по указанным в боковом выносе интернет-ссылкам. А для понимания всего предоставленного кода достаточно комментариев и сведений, полученных из предыдущих статей. Информационная блокада Лучший способ остановить интервенцию захватчика в твою систему - ограничить ему доступ к ценной информации, содержащейся в сообщениях об ошибках. Об этом я очень подробно и доступно писал в прошлом номере. Идея заключается в том, чтобы перехватывать все возникающие ошибки, подавлять их, перенаправлять выдаваемую системой информацию в порт удаленного отладчика, а пользователю выводить лишь дружелюбные сообщения в стиле “Произошла непредвиденная ошибка, повтори попытку позже, если такой наивный”. Это важно, поскольку сообщения об ошибках могут нести в себе кучу необходимой взломщику информации о структуре каталогов, содержимом каких-то ячеек, их типах, названиях и т.д. Поэтому все сообщения важно изолировать от пользователя, не доверяя ему ничего ценного. Кроме того, этим ты сбережешь нервы добросовестных клиентов. При составлении sql-запросов очень важно следовать одному правилу, заключающемуся в том, что нельзя получать из таблицы больше информации, чем тебе действительно необходимо. Так, если ты из большой таблицы запрашиваешь все поля, в то время как нужно тебе лишь одно, это может привести к ряду неожиданных сюрпризов, облегчить жизнь хакеру, а также просто замедлить выполнение сценария. |