Надерем хацкерам задницу!

Никита "red_way" Кислицин

Xakep, номер #065, стр. 065-118-1

(nikitoz@real.xakep.ru, www.ired.ru)

Создание безопасных систем на PHP

SQL-injection, include-bug, CSS... Сколько опасностей подстерегает web-программиста в процессе разработки и поддержки своих программ! Сколько знаний и опыта ему нужно, чтобы полностью избавить свою систему от всех этих уязвимостей! Однако порой обстоятельства складываются таким образом, что даже талантливый и хороший программист упускает что-то из виду и дает хакеру отличный шанс поломать систему - именно поэтому важно самой архитектурой сценариев максимально усложнить жизнь хакеру, используя методы криптографии и некоторые другие приемы.

Проблемы аутентификации

Как ты, наверное, уже убедился на собственном опыте, серьезные проблемы вызывает написание грамотной системы аутентификации пользователей. И действительно, самое ценное на сайте - это обычно личные данные пользователей, сохранность которых - твой долг и прямая обязанность, а также зачастую прямая коммерческая заинтересованность. Конечно, если ты предоставляешь платный или жестко ограниченный доступ к некоторой ценной информации. Соответственно, тут многое зависит от самой системы аутентификации: есть, по крайней мере, два подхода. Первый заключается в использовании стандартных средств http-сервера (для Apache это, прежде всего, .htaccess). Тут программисту не остается другого пути, кроме как довериться разработчикам веб-сервера, уповая на отсутствие в нем уязвимостей. Второй способ - использование собственных программ для разграничения доступа к информации. Это более гибкий подход, поскольку ты можешь самостоятельно отслеживать всю передаваемую информацию, сам разрабатываешь алгоритмы аутентификации, и, соответственно, все проблемы системы также лежат на твоих плечах. Мы обсудим основные проблемы создания собственных систем аутентификации. Думается, что-то новое для себя могут вынести как новички, так и опытные разработчики.

Пароль паролю рознь

Знаешь ли ты, что многие пользователи до сих пор используют простые пароли a-la “darling”, не меняют их годами и вообще, довольно халатно относятся к сохранению этой информации, уповая то ли на везение, то ли на собственную неприкосновенность? Тебе, как разработчику системы, важно соблюдать некоторые общепринятые подходы, которые заставили бы юзеров использовать более сложные пароли, чаще их менять, но, вместе с тем, не ухудшили бы usability сайта. Рационально предложить пользователю при выборе пароля довериться системе, чтобы та сгенерировала произвольный и устойчивый к перебору набор символов, который бы, ко всему прочему, не сильно утруждал его мозг запоминанием. Для этого напишем несложную функцию, которая будет генерировать произвольный пароль заданной длины.

Функция, генерирующая действительно хороший пароль :)

function GenPassw($PasswLong) {

/* запускаем генератор случайных чисел */

srand(microtime()*23456);

/* цикл для генерации каждой позиции в пароле */

for($i=1; $i<=$PasswLong; $i++) {

/* Генерируем произвольное число в этом диапазоне */

$d = rand(33,126);

/* Получаем символ по его ASCII-коду и приклеиваем к паролю */

Содержание  Вперед на стр. 065-118-2
ttfb: 29.271125793457 ms