обеспечение безопасного веб-приложения php

для защиты моего проекта от атак (пример: SQL injection) im, используя ниже для страниц параметров запроса (*. php? query = value):

$id=strip_tags($id); $id=mysql_real_escape_string($id); if(is_numeric($id) && strlen($id)<=3) //id are numbers maximum of 3 digits 
  • Помимо этого, используя проверки клиента (JavaScript) и сервера (php), strip_tags() фильтрует данные по мере необходимости.
  • Пароли шифруются с помощью bcrypt()
  • Все сообщения зашифровываются с помощью mcrypt_ecb()
  • Страницы могут быть доступны только в том случае, если isset($_SESSION["id"]) то есть вошел в систему.
  • error_reporting(0); скрыть ошибки.
  • $_POST вместо $_REQUEST
  • mysql_real_escape_string(); для каждого входа

на самом деле мой проект будет использоваться колледжем, и я напрягся о безопасности, потому что backtrack позволяет легко проникнуть, поэтому я стараюсь сделать это безопасным. (я знаю, что это большой вопрос, но любая помощь будет очень полезна), но, будучи студентом, я хочу знать, что еще им недостает, чтобы сделать его безопасным?

В первую очередь:

Избегайте PHP-функций MySQL, таких как чума

Вместо этого используйте PHP MySQL-функции на самом, самом минимальном уровне или PDO . MySQLi и особенно PDO-функции лучше подходят для безопасности. Но, из двух, PDOs – лучшая сделка, поскольку они предлагают вам более высокую абстракцию с подготовленными заявлениями, что значительно увеличивает вашу защиту от атак SQL-инъекций :

Большинство операторов SQL в приложениях PHP используют переменный ввод для определения результатов инструкции SQL. Чтобы безопасно передать введенный пользователем ввод в инструкцию SQL, подготовьте инструкцию с помощью маркеров параметров (?) Или именованных переменных, представляющих переменную ввод. Когда вы выполняете подготовленный оператор, вы привязываете входные значения к маркерам параметров. Механизм базы данных гарантирует, что каждое входное значение обрабатывается как один параметр, предотвращая атаки SQL-инъекций на ваше приложение. По сравнению с операциями, выпущенными через PDO :: exec (), подготовленные операторы предлагают преимущество в производительности, поскольку система управления базами данных создает план доступа для каждого подготовленного оператора, который он может повторно использовать, если впоследствии будет выдан отчет.

Кроме того, избегайте использования некоторых старых устаревших функций PHP.

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

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

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

Если это академическое упражнение или самообучающийся, прочтите следующее:

Причины НЕ использовать PHP Framework?

Многие из лучших сообщений StackOverflow PHP и сообщения Programmers.StackExchange могут помочь вам в вашем путешествии.

Вот несколько из них, чтобы начать с:

(Это более общий обзор того, что обсуждают большинство этих ссылок)

Ознакомьтесь с практикой безопасности в своей области. Это когда-либо развивается.

Если вас интересуют рамки, вот несколько из популярных, которые вызывают интерес:

  • Yii
  • CakePHP
  • Zend
  • Symfony
  • Кохана (рекомендуется)

Но, в любом случае – удачи!

Я бы предложил обзор веб-сайта OWASP для информации, связанной с веб-безопасностью (или даже присоединиться к OWASP ).

Этот раздел OWASP предоставляет информацию, связанную с PHP .

Обеспечение безопасности приложения PHP – довольно сложный процесс. Есть много вещей, о которых стоит подумать, когда вы пишете свое приложение, а SQL-инъекция – не единственная угроза.

Предлагаю обратиться к следующим полезным статьям:

25 рекомендаций по безопасности PHP для администраторов Sys

Как защитить ваше приложение php?

PHP Cheat Sheet