Безопасность PHP / MySQL – с чего начать?

Я PHP / MySQL noob, который ничего не знает о безопасности в Интернете.

Не могли бы вы указать мне некоторые ресурсы, которые помогут мне в этом? (Уровень начального уровня, пожалуйста!)

Я предлагаю две вещи:

  1. Убедитесь, что Register_globals выключен.
  2. Используйте подготовленные заявления .

Этот вопрос хорошо ответил и охватывает атаки на инъекции MySQL (одна из наиболее распространенных проблем. Этот вопрос также хорошо документирован и хорошо описывает атаки XSS (межсайтовый скриптинг).

Наконец, узнайте о PHP.INI и о том, как его настроить и что на самом деле открыто / закрыто и включено / выключено. Хороший хозяин, например, никогда не включит регистровые глобалы, но вы должны хотя бы знать, что это такое и почему его проверять. У PHP Security есть ресурсы по этому и многим другим проблемам безопасности PHP.

Возможно, PHP не лучший старт. Особенно, если вы в значительной степени сворачиваете свой собственный код. Это не совсем держит вас в руке с проблемами безопасности. (fd: Я хочу, чтобы PHP ушел по разным причинам.)

Но некоторые общие правила:

  • Не верьте всему, что приходит извне. Всегда предполагайте, что пользователь – какой-то рывок, пытающийся разбить ваше приложение. Большинство из них, конечно, не будет, но в конечном итоге будет тот, кто есть. Только потому, что вы предоставили браузер, <select> содержащий a, b и c, не означает, что вы получите один из них. Javascript не является гарантией чего-либо. Ссылаться на них можно легко. Данные POST можно легко подделать. Текстовые поля могут содержать любой символ, а не только те, которые вы ожидаете.
  • Не копируйте и не вставляйте код других, если вы не знаете, как это работает. Вы не представляете, сколько у автора есть для безопасности. По моему опыту, PHP copypasta, в частности, кажется менее надежным, но чаще вслепую повторным использованием.
  • Не верьте себе, чтобы выполнить один и тот же ритуал в десятках разных мест. Да, mysql_real_escape_string() будет исправлять SQL-инъекцию, но тогда вы должны помнить, что используете его везде. Это создает множество мест, где вы могли бы совершить ошибку и забыть свой ритуал побега. Вместо этого используйте подготовленные заявления, и проблема полностью исчезнет . Другой пример: Pylons (фреймворк Python) устанавливает свои шаблоны, поэтому любая переменная с HTML-экранируется, если вы явно не задали иное. XSS больше не проблема, и мне никогда не придется беспокоиться о том, чтобы вручную избежать все, что я печатаю.

Крис Шифлетт – разработчик PHP-программирования и безопасности:

  • http://phpsecurity.org/ для его книги «Essential PHP Security»
  • http://shiflett.org/ для своего сайта, блога и т. д.
  • Он говорит на PHP CodeWorks в сентябре / октябре.

Если у вас есть время, вы можете взглянуть на слайды, используемые Стефаном Эссером во время его конференции на Нидерландской конференции PHP несколько месяцев назад, название которой было «PHP Crash Course для начинающих».

Есть пара PDF:

  • Часть I – Введение
  • Часть II – XSS
  • Часть III -CSRF
  • Часть IV – Безопасность SQL
  • Часть V – Безопасность управления сеансом
  • Часть VI + VII – Включение кода PHP и оценка кода PHP

Это может быть полезно.

Затем не стесняйтесь искать немного информации, не относящуюся к PHP: некоторые проблемы безопасности (такие как XSS, SQL Injections, CSRF, …) не являются специфическими для PHP: только технические средства для их предотвращения специфичны; поэтому вы можете найти много информации о таких сайтах, как Wikipedia или веб-сайт OWASP