Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 17.07.2010, 11:51   #1
Dimarik
Участник клуба
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
Репутация: 13
По умолчанию фальсификация реферера

Разбираю пример из книги.
файл send.php
Код:
<table>
	<form action="a_sock.php" method="post">
	<tr>
		<td>Имя:</td>
		<td><input type="text" name="name" /></td>
	</tr>
	<tr>
		<td>Пароль:</td>
		<td><input type="password" name="pass" /></td>
	</tr>
	<td><input type=submit value='Войти'></td>
	</tr>
	</form>
</table>
файл a_sock.php
Код:
<?php
	$hostname = "localhost";
	$path = "/send.php";
	$line = "";
	/*Передаём методом POST имя пользователя (admin) и пароль (admin), скрытое поле session_id ($SID)
	В заголовках передаём cookie PHPSESSID
	Устанавливаем соединение, имя которого передано в параметре $hostname
	*/
	$fp = fsockopen($hostname, 80, $erno, $errstr, 30);
	//Проверяем успешность установки соединения
	if (! $fp)
		echo "$errstr ($errno) <br />\n";
	else
		{
			//Данные POST-запроса 
			$data = "name=admin&pass=admin&\r\n\r\n";
			$headers = "POST $path HTTP/1.1\r\n";
			$headers .= "Host: $hostname\r\n";
			$headers .= "Content-type: application/x-www-form";
                                  $headers .= "Content-Length: ".strlen($data)."\r\n";
			//Подделываем реферер
			$headers .= "Referer http://localhost/glava_1/1.php\r\n";
			$headers .= "Connection Close\r\n\r\n";
			//Отправляем HTTP-запрос серверу
			fwrite($fp, $headers, $data);
			//Получаем ответ
			while(!feof($fp))
			{
				$line .=fgets($fp, 1024);
			}
			fclose($fp);
		}
		echo $line;
?>
результат: открываю страницу send.php, ввожу логин и пароль, а следующая страница просто не грузится. опера показывает 0% и всё! никаким браузером не грузится, ну а потом естественно показывает сообщение о тайм-ауте (установлено ограничение в 30 секунд)
и ещё хотел спросить:
$headers .= "Content-Length: ".strlen($data)."\r\n";
что значат эти точки .strlen($data).? склеивание?
Dimarik вне форума   Ответить с цитированием
Старый 17.07.2010, 22:17   #2
Linel
Форумчанин
 
Аватар для Linel
 
Регистрация: 21.02.2009
Адрес: Рига, Латвия
Сообщений: 372
Репутация: 82

skype: w1cked_91
По умолчанию

Цитата:
что значат эти точки .strlen($data).? склеивание?
Попробуйте изучить основы языка PHP, перед тем, как браться за socket'ы. Учебников в интернете море. От этих скриптов вам пользы не будет, если вы не понимаете, что делаете. Это тоже самое, что решать уравнения с логорифмами, не зная элементарных арифметических операций.
__________________
No name. Just Linel.
Linel вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача реферера ЕвгенийN Фриланс 1 02.07.2009 09:56


19:10.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.