Приветствую! Не так давно написал сайт на php, тематику описывать не буду. Суть в том, что со дня открытия был большой приток юзеров, это заинтересовало хакеров, в итоге многие аккаунты были взломаны. Я знаю, что дело не в защите самого сайта и сервера. Уверен, что аккаунты ломали по отдельности, возможно с помощью брута, троянов или еще чего-то, не особо в этом шарю. У меня такие вопросы: 1. Как можно отследить попытки взлома? 2. Как можно усложнить работу взломщику? (элементарные советы, например поставить капчу и т.д.) 3. Как можно избежать кражи сессии юзеров? 4. Как обезопасить восстановление пароля?
По моему, эти вопросы юзеры должны задавать. А так стандартно: максимально сложный пароль + чистка куки в браузере + обновленный АВ.
Вы не совсем поняли. Меня интересуют обычные советы, например такие: поставить капчу, восстановление пароля подтверждать по смс, при регистрации запрашивать пароль не менее 10 символов, логировать ip юзеров и т.д. То есть элементарные советы, как можно улучшить защиту и усложнить работу взломщикам.
сам ответил на свой вопрос ну да, очень заинтересовало, не смеши, кому нужент твой нулячий сайт с ботами и парочкой юзеров?
Несовпадение Поэтому: М.б. уязвимость в скриптах, в т.ч. и сторонних, учетки достали из базы, или пишутся логи вводимых паролей. Имеется XSS, сессии ушли на сниффер. Могли ломать через соседей по хостингу. Либо часть юзеров пришли со взломанных компов. Минимальные рекомендации: - анализ логов - правильная настройка сервера - фильтрация всех переменных в скриптах (и на ввод и на вывод) Или провести аудит, например тут
Пароли в базе хранить в шифрованном виде (например хеши) , обязательно подсоленные. Можешь и несколько раз пройтись хешем (правда это снижает сложность пароля, зато увеличивает количество символов в нем...) Ограничить количество попыток входа с одного IP адреса Хранить идентификаторы сессий в отдельной таблице с указанием времени жизни сессии + учитывать "отпечатки пальцев" пользователя (все доступные данные через $_SERVER запихнуть в хеш и в поле таблице), каждый раз при инициализации сессии сверять все эти данные (ps в php можно свой обработчик сессий писать) Использовать дерективы session.cookie_secure, session.use_only_cookies, session.cookie_httponly - что бы предотвратить кражу сессий через XSS Использовать recaptha и токены в формах для защиты от ботов и CSRF. как правильно сказал nikp, фильтрация всех переменных. Для запросов к бд если используешь PDO лушче юзать bindValue с явным указанием типа. Либо использовать свою прослойку потипу как dklab dbsimple - почитай там про placeholder-ы
Gifts был у меня допустим пароль "dfg56%(*ea469IKJGHSt63/|" - в нем a-z 0-9 и спец символы, соответственно на полный его полный перебор уйдет больше времени... Предположим мы сделали так md5(md5(pass)); Теперь вместо "dfg56%(*ea469IKJGHSt63/|" у нас зашифровано 0e9c650bebe523f6b0f9ef91ffb65aa8, а это диапазон a-f 0-9 и длина 32 символа Например если наш пароль изначальный был 64 символа и включал в себя широкий диапазон символов с высокой энтропией, он становится 32 символьным паролем с ограниченным диапазоном символов. А вообще, да бред. Просто перебор изначального хеша займет меньше времени.