Как показывает практика, большинство людей не любят читать сколь-либо громоздкие статьи, отдавая предпочтение «точечным» решениям. К сожалению, порой простейший вопрос содержит столько нюансов, что их нельзя раскрыть даже в обозримые 2000 символов. Но люди, тем не менее, требуют точного ответа на свои вопросы. что же, уважаемые, удовлетворю вашу просьбу с помощью небольшого количества мини-вопросов, оформленных в виде faq`a.
- Можно ли доверять кукам?
- Каким данным, пришедшим от пользователя, можно доверять?
- Как получить группу ссылок из текста с помощью регулярных выражений?
- Можно ли получить заголовки для контента, полученного с помощью функций работы с файлами?
- Можно ли установить дополнительные заголовки при запросе данных с помощью функции работы с файлами?
Можно ли доверять кукам?
Однозначно нет. Дело в том, что данные эти очень легко подделать. проще всего это сделать в Opera: F12 — настройки для сайта — Cookies, после чего достаточно выбрать нужную куку, нажать «Изменить» и отредактировать по собственному разумению. Поэтому, если данные из куков записываются в базу данных (например, mysql), данные необходимо обработать хотя бы с помощью mysql_escape_string (но лучше аналогом mysql_real_escape_string, в зависимости от используемого драйвера). Если данные должны выводиться на страницу, то их необходимо либо отфильтровать (для случая, когда ожидается определённый формат), либо обработать с помощью функции htmlspecialchars.
Каким данным, пришедшим от пользователя, можно доверять?
Никаким! Невзирая на то, достаются они из get-запроса, post, куков или заголовков. Один чат был взломан с помощью sql-инъекции. главная проблема заключалась в недостаточной фильтрации поступивших данных. точнее, не фильтровался всего 1 параметр — user agent (идентификатор браузера, посылается всеми браузерами серверу). Данный параметр находится в значении супер-глобального массива $_SERVER[‘HTTP_USER_AGENT’]. Таким образом, обязательной обработке подлежат данные, пришедшие в: $_GET, $_POST, $_COOKIE, $_REQUEST, $_SERVER[‘HTTP_*’].
Как получить группу ссылок из текста с помощью регулярных выражений?
рассмотрен будет простейший пример. Переменная $buf содержит текст со ссылками. Все ссылки имеют вид: <a href="link">text</a>. Получить все ссылки (из атрибута href) можно с помощью одного выражения:
preg_match_all('!<a href="([^"]+?)"!', $buf, $urls);
После этого список ссылок будет находиться в $urls[1], и может быть просмотрен с помощью конструкции:
print_r($urls[1]);
Можно ли получить заголовки для контента, полученного с помощью функций работы с файлами?
Для начала, что же это за функции? По сути, это множество функций, которых можно условно объединить одной фразы: fopen wrappers — обработчики для url-протоколов. т. е. смысл в том, что если php «видит», что запрашивается файл, путь которого начинается с http/ftp, то в зависимости от настройки allow_url_fopen из файла php.ini запрос будет разрешён/отклонён. Это относится (но не ограничивается) к функциям: copy(), file(), file_get_contents() и т. п. так вот, после функции любого использования http-оболочек становится доступен массив $http_response_header, в котором содержатся заголовки, пришедшие от удалённого сервера.
Можно ли установить дополнительные заголовки при запросе данных с помощью функции работы с файлами?
Такая возможность есть. правда, она не совсем очевидна. для установки дополнительных опций нужно воспользоваться контекстами. С помощью контекстов можно формировать и отсылать post-запросы, установить прокси и сделать ещё много полезных и нужных вещей.
<?php
$opts = array(
'http' => array(
// представимся
'user_agent' => 'MyBOT 1.0',
// ожидание ответа не более 2 секунд
'timeout' => 2
)
);
$context = stream_context_create($opts);
$file = file_get_contents('http://zawap.ru/2.php', false, $context);
днём интернета
шоколадкой для работы мозга
коробочкой ароматного чая для бодрости
продлением хостинга на +1 месяц
Привет, напиши свои контакты. Есть работенка.
что, опять? не-не-не