Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Заставляем клиента делать сложные пароли.Самое популярное, но не самое лучшее решение проблемы с простыми паролями. Практически на каждом 3-м сайте пользователям приходиться регистрироваться и у многих сайтов различаются требования к паролям. Пользователи начинают путаться куда-какой пароль они вбивали. Какой длины, заглавные, строчные, символы. Они в конце концов везде вводят один и тот же пароль, а когда надо добавляют в конце пару цифр.
#TCP Filters ##
iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL NONE -j DROP
#SYN+FIN
iptables -t mangle -A PREROUTING -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
#SYN+RST
iptables -t mangle -A PREROUTING -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
#FIN+RST
iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,RST FIN,RST -j DROP
#FIN w/o ACK before
iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,FIN FIN -j DROP
#PSH w/o ACK before
iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,PSH PSH -j DROP
#URG w/o ACK before
iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,URG URG -j DROP
2) запрет авторизации под рутом
желательно проверять на криптостойкость и коллизии.
Дополнительный плюс — сервер может не хранить состояния, а просто доверять данным, которые в токене пришли (если токен не протух и валидация HMAC секретным ключом прошла, естественно). Соответственно, можно использовать внешний auth-сервер для многих проектов. Ну или шардиться по многим серверам без дополнительных усилий.
Вместо куки серверу в момент аутентификации предлагается возвращать JSON-объект
подписанный при помощи HMAC и секретного ключа сервера. В этом объекте может храниться собственно айдишник пользователя, таймстамп истечения сессии
Ну, JWT-токен может точно так же иметь уникальный id, указывающий на сессию, по которому статус этого конкретного соединения можно поднять из какого-нибудь редиса.
httpOnly, secure и т.д2.3 Используем escaping для любых данных. Проверяем на xss, никаких html тегов или js скриптов от клиента.
Для файлов по возможности проверяем MIME-тип, не доверяем расширениям, это легко изменить.Если кто-то захочет что-то подделать, то MIME-тип подделать не сильно сложнее расширения. Если ваш сервер принимает от пользователя картинки — пересохраняйте их.
Нет картинок, которые перетерпят ресайз и не потеряют вложенных лишних данных.Ошибаетесь, и вот почему. Даже используя функции imagecopyresized() и imagecopyresampled() при уменьшении размера PNG картинки с 256px до 32px шелл остаётся.
не обязательно класть файлы на другой сервер, чтобы их нельзя было выполнить, достаточно дать им название, которое интерпретатор не будет обрабатывать.Опять заблуждаетесь. Файлы могут быть выполнены с помощью банального LFI и никакие названия файлов не помогут в таких случаев.
но нужно стараться из-за всех сил уменьшить риск эксплуатации даже неизвестных уязвимостей.Мне кажется (№2), что в таком случае стоит отказаться от PHP в первую очередь, а хранить ресурсы пользователя на другом сервере во вторую.
Не даем безгранично добавлять какие-либо данные (например, комментарии).
Не позволяем загружать длинные строки и тяжелые файлы.
Оптимизируем запросы к базе — никаких select в цикле.
Не забываем про индексы.
Сложный поиск? Используйте поисковые движки (ElasticSearch, Sphinx и т.д.).
В отправке формы или изменений состояний используем уникальные для каждого пользователя токены (csrf). Не хотите токенов, тогда проверяйте HTTP_REFERER.
Никаких данных на клиенте, даже в зашифрованном виде, только id-сессии в куках.
Странное предложение о реферере после множества слов о том, что любые входные данные подделываются?Так это же в рамках защиты от от csrf. Злоумышленнику реферер в чужом браузере подделать затруднительно.
Что даст в данном случае отдельный сервер? Чем рискуем в противном случае?В случае отдельного сервера можно достаточно спокойно предоставлять доступ к нему. Дизайнеру для правки шаблонов, пользователям для заливки своих файлов и так далее.
Не хотите токенов, тогда проверяйте HTTP_REFERER.
Но как уже говорилось, вариант не очень хороший т.к. referer можно скрыть.
location .svn{
deny all;
}
3. Используем всегда актуальные версии софта, вовремя обновляемся.
Используем всегда актуальные версии софта, вовремя обновляемся.
Недавняя история с OpenSSL тому подтверждение
Заставляем клиента делать сложные пароли.
фыварулит был признан сильным, поскольку якобы имел в два раза большую энтропию, чем asdfhekbn…
Конспект по веб-безопасности