Применение web-технологий для проверки и корректировки первичной вводимой информации

Выполнен анализ проблем, которые возникают при проверке корректности данных в web-приложениях. Предложены методики проверки корректности ввода данных на основе функций PHP и защиты от SQL-инъекций.

Разработка надежных приложений - цель каждого разработчика. Правильность ввода первичных данных в приложение является одним из основных методов, используемых для повышения надежности приложения. В web-приложении пользователь обеспечивает ввод, чтобы манипулировать приложением. При вводе данных могут возникнуть ошибки во время набора вводимой информации [1]. «Проверка ввода» является практикой программирования, в котором разработчик web-приложения пытается обнаружить неправильные входные данные пользователя и сделать соответствующее предупреждение. Необходимость проверки объясняется следующим: при разработке серьезных web-приложений есть много причин, которые могут навредить стабильной работе приложения и целостности данных. Во время написания приложения сценарии отказа возникают, один за другим и должны быть обработаны разработчиком.  Здесь  потребуется  обработка  данных  введенных  пользователем,  обработка  приведет к снижению сценариев отказа в значительной степени. «Проверка входных данных» позволяет быть уверенным и сосредоточить внимание на основах приложения, а не тратить время обработки каждого случая входных данных [2].

Существуют различные способы [3], через которые к web-приложению получат доступ:

  1. Веб-формы.
  2. Клиентские приложения.
  3. Приложения и службы.
  4. Файлы на основе записей.

Поэтому для стабильной работы приложений необходимо, чтобы все эти входы проверялись по определенными  правилами.   Для  этого   у  каждого   поля  должен  быть  определенный  тип      данных и ограничительные условия для каждого поля ввода, этот процесс проверки будет охватывать большинство входных сценариев почти для всех приложений.

Различают несколько методов проверки вводимых данных на корректность [4]:

  1. Ограничение длины вводимой информации.

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

$variable = substr($HTTP_POST_VARS['variable'], 0, 10); 

  1. Проверка на наличие специальных символов.

Перед вставкой принятых от пользователя строковых данных в БД их следует проверить на наличие спецсимволов и экранировать их. Лучше всего для этого использовать функцию mysql_escape_string: 

$sql = »INSERT INTO table VALUES \»« . mysql_escape_string($text) 

  1. Числовые данные.

Если пользователем передаются числовые данные, то перед использованием рекомендуется их проверить на то, действительно-ли они являются числами. Делается это с помощью функции intval: 

$myint = intval($_POST['myint']); 

  1. Проверка на корректность адреса Email.

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

Код, выполняющий проверку данного типа: 

if(!preg_match(«/[a-zA-Z0-9_-.+]+@[a-zA-Z0-9-]+.[a-zA-Z]+/», $email)) die(«некорректный email-адрес»); 

  1. Проверка на заполнение необходимых полей.

Ниже приведен код, выполняющий проверку на заполнение полей данными: 

if ($name == »« or $mail == »« or $password == »« or $rpassword == »«)

{ print »Заполните все необходимые поля!<BR>«; $er = 1; } 

Переменная $er = 1 означает, что была ошибка [5].

В настоящий момент при использовании современных средств internet-технологий появилась возможность через поля ввода в web-приложения получать доступ к данным сайта. В этом случае содержимое полей ввода невозможно проверить простыми ограничительными границами и приложение сохраняет вредоносные входные данные. Это особенно относится к свободной форме текста или строковым типам данных. В таких ситуациях, содержание и значение входного поля должны быть проверены на предмет несанкционированного входа - наличие тегов или SQL команд. От SQL инъекции страдает не только база данных MySQL, но и любая база, поддерживающая языки запросов (а таких большинство) [6].

Для того, чтобы предотвратить SQL-инъекции, можно использовать функции языка PHP:

  1. Mod_rewrite. Структура предлагаемой информации имеет следующий вид - вместо ссылок вида index.php?id=1, например, используются ссылки вида html. Кроме защиты это придает более эстетический вид ссылок и более качественную индексацию сайта поисковыми системами. Реализация предлагаемого метода выглядит следующим образом в файл .htaccess вписываются строчки: 

RewriteEngine on Options +FollowSymlinks RewriteBase

RewriteRule ^.htaccess$ - [F]

RewriteRule ^([0-9]*).html index.php?id=$1 

Защита от SQL-инъекции происходит следующим образом: при вводе строки, например, http://сайт.ru/1′.html , mod_rewrite не пропустит этот запрос, так как выше упомянутая строка не удовлетворяет условию перенаправления.

  1. Следующим методом защиты от SQL-инъекций может быть предложена фильтрация данных, полученных от пользователя. Кроме «обычной» фильтрации данных, экранируются все опасные символы с помощью специальной функции: mysql_real_escape_string.

$data = mysql_real_escape_string ($data, $connect);

Где $data-переменная, хранящая какие-то данные, полученные от пользователя (данную операцию нужно проделать со всеми переменными, используемыми в SQL-запросах!), а $connect - подключение к базе MySQL (задаваемое функцией mysql_connect). Для того, чтобы эта защита работала, любые данные, передаваемые в SQL-запросе, необходимо оформлять одинарными кавычками: 

mysql_query (”SELECT * FROM table WHERE id = ‘$id’”), вместо

mysql_query (”SELECT * FROM table WHERE id = $id”)

Выводы:

  1. Предлагается методика проверки корректности заполнения полей ввода на основе функций PHP.
  2. Предлагаются методы защиты от SQL-инъекций.

 

Литература

  1. http://www.beansoftware.com/ASP.NET-Tutorials/Validating-ASP.NET-2-0.aspx - Validating User Input In ASP.NET 2.0 Web
  2. http://www.devshed.com/c/a/PHP/Advanced-PHP-Form-Input-Validation-to-Check-User-Inputs/ - Advanc ed PHP Form Input Validation to Check User
  3. http://www.owasp.org/index.php/How_to_create_a_general_purpose_input_validation_system - How to create a general purpose input validation system.
  4. http://www.comptechdoc.org/independent/ programming/ programming-standards/input-validation.html - Input
  5. http://www.phpro.org/tutorials/Validating-User-Input.html - Validating user input in
  6. http://blog.theringing.net/zashhita-ot-sql-inekcii-s-pomoshhyu-mod_rewrite/ - Защита  от SQL-инъекции с помощью mod_rewrite.
Фамилия автора: Р.В. Кравченко,  Н.М. Зайцева
Год: 2011
Город: Павлодар
Яндекс.Метрика