При сохранении файла из его имени необходимо удалить все спецсимволы. Я (если не требуется иное) предпочитаю в имени делать следующее:
• перегнать русский в транслит,
• оставить латиницу и цифры,
• остальное заменить знаками подчеркивания
• и заменить подряд идущие подчеркивания на одно
Это можно сделать примерно так:
Во избежание злоупотребления возможностью загрузки файлов надо ввести квоты и назначить максимальный размер файла. Отказывайтесь обрабатывать запрос, если клиент умалчивает о размере данных (не передает поле CONTENT_LENGTH).
Не давайте закачивать или управлять файлами за пределами строго определенных директорий. Остерегайтесь приема полных путей и символов конвейера ( | ) и перенаправления ввода/вывода (<, <<, >, >>). Там, где можно обойтись без обращения к оболочке, потенциально безопаснее так и сделать.
Ускорители для Perl, такие как SpeedyCGI
Правило: трижды убедитесь в том, что глобальные переменные обнуляются перед использованием.
Не позволяйте роботам ходить по ссылкам, для них не предназначенным. Информацию, которую вы не хотите отдавать на индексирование роботам-паукам, можно обозначить тегом noindex:
Всю страницу можно пометить как неиндексируемую, добавив в заголовок HTTP-ответа:
Аналог этого поля в HTML:
Еще один вариант не индексировать страницу средствами HTML:
Запретить роботам переходить по ссылкам на странице:
Используйте robots.txt
Настройте Apache так, чтобы он рассказывал о себе как можно меньше. Эти параметры в конфиге регулируют вывод версии сервера и установленных модулей на некоторые служебные страницы и в HTTP-заголовки:
Есть модуль для Apache mod_security
Это модуль, который позволяет создавать правила проверки запросов до того, как они обработаются скриптами, и фильтрации ответов после отработки скриптов.
Например, можно раз и навсегда защититься от SQL-Injection в параметре с именем id, если вы будете придерживаться правила использовать его только для передачи числа, то есть создадите правило, что id в запросе должно быть числом и ничем иным. Можно также указать диапазон допустимых символов в запросе. Используя регулярные выражения можно добиться достаточно гибкой фильтрации. Модуль умеет произвольно реагировать на несоблюдение правил, его можно, к примеру, настроить так, чтобы злоумышленник после нескольких неудачных попыток сломать сайт банился бы по IP или ему показывалась заданная страница. Приятная особенность: mod_security умеет фильтровать и вести логи POST-запросов.
Можно отсеять вывод той информации, которая является секретной, и которую злоумышленник попытается вытащить. Таким образом, даже если уязвимый скрипт что-то выдаст, вы можете вырезать это из ответа при помощи mod_security.
Модуль может обрабатывать практически любой аспект взаимодействия с веб-сервером, он настолько мощен, что его просто нельзя описать кратко, он достоин скорее отдельной статьи, или даже книги.
Принимайте меры против подбора пароля.
Задержка входа – простейший, но при этом уже достаточно неслабый способ. Сведет на нет ручной перебор и автоматический однопоточный перебор с одного компьютера.
Против многопоточного перебора поможет ограничение количества неудачных попыток войти под одним и тем же логином в течение определенного промежутка времени. После их превышения срабатывает временная блокировка логина. Отправная точка – пять попыток за три минуты (это и слишком жесткие правила для целесообразности автоматического подбора хорошего пароля и сносная пауза для человека, если он опечатался несколько раз подряд).
Храните неудачные попытки входа примерно в такой табличке:
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии