Читаем Защита веб-приложений на Perl полностью

При сохранении файла из его имени необходимо удалить все спецсимволы. Я (если не требуется иное) предпочитаю в имени делать следующее:

• перегнать русский в транслит,

• оставить латиницу и цифры,

• остальное заменить знаками подчеркивания

• и заменить подряд идущие подчеркивания на одно

Это можно сделать примерно так:

Во избежание злоупотребления возможностью загрузки файлов надо ввести квоты и назначить максимальный размер файла. Отказывайтесь обрабатывать запрос, если клиент умалчивает о размере данных (не передает поле CONTENT_LENGTH).

Не давайте закачивать или управлять файлами за пределами строго определенных директорий. Остерегайтесь приема полных путей и символов конвейера ( | ) и перенаправления ввода/вывода (<, <<, >, >>). Там, где можно обойтись без обращения к оболочке, потенциально безопаснее так и сделать.

20.

Ускорители для Perl, такие как SpeedyCGI http://daemoninc.com/SpeedyCGI/, mod_perl http://perl.apache.org/, FastCGI http://www.fastcgi.com/ – это ваши друзья, но таящие в себе угрозу: глобальные переменные сохраняют значение между обращениями. Если в обычном режиме вы рассчитываете, что они изначально не инициализированы (то есть при обращении неявно приводятся к нулю либо к пустой строке), то под ускорителями они могут незаметно для вас стать уязвимым местом, храня что-либо с предыдущего вызова скрипта. Об этом настойчиво предупреждают в документации к каждому из таких ускорителей, но сказать еще раз лишним не будет.

Правило: трижды убедитесь в том, что глобальные переменные обнуляются перед использованием.

21.

Не позволяйте роботам ходить по ссылкам, для них не предназначенным. Информацию, которую вы не хотите отдавать на индексирование роботам-паукам, можно обозначить тегом noindex:

Всю страницу можно пометить как неиндексируемую, добавив в заголовок HTTP-ответа:

Аналог этого поля в HTML:

Еще один вариант не индексировать страницу средствами HTML:

Запретить роботам переходить по ссылкам на странице:

Используйте robots.txt http://robotstxt.org.ru/. Пустой robots.txt лучше, чем его отсутствие, так как роботы в любом случае его запрашивают. Ни к чему захламлять логи веб-сервера ложными ошибками 404. Это касается и файла favicon.ico http://favicon.ru/faq/. Если у вас его до сих пор нет, может пришла пора его создать? Пустой robots.txt равносилен заявлению «индексировать можно все».

22.

Настройте Apache так, чтобы он рассказывал о себе как можно меньше. Эти параметры в конфиге регулируют вывод версии сервера и установленных модулей на некоторые служебные страницы и в HTTP-заголовки:

23.

Есть модуль для Apache mod_security http://www.modsecurity.org/. По принципу работы он является одновременно прокси-сервером и фаерволлом для протокола HTTP.

Это модуль, который позволяет создавать правила проверки запросов до того, как они обработаются скриптами, и фильтрации ответов после отработки скриптов.

Например, можно раз и навсегда защититься от SQL-Injection в параметре с именем id, если вы будете придерживаться правила использовать его только для передачи числа, то есть создадите правило, что id в запросе должно быть числом и ничем иным. Можно также указать диапазон допустимых символов в запросе. Используя регулярные выражения можно добиться достаточно гибкой фильтрации. Модуль умеет произвольно реагировать на несоблюдение правил, его можно, к примеру, настроить так, чтобы злоумышленник после нескольких неудачных попыток сломать сайт банился бы по IP или ему показывалась заданная страница. Приятная особенность: mod_security умеет фильтровать и вести логи POST-запросов.

Можно отсеять вывод той информации, которая является секретной, и которую злоумышленник попытается вытащить. Таким образом, даже если уязвимый скрипт что-то выдаст, вы можете вырезать это из ответа при помощи mod_security.

Модуль может обрабатывать практически любой аспект взаимодействия с веб-сервером, он настолько мощен, что его просто нельзя описать кратко, он достоин скорее отдельной статьи, или даже книги.

24.

Принимайте меры против подбора пароля.

Задержка входа – простейший, но при этом уже достаточно неслабый способ. Сведет на нет ручной перебор и автоматический однопоточный перебор с одного компьютера.

Против многопоточного перебора поможет ограничение количества неудачных попыток войти под одним и тем же логином в течение определенного промежутка времени. После их превышения срабатывает временная блокировка логина. Отправная точка – пять попыток за три минуты (это и слишком жесткие правила для целесообразности автоматического подбора хорошего пароля и сносная пауза для человека, если он опечатался несколько раз подряд).

Храните неудачные попытки входа примерно в такой табличке:

Перейти на страницу:

Похожие книги