Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

PHP, SQL, SSI-Дневник ламера, превращающегося в ГУРУ :-) Подделка HTTP заголовков на сервер


Информационный Канал Subscribe.Ru

Выпуск 13
 
Дневник ламера, превращающегося в гуру
 
     
 

Сегодня немного о заголовках HTTP, отправке переменных и файлов через него.

Но сначала немного рекламы моего сайта: http://edu-rus.org
BOUNDARYначалорекламы8-)
Если кто-то увлекается электроникой, то там есть учебный курс для изучения микроконтроллеров AVR, также есть интернет-курсы по бухгалтерии.
BOUNDARY--конецрекламы8-)

Далее... Я давненько уже занимался подделкой заголовков, но сейчас стало актуально и вспомнил тему. Когда я делал это, то собирал на разделителях данных, именуемых: BOUNDARY, а сейчас посмотрев сессию соединения с сервером и залогинивания на нём снифером, увидел, что это уже не используется. Надо заново пакеты разбирать - это в будущем. Хотя и так тоже работает, но не всегда корректно.

Заголовок HTTP имеет простую структуру, такую-же как и тело письма (я об этом когда-то писал, кому интересно - смотрите в архиве рассылки), сначала всякие параметры, которые передаёт браузер, потом
Расскажу сразу на примере класса, собранного мной когда-то.

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


Заголовок
BOUNDARY********
Переменная (имя)
Переменная (значение)
BOUNDARY********
Переменная (имя)
Переменная (значение)
BOUNDARY********
Переменная (имя)
Переменная (значение)
BOUNDARY********
Данные о файле и его тело(смотрите ниже структуру)
BOUNDARY--********(заключительный разделитель, отличается от остальных двумя знаками минус: -- )

// Описывается класс для отправки заголовка
class http_request {

// Функция, генерирующая разделитель - BOUNDARY, он рандомный, тоесть может быть ЛЮБЫМ
function http_request(){ $this->body = ""; $this->boundary = "b".md5(uniqid(time())); }

// Функция добавления переменной, входные данные - имя переменной и её значение

function add_var($name, $value)
{@$this->body.="--".$this->boundary."\\r\n"."Content-Disposition: form-data; name=\"$name\"\\r\n\\r\n"."$value\\r\n";}


// Функция добавления файла в запрос, входные параметры - имя файла, имя поля ввода - которое мы подделываем, само тело письма которое берётся обычной функцией: file_get_contents("http://yandex.ru"); выгребает главную с янда

function addfile($fname, $varname, $fdata)
{
@$this->body.="--".$this->boundary."\n".
"Content-Disposition: form-data; name=\"$varname\"; filename=\"$fname\";\\r\n".
"Content-Type: application/octet-stream;\\r\n".
"Content-Transfer-Encoding: binary;\\r\n\\r\n";
$this->body.=$fdata."\\r\n";
}


// Фунуция отправки - переменная $URL нужна в принципе, только для подделки переменной: $HTTP_REFERER

function send_request($url, $port)
{
$host=substr($url,0,50);
$pattern="/(http\\:\\/\\/)([a-zA-Z\\.\\-_\\d]*)([\\?]?|[\\/]?)?/";
preg_match($pattern, $host, $arr);
$host=$arr[2];

$lenghtvar=strlen($this->body);
if($lenghtvar>10)
{
// Сборка самого заголовка, если есть переменные или файлы, то один формат, если нет, другой - ниже который
$header="POST $url HTTP/1.1\\r\nHost: $host\\r\nReferer: http://$host\\r\nCookie: income=1\\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)\\r\n"."Content-Length: ".$lenghtvar."\\r\nContent-Type: multipart/form-data; boundary=".$this->boundary."\\r\nCache-Control: no-cache\\r\nPragma: no-cache\\r\n\\r\n".$this->body."--".$this->boundary."--\\r\n\\r\n";
}
else
{
$header="GET $url HTTP/1.1\\r\nHost: $host\\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)\\r\nCache-Control: no-cache\\r\nPragma: no-cache\\r\n\\r\n";
}
// $fp=fsockopen("smtp.yandex.ru", 25);
// Открываем сокет и сливаем данные (обычно по 80-му порту - $port)
$fp=fsockopen($host, $port, $errno, $errstr, 20);
if(!$fp){ die($errstr); } // Если ошибка соединения- выводим её
echo $header;
fputs ($fp, $header); // Если нет - сливаем данные на сервер
while (!feof($fp)) // А затем получаем его ответ
{ $s = fgets ($fp,1024);
if (trim($s)=="")
{
if (ereg("Location:", $res)) { break; }
}
@$res.= $s;
}
return($res);
}
}

Мелочи я не описывал, сами посмотрите на структуру, там всё понятно - разжёвывать не буду. Ещё раз напоминаю - что это фактически такая же сруктура, как и у электронных EMAIL писем, только в них нет переменных, а здесь они есть иногда, а файлы также пересылаются.

И в конце объявление от одного товарища, который предлагает работу и сотрудничество:

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

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

Итак первый проект это создание PHP приложения. Основная функция – получать, обрабатывать любое количество RSS фидов, манипулировать постами из этих фидов и создавать на их основе веб-страницы из шаблонов. Реализация базовой функции достаточно проста - софт скачивает RSS feed, разделяет его на составные части, каждой из которых присваивается своя PHP переменная, после чего вставляет части этого фида в любом порядке в подготовленные веб-шаблоны, генерируя таким образом новые веб-страницы. Детальный софт-план со всеми необходимыми функциями уже расписан и будет представлен по достижению договоренности. Могу лишь сказать, что для программиста знающего PHP и XML этот проект не будет составлять проблем.

Но сначала о том, зачем оно нужно Вам:
1. Во-первых Вы получите денежное вознаграждение за создание этого продукта. Сумма договорная.
2. Во-вторых это решение лишь первый шаг (один из модулей) в моем "многошаговом" плане по созданию более крупного "объединяющего" приложения, поэтому дополнительные заказы гарантированы.
3. Продвижение Ваших услуг-программиста среди моих 3000 подписчиков и всех будущих клиентов, а это англоязычные веб-мастера, малый бизнес, интернет маркетологи, в общем основные заказчики бизнес софта в сети, так что в некотором роде наш первый проект станет для Вас выгодной "визитной карточкой".
4. Один из будущих проектов подразумевает создание платного членского сайта для интернет-маркетологов со стабильным ежемесячным доходом для Вас.
5. Если у Вас уже имеются качественные готовые PHP решения, Вы можете использовать меня в качестве канала для выхода на зарубежных партнеров и промоутеров.

Требования к программисту:
1. Отличное знание PHP, XML, СSS а также желательно Javascript, XHTML и вообще чем больше языков, тем лучше.
2. Понимание английского на уровне, как минимум, "чтения со словарем". Софт будет полностью англоязычным.
3. Обязательные черты характера - исполнительность и оптимизм.

Если Вы чувствуете, что Вы тот самый, подходящий человек для реализации мощных интернет-проектов, тогда шлите мне на имеил active@gala.net такую инфу:
1. Какие языки-программирования Вы знаете и на каком уровне?
2. Ссылки на Ваши готовые PHP решения, если таковые имеются.
3. Почему именно Вы тот хороший и подходящий парень для совместной работы?
4. Ваш тариф за час работы, за который Вы готовы начать работать?
5. Любую другую информацию, которую Вы считаете важной.


С надеждой на перспективное сотрудничество, Павел

 
          Евгений Евсеев    legat /БарбоС/ nm.ru      


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.php1sql1ssi
Архив рассылки
Отписаться Вебом Почтой
Вспомнить пароль

В избранное