Безопасность strip_tags () и mysqli_real_escape_string () - PullRequest
3 голосов
/ 25 февраля 2009

Я нахожусь в школьном проекте по информационной безопасности, и одно из заданий - написать несколько безопасных страниц на PHP. Никто из членов моей группы не знает PHP, но это не большая проблема, однако мы научимся достаточно создавать простые страницы.

Один из советов, который дали помощники студентов, заключается в использовании двух функций strip_tags() и mysqli_real_escape_string(). Я предполагаю, что это безопасно, но без глубоких знаний я не уверен. Некоторые простые поиски в Google показывают, по крайней мере, что в прошлом были уязвимости. Поскольку задача состоит в том, чтобы попытаться сломать системы других групп, важно как то, что наша собственная система безопасна, так и найти возможные уязвимые места в системах других групп. И большинство групп будут использовать эти две функции вслепую. Итак, мои вопросы:

  1. Есть ли известные уязвимости в strip_tags()?
  2. Есть ли известные уязвимости в mysqli_real_escape_string()?
  3. Есть ли естественное место для поиска таких уязвимостей (кроме вопроса StackOverflow)?

Ответы [ 3 ]

8 голосов
/ 25 февраля 2009

Во-первых, я бы порекомендовал вам использовать Подготовленные Mysqli заявления . Они более безопасны , чем функции escape, поскольку они полностью отделяют структуру запроса от параметров запроса.

Вы можете использовать либо strip_tags или htmlentities, чтобы убедиться, что вредоносный код не выводится в браузер. Вы также, вероятно, захотите запустить весь динамический контент через какую-то функцию фильтра, прежде чем выводить его в браузер. Это одна из областей, где может помочь хорошо организованный и сплоченный ОО-подход, поскольку вы можете назначить весь динамический контент одному объекту, который затем отвечает за отображение вывода в браузере, чтобы вы всегда могли чувствовать себя в безопасности, зная, что ваш контент - XSS безопасно без необходимости поиска среди сотен эхо-операторов на нескольких страницах.

Однако эти два предложения действительно касаются лишь вершины айсберга, когда речь заходит о безопасности PHP. Есть ряд других проблем, которые также должны быть решены, такие как:

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

  • shiflett.org
  • phpsecurity.org (Это еще один сайт Криса Шифлетта, но я не уверен, есть ли у него дополнительный контент, которого нет на его персональном сайте)
  • phpsec.org Не так много контента, как мне хотелось бы, но есть некоторые полезные вещи, которые нужно знать, такие как создание определенных файлов конфигурации, которые содержат конфиденциальную информацию (например, пароли базы данных), не хранятся публично доступные каталоги.

В этом последнем пункте, если это возможно, вы захотите изучить использование файлов .htaccess или их эквивалента в IIS, чтобы убедиться, что только те файлы, к которым вы хотите получить доступ, являются общедоступными. В противном случае все остальные ваши меры безопасности будут тщетными.

Обновление: Я подумал о паре других вопросов, касающихся безопасности в вашем проекте. Если вы помните несчастный случай, когда учетная запись администратора Twitter была взломана несколько лет назад, это было разрешено по нескольким причинам, которые можно было легко разрешить.

1) Попытки входа в систему паролей, если они не ограничены. Другими словами, если пользователь пытается войти в систему и терпит неудачу, то для повторного запроса с его IP-адреса может потребоваться 2 секунды для обработки второго раза, затем 4 для следующего и так далее. Это делает нецелесообразным для бота попытки непрерывного входа в систему.
2) Безопасные пароли не требовались. Поскольку к паролям предъявляются более высокие требования (требуемая длина и типы символов, такие как буквенно-цифровые и специальные символы), атаки по словарям становятся совершенно нецелесообразными, поскольку при взломе пароля гораздо проще бросить словарь, чем придумывать случайные строки чисел и письма. Также количество времени взлома пароля увеличивается в геометрической прогрессии по мере добавления новых символов.

Вы можете увидеть это сообщение от Джеффа Этвуда для получения дополнительной информации по этой конкретной теме.

2 голосов
/ 25 февраля 2009

Для ошибок PHP: bugs.php.net

1 голос
/ 25 февраля 2009

Уязвимости зависят от версии, вам следует указать версию PHP, которую вы должны использовать. Если вы используете старую версию, старые (исправленные) уязвимости можно легко найти в bugs.php.net или База данных консультативных услуг и уязвимостей Secunia

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...