Пятница , 24 Февраль 2017
Как новичку заработать в интернете?
ДомойПубликацииphp: вопросы и ответы, часть 2

php: вопросы и ответы, часть 2

php faq

Как показывает практика, большинство людей не любят читать сколь-либо громоздкие статьи, отдавая предпочтение «точечным» решениям. К сожалению, порой простейший вопрос содержит столько нюансов, что их нельзя раскрыть даже в обозримые 2000 символов. Но люди, тем не менее, требуют точного ответа на свои вопросы. что же, уважаемые, удовлетворю вашу просьбу с помощью небольшого количества мини-вопросов, оформленных в виде faq`a.

Можно ли доверять кукам?

Однозначно нет. Дело в том, что данные эти очень легко подделать. проще всего это сделать в Opera: F12 — настройки для сайта — Cookies, после чего достаточно выбрать нужную куку, нажать «Изменить» и отредактировать по собственному разумению. Поэтому, если данные из куков записываются в базу данных (например, mysql), данные необходимо обработать хотя бы с помощью mysql_escape_string (но лучше аналогом mysql_real_escape_string, в зависимости от используемого драйвера). Если данные должны выводиться на страницу, то их необходимо либо отфильтровать (для случая, когда ожидается определённый формат), либо обработать с помощью функции htmlspecialchars.

2

Каким данным, пришедшим от пользователя, можно доверять?

Никаким! Невзирая на то, достаются они из 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);

Рейтинг: 0

Автор публикации

1 293
не в сети 11 часов

x64 (aka andi)

Комментарии: 1945Публикации: 307Регистрация: 02-04-2009
Так себеНеплохоХорошоЗамечательноСупер! (Оценок пока нет)
Загрузка...

2 комментария

  1. Привет, напиши свои контакты. Есть работенка.

    Рейтинг: 0

Оставить комментарий

Ваш email не будет опубликован.Необходимы поля отмечены *

*

Добавьте изображение (jpg/gif/png)

Авторизация

Регистрация

Пароль не введен

Генерация пароля