Маркетер
  • Маркетинг
  • Digital
  • Реклама
  • Public Relations
  • Менеджмент
  • Новости
  • Маркетинг
  • Digital
  • Реклама
  • Public Relations
  • Менеджмент
  • Новости
YouTube 167 Подписчики
Telegram 241 Подписчики
VK 0 Подписчиков
Маркетер
Маркетер
  • Маркетинг
  • Digital
  • Реклама
  • Public Relations
  • Менеджмент
  • Новости
  • PHP

PHP: пользовательские данные

  • 25.05.2004

Автор статьи: Дмитрий Турецкий

>

PHP: пользовательские данные

[PHP — пользовательские данные] материал подготовил: Дмитрий Турецкий
25.05.2004

Каждый веб-сайт по роду своей деятельности должен принимать и обрабатывать данные от пользователей, и чем более динамическим сайт становится, тем больше «чужих» данных он использует в своей работе. Но нередко случается так, что посетители, умышленно или неумышленно, передают сайту совсем не те данные, которые он ожидает, что порой может приводить к весьма неприятным последствиям… И сегодня мы поговорим об основных приемах работы с пользовательскими данными в PHP-скриптах…

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

Рассмотрим простой пример: пользователь запрашивает страницу сайта, передавая в качестве GET-параметра идентификатор статьи, а ваш сервер делает запрос к базе данных и «вытаскивает» эту статью. То есть адрес выглядит как:

http://www.mysite.ru/page.php?id=3

а запрос к базе в скрипте выполняется в виде:

$SQL  =  «SELECT  *  FROM  articles  WHERE  id=$_GET[id]»;

Такой пример будет замечательно работать, до тех пор пока кто-то не запросит страницу без параметров — в этом случае переменная $_GET[id] окажется пустой, и запрос к базе выдаст ошибку. Предположим, что вы эту ошибку решите исправить и напишете что-то вроде:

if  ($_GET[‘id’])
$SQL  =  «SELECT  *  FROM  articles  WHERE  id=$_GET[id]»;
else
$SQL  =  «SELECT  *  FROM  articles  ORDER  BY  random()  LIMIT  1»;

Такой скрипт действительно корректно обработает пустой запрос — выдаст случайную статью — но что если посетитель запросит адрес:

http://www.mysite.ru/page.php?id=vasya

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

$id  =  (isset($_GET[‘id’]))  ?  (int)  $_GET[‘id’]  :  0;
if  ($id)
$SQL  =  «SELECT  *  FROM  articles  WHERE  id=$id»
else
$SQL  =  «SELECT  *  FROM  articles  ORDER  BY  random()  LIMIT  1»;

Необходимо проверять и тип и диапазон разрешенных значений данных
Такая конструкция гарантирует, что переменная $id у вас инициализирована и является целочисленной. Разумеется, она может выходить за пределы имеющихся статей, но тут уже после запроса к базе будет достаточно проверить количество полученных записей — это проще и менее ресурсоемко, чем при каждом вызове страницы проверять, есть ли в базе соответствующая запись.

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

if  (file_exists($_GET[‘page’]))
readfile($_GET[‘page’]);
else
readfile(‘default.html’);

Переменные надо инициализировать перед использованием
Казалось бы, здесь защита предусмотрена — вы честно проверили, что запрошенный файл существует. Но на самом деле подобная конструкция является одной из наиболее типичных «уязвимостей». Дело в том, что по умолчанию PHP разрешает использовать в файло
Алексей Волков

Предыдущий материал
  • Ваш интернет-сайт

инструменты разработчика

  • 21.05.2004
  • Алексей Волков
Подробнее
Следующий материал
  • CSS

CSS: фон и цвет

  • 27.05.2004
  • Алексей Волков
Подробнее
Вас также может заинтересовать
Подробнее
  • Codeigniter

Создание собственного обработчика 404 ошибок в CodeIgniter

  • jokar
  • 07.10.2012
Подробнее
  • PHP
  • Готовые скрипты

Загрузка нескольких файлов одним браузером

  • jokar
  • 14.06.2010
Подробнее
  • PHP

Переход на шаблонный дизайн

  • Алексей Волков
  • 10.02.2006
Подробнее
  • PHP

Экстремальный стиль для PHP

  • Алексей Волков
  • 29.12.2005
Подробнее
  • PHP

Секреты PHP-функций для работы с массивами. Обработка данных и сортиров

  • Алексей Волков
  • 15.11.2005
Подробнее
  • PHP

Секреты PHP-функций для работы с массивами. Создание массивов

  • Алексей Волков
  • 31.08.2005
Подробнее
  • PHP

PHP: секреты файла php.ini. Часть 4

  • Алексей Волков
  • 04.08.2005
Подробнее
  • PHP

PHP: секреты файла php.ini. Часть 3

  • Алексей Волков
  • 29.07.2005

Добавить комментарий

Для отправки комментария вам необходимо авторизоваться.

Свежие посты
  • Дайджест постов Сергея Людкевича
    • 12.09.24
  • Как юристы тормозят бизнес
    • 30.08.24
  • Продвижение оптовых кампаний в Яндекс Директ
    • 06.03.24
  • Cарафанное радио
    • 13.01.24
  • 5-55: История компании
    • 01.03.23
Маркетер
  • О проекте
  • Информационное спонсорство
  • Рекламным агентствам
  • Ссылки
(с) Маркетер: У нас портал для маркетологов и маркетера. Статьи про рекламу, маркетинг, public relations, интернет

Введите ключевые слова для поиска и нажмите Enter