Во-первых, я бы порекомендовал вам использовать Подготовленные Mysqli заявления . Они более безопасны , чем функции escape, поскольку они полностью отделяют структуру запроса от параметров запроса.
Вы можете использовать либо strip_tags или htmlentities, чтобы убедиться, что вредоносный код не выводится в браузер. Вы также, вероятно, захотите запустить весь динамический контент через какую-то функцию фильтра, прежде чем выводить его в браузер. Это одна из областей, где может помочь хорошо организованный и сплоченный ОО-подход, поскольку вы можете назначить весь динамический контент одному объекту, который затем отвечает за отображение вывода в браузере, чтобы вы всегда могли чувствовать себя в безопасности, зная, что ваш контент - XSS безопасно без необходимости поиска среди сотен эхо-операторов на нескольких страницах.
Однако эти два предложения действительно касаются лишь вершины айсберга, когда речь заходит о безопасности PHP. Есть ряд других проблем, которые также должны быть решены, такие как:
Я бы порекомендовал вам взглянуть на следующие сайты для получения дополнительной и более подробной информации о безопасности PHP:
- shiflett.org
- phpsecurity.org (Это еще один сайт Криса Шифлетта, но я не уверен, есть ли у него дополнительный контент, которого нет на его персональном сайте)
- phpsec.org Не так много контента, как мне хотелось бы, но есть некоторые полезные вещи, которые нужно знать, такие как создание определенных файлов конфигурации, которые содержат конфиденциальную информацию (например, пароли базы данных), не хранятся публично доступные каталоги.
В этом последнем пункте, если это возможно, вы захотите изучить использование файлов .htaccess или их эквивалента в IIS, чтобы убедиться, что только те файлы, к которым вы хотите получить доступ, являются общедоступными. В противном случае все остальные ваши меры безопасности будут тщетными.
Обновление: Я подумал о паре других вопросов, касающихся безопасности в вашем проекте. Если вы помните несчастный случай, когда учетная запись администратора Twitter была взломана несколько лет назад, это было разрешено по нескольким причинам, которые можно было легко разрешить.
1) Попытки входа в систему паролей, если они не ограничены. Другими словами, если пользователь пытается войти в систему и терпит неудачу, то для повторного запроса с его IP-адреса может потребоваться 2 секунды для обработки второго раза, затем 4 для следующего и так далее. Это делает нецелесообразным для бота попытки непрерывного входа в систему.
2) Безопасные пароли не требовались. Поскольку к паролям предъявляются более высокие требования (требуемая длина и типы символов, такие как буквенно-цифровые и специальные символы), атаки по словарям становятся совершенно нецелесообразными, поскольку при взломе пароля гораздо проще бросить словарь, чем придумывать случайные строки чисел и письма. Также количество времени взлома пароля увеличивается в геометрической прогрессии по мере добавления новых символов.
Вы можете увидеть это сообщение от Джеффа Этвуда для получения дополнительной информации по этой конкретной теме.