5 полезных советов по созданию PHP сайтов

PHP – является одним из наиболее популярных языков программирования для написания различного вида сайтов. Этот язык может помочь программисту в многом, найти и убрать дыры в безопасности, создать различного вида и сложности приложения для сайта и другое.

В этом уроке мы рассмотрим 5 советов, которые помогут вам избежать некоторых ловушек безопасности в PHP и развития глюков.

Совет 1: Использование собственных сообщений об ошибках.

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

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

error_reporting(0);

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

Подсказка 2: Отключение в РНР “плохих особенностей”

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

Примечание: Эти функции могут быть вообще не включены или их невозможно отключить. Это зависит от места, где Вы разрабатываете свое приложение и версии PHP.

Функция – Register Globals (register_globals)

Эта функция была призвана помочь для быстрой разработки приложений. Например: url: http://www/yoursite.com/index.php?var=1. Этот пример включает в себя строки запроса. Функция register_globals позволяет нам получить переменную $var вместо глобальной переменной $_GET[“var”] автоматически. С первого взгляда это может быть полезно, но к сожалению теперь все переменные обладают таким свойством. Теперь мы можем легко попасть в PHP приложение, которое не защищено от этого непредвиденного последствия.

Этот фрагмент кода является лишь одним типичным примером:


 if( !empty( $_POST['username'] ) && $_POST['username'] == 'test' && !empty( $_POST['password'] ) && $_POST['password'] == "test123" )
 {
 $access = true;
 }
 

Если приложение работает с register_globals то, пользователь может просто поместить access = 1, в строке запроса, и будет затем иметь доступ к любому разделу скрипта.

К сожалению, мы не можем отключить register_globals из сценария, но мы можем использовать для этого htaccess файл. Некоторые хосты так же позволяют Вам иметь на сервере файл php.ini.

Отключение с. Htaccess

php_flag register_globals 0

Отключение с php.ini

register_globals = Off 

«Магические кавычки»

«Магические кавычки» – это характерная черта сохранять программисту используя addslashes() и другие аналогичные функции в своем коде. Есть, по крайней мере, две проблемы, связанные с «волшебными кавычками». Одной из проблем является использование обоих котировок «кавычек» и addslashes(). Если Вы это используете тогда, получите несколько путей добавления ошибок. Вторая проблема, если сделать предположение, что «магические кавычки» включены, а на самом деле это не так. Тогда все входные данные носят неконтролируемый характер. Рекомендуется отключить эту функцию и использовать надлежашие проверки вместо этих функций. К сожалению, мы не можем отключить «магические кавычки» из сценария. Для этого мы будем использовать htaccess и php.ini:

Отключение с. htaccess

php_flag magic_quotes_gpc 0 php_flag magic_quotes_runtime 0

Отключение с php.ini


 magic_quotes_gpc = Off
 magic_quotes_runtime = Off
 magic_quotes_sybase = Off
 

Совет 3: Проверять входные данные

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


 if ( ! preg_match( "/^[0-9]{1,2}$/", $_GET['month'] ) )
 {
 // handle error
 }
 if ( ! preg_match( "/^[0-9]{1,2}$/", $_GET['day'] ) )
 {
 // handle error
 }
 if ( ! preg_match( "/^[0-9]{4}$/", $_GET['year'] ) )
 {
 // handle error
 }
 

Таким способом мы проверяем данные, какие входят в приложение. Этот тип проверки почни не оставляет места для таких типов атак как Sql.

Web-приложение обычно принимает входные данные от пользователей, и отображает их в некотором роде. Это происходит, конечно, в самых разнообразных формах, включая комментарии тем или страниц блогов, которые написаны с помощью HTML. Прием таких данных может быть опасным. Если хотя бы один путь остается открытым, может быть захвачен сайт.
Есть несколько способов защититься от таких нападений. Одним из таких способов является вообще не использовать HTML при форматировании ввода. Это не всегда является вариантом для форумов и блогов.
Если Вы хотите, чтобы пользователь мог выполнить простое форматирование входных данных тогда, можно разрешить только несколько выбранных тегов HTML (без атрибутов), такие как <strong> или <em>. Или, в качестве альтернативы, Вы можете использовать популярный набор тегов, называемый «BBCode» или «BB теги». Это может быть идеальным способом разрешить форматирование, и в тоже время нет ничего опасного. Вы можете использовать уже существующие пакеты, такие как HTML_BBCodeParser или написать собственный.

И последнее, но не последнее по важности. Одной из самых известных атак на Web-приложения, является Sql-инъекция. Атака может произойти, если данные носят неконтролируемый характер и при вводе используются символы как в Sql, такие как одиночне или двойные кавычки.
К счастью, PHP действительно предлагает несколько инструментов, чтобы помочь защитить ваши вводы в базу данных. При подключении к SQL. Вы можете использовать эти функции, и переменные должны быть безопасными для использования в запросах. Большинство крупных систем баз данных с помощью PHP предложили включить эти функции защиты. MySQL позволяет это сделать одним из двух способов.
Либо с помощи mysqli_real_escape_string функции при подключении к серверу:

Или с помощью подготовленных заявок.

Хотя это и может защитить Ваше приложение от несанкционированного входа, Вы все равно должны использовать надлежащие проверки данных.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *