Вы не зашли.
Главная » PHP » как подделать реферер
#1. Oberon Off (0)
Участник
2008.02.28 11:11
автор: Oberon   (20.02.2008 в 18:58)
А подделать реферер никак нельзя?.. Другого выхода думаю нет,..   

автор: Gemorroj   (20.02.2008 в 19:35)
Можно конечно, это обычный заголовок. Только вот как раз чтобы его отправить, нужно писать что-то более серьезное нежели header('Location: ...');, а именно, использовать что-то из этого набора: curl, fsockopen, ini_set + file_get_contents   

автор: Oberon   (20.02.2008 в 20:52)
Боюсь, я более серьезное не осилю.. Если можно, подробнее об этом всем.. Лишь бы мобильные телефоны на этом работали,

/// поможеш?
#2. Gemorroj Off (107)
Administrator
2008.02.28 14:02
опишу на мой взгляд самый простой способ, с помощью ini_set + file_get_contents
Код:
span style="color: #0000BB"><?php// $url - адрес файла, который нужно скачать// к примеру $url = $_GET['file'];$url = 'http://xxx.kmx.ru/file.zip';// формируем Referer// В нашем случае просто укажем адрес файла$referer = $url;// Пишем заголовки, которые будут переданыini_set('user_agent',$_SERVER['HTTP_USER_AGENT']."\r\nAccept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1\r\nAccept-Charset: $_SERVER[HTTP_ACCEPT_CHARSET]\r\nAccept-Language: $_SERVER[HTTP_ACCEPT_LANGUAGE]\r\nReferer: ".$referer);// Забираем файл$data = file_get_contents($url);// смотрим расширение$ext = strtolower(strrchr($url,'.'));//в соответствии с расширением ставим нужный MIME типif($ext == '.jad'){$mime = 'text/vnd.sun.j2me.app-descriptor';}elseif($ext == '.jar'){$mime = 'application/java-archive';}elseif($ext == '.txt'){$mime = 'text/plain';}elseif($ext == '.sis'){$mime = 'application/vnd.symbian.install';}elseif($ext == '.cab'){$mime = 'application/vnd.ms-cab-compressed';}elseif($ext == '.zip'){$mime = 'application/x-zip';}elseif($ext == '.gz'){$mime = 'application/x-gzip';}elseif($ext == '.tgz'){$mime = 'application/x-gzip';}elseif($ext == '.bz'){$mime = 'application/x-bzip';}elseif($ext == '.bz2'){$mime = 'application/x-bzip';}elseif($ext == '.7z'){$mime = 'application/x-7z-compressed';}elseif($ext == '.rar'){$mime = 'application/x-rar-compressed';}elseif($ext == '.doc'){$mime = 'application/msword';}elseif($ext == '.pdf'){$mime = 'application/pdf';}elseif($ext == '.mp3'){$mime = 'audio/mpeg';}elseif($ext == '.wav'){$mime = 'audio/x-wav';}elseif($ext == '.wma'){$mime = 'audio/x-ms-wma';}elseif($ext == '.avi'){$mime = 'video/x-msvideo';}elseif($ext == '.3gp'){$mime = 'video/3gpp';}elseif($ext == '.wmv'){$mime = 'video/x-ms-wmv';}elseif($ext == '.mpg'){$mime = 'video/mpeg';}elseif($ext == '.gif'){$mime = 'image/gif';}elseif($ext == '.jpg'){$mime = 'image/jpeg';}elseif($ext == '.jpe'){$mime = 'image/jpeg';}elseif($ext == '.jpeg'){$mime = 'image/jpeg';}else{$mime = 'application/octet-stream';}// Теперь данные нужно передать пользователюheader('Accept-Ranges: bytes');header('Content-Length: '.strlen($data));header('Last-Modified: '.gmdate('r',time()).' GMT');header('Connection: close');// Тип файлаheader('Content-Type: '.$mime);// Имя файлаheader('Content-Disposition: attachment; filename="'.basename($url).'"');print $data;?>
Должно работать, если не заблокирована функция ini_set
#3. Helqg Off (2)
Участник
2008.02.29 11:11
Эт че ет вы такое делаете то?
Стране нужны автобусы!
#4. Oberon Off (0)
Участник
2008.02.29 13:01
Gemorroj спасибо, буду пробывать

Helqg, реферер подделываем smile
#5. Helqg Off (2)
Участник
2008.02.29 19:07
Да я что то не пойму зачем? Может какие нибудь грабберы?
Стране нужны автобусы!
#6. Admin Off (-1)
Administrator
2008.02.29 19:07
да, часто нужно для грабберов smile
в данном случае сервер не отдает файл если не передан соответствующий реферер.
сердце пронзенное ветром
#7. Oberon Off (0)
Участник
2008.05.14 10:10
Gemorroj написал:
опишу на мой взгляд самый простой способ, с помощью ini_set + file_get_contents
(...)
Должно работать, если не заблокирована функция ini_set
Вставил код, но выдает ошибку, в твоем примере в строке 69.. Вот что пишет:

Parse error: syntax error, unexpected T_ELSE in /home/darkto/public_html/wapquest/download.php on line 93

Даже не знаю почему,..
#8. Helqg Off (2)
Участник
2008.05.14 12:12
а почему 69? 93?
Причем у него строк 83.
Стране нужны автобусы!
#9. Oberon Off (0)
Участник
2008.05.14 15:03
У него в примере это 69я строка... у меня - 93я,.. у меня скрипт побольше, в начале еще код есть,..
#10. Gemorroj Off (107)
Administrator
2008.05.14 15:03
скопировал код, вставил в PHP Expert Editor, нажал F7. Синтаксических ошибок нет. Давай СВОЙ код wink
#11. Oberon Off (0)
Участник
2008.05.14 16:04
Уже нашел ошибку... Каюсь,smile свой "}" закомментил, когда твой код вставлял,..

Тут вот другой бок вылез, пытается скачаться файл file.zip размером 1,6кб вместо файла name.jar.. и файл не скачиваеться... сейчас свой скрипт дам,
Добавлено спустя   8 минут  13 секунд:
Код:
span style="color: #0000BB"><?php$id = intval($_GET['id']);$mod = $_GET['mod'];if(!empty($id)){include "./inc.php";$q_files = @mysql_query("select * from `quest_files` where `id` = '$id' ;");$data = @mysql_fetch_array($q_files);$url = $data['r_url'];$i = $data['g_size'];$i=$i+1;if($mod=="jad") $url=preg_replace('/.$/', 'd', $url);mysql_query("update `quest_files` set `g_size`='$i' where `id` = '$id'; ");//header ("Location: $url");}$url = 'http://xxx.kmx.ru/file.zip';$referer = $url;ini_set('user_agent',$_SERVER['HTTP_USER_AGENT']."\r\nAccept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1\r\nAccept-Charset: $_SERVER[HTTP_ACCEPT_CHARSET]\r\nAccept-Language: $_SERVER[HTTP_ACCEPT_LANGUAGE]\r\nReferer: ".$referer);$data = file_get_contents($url);$ext = strtolower(strrchr($url,'.'));if($ext == '.jad'){$mime = 'text/vnd.sun.j2me.app-descriptor';}elseif($ext == '.jar'){$mime = 'application/java-archive';}else{$mime = 'application/octet-stream';}header('Accept-Ranges: bytes');header('Content-Length: '.strlen($data));header('Last-Modified: '.gmdate('r',time()).' GMT');header('Connection: close');header('Content-Type: '.$mime);header('Content-Disposition: attachment; filename="'.basename($url).'"');print $data;}else echo "id error";?>
Отредактировано Oberon (2008.05.14 17:05)
#12. Gemorroj Off (107)
Administrator
2008.05.14 17:05
у тебя в 27 строке ошибка... присваиваешь переменной $url значение реферера.
вот поправленный код.
Код:
span style="color: #0000BB"><?php$id = intval($_GET['id']);$mod = $_GET['mod'];if(!empty($id)){include './inc.php';$data = mysql_fetch_array(mysql_query('SELECT `r_url` FROM `quest_files` WHERE `id` = '.$id));$url = $data['r_url'];if($mod=='jad'){$url = preg_replace('/.$/', 'd', $url);}mysql_query('UPDATE `quest_files` SET `g_size`=g_size+1 WHERE `id` = '.$id);//header('Location: '.$url,true,301);}// реферер$referer = 'http://xxx.kmx.ru/file.zip';ini_set('user_agent',$_SERVER['HTTP_USER_AGENT']."\r\nAccept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1\r\nAccept-Charset: $_SERVER[HTTP_ACCEPT_CHARSET]\r\nAccept-Language: $_SERVER[HTTP_ACCEPT_LANGUAGE]\r\nReferer: ".$referer);$data = file_get_contents($url);$ext = strtolower(strrchr($url,'.'));if($ext == '.jad'){$mime = 'text/vnd.sun.j2me.app-descriptor';}elseif($ext == '.jar'){$mime = 'application/java-archive';}else{$mime = 'application/octet-stream';}header('Accept-Ranges: bytes');header('Content-Length: '.strlen($data));header('Last-Modified: '.gmdate('r',time()).' GMT');header('Connection: close');header('Content-Type: '.$mime);header('Content-Disposition: attachment; filename="'.basename($url).'"');print $data;}else{echo 'id error';}?>
#13. Oberon1
Гость
2008.05.14 17:05
А так выдает ошибку

Код:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/darkto/public_html/wapquest/download.php on line 10
 
Warning: Cannot modify header information - headers already sent by (output started at /home/darkto/public_html/wapquest/download.php:10) in /home/darkto/public_html/wapquest/download.php on line 35
 
Warning: Cannot modify header information - headers already sent by (output started at /home/darkto/public_html/wapquest/download.php:10) in /home/darkto/public_html/wapquest/download.php on line 36
 
Warning: Cannot modify header information - headers already sent by (output started at /home/darkto/public_html/wapquest/download.php:10) in /home/darkto/public_html/wapquest/download.php on line 37
 
Warning: Cannot modify header information - headers already sent by (output started at /home/darkto/public_html/wapquest/download.php:10) in /home/darkto/public_html/wapquest/download.php on line 38
 
Warning: Cannot modify header information - headers already sent by (output started at /home/darkto/public_html/wapquest/download.php:10) in /home/darkto/public_html/wapquest/download.php on line 39
 
Warning: Cannot modify header information - headers already sent by (output started at /home/darkto/public_html/wapquest/download.php:10) in /home/darkto/public_html/wapquest/download.php on line 40
Я не могу понять эту строчку
Код:
$referer = 'http://xxx.kmx.ru/file.zip';
почнму именно http://xxx.kmx.ru/file.zip... может вот так надо
Код:
$referer = $url;
?
#14. Oberon1
Гость
2008.05.14 17:05
$referer = $url; так тоже выдает ошибку, ту же самую.. Запутался я ,.
#15. Oberon1 Off (0)
Участник
2008.05.14 18:06
Там пару ошибок было, исправил,.. В общем, вот код,
Код:
span style="color: #0000BB"><?php$id = intval($_GET['id']);$mod = $_GET['mod'];if(!empty($id)){include './inc.php';$data = mysql_fetch_array(mysql_query('SELECT `r_url` FROM `quest_files` WHERE `id` = '.$id));$url = $data['r_url'];if($mod=='jad'){$url = preg_replace('/.$/', 'd', $url);}mysql_query('UPDATE `quest_files` SET `g_size`=g_size+1 WHERE `id` = '.$id);//header('Location: '.$url,true,301);}// реферер$referer = $url;ini_set('user_agent',$_SERVER['HTTP_USER_AGENT']."\r\nAccept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1\r\nAccept-Charset: $_SERVER[HTTP_ACCEPT_CHARSET]\r\nAccept-Language: $_SERVER[HTTP_ACCEPT_LANGUAGE]\r\nReferer: ".$referer);$data = file_get_contents($url);$ext = strtolower(strrchr($url,'.'));if($ext == '.jad'){$mime = 'text/vnd.sun.j2me.app-descriptor';}elseif($ext == '.jar'){$mime = 'application/java-archive';}else{$mime = 'application/octet-stream';}header('Accept-Ranges: bytes');header('Content-Length: '.strlen($data));header('Last-Modified: '.gmdate('r',time()).' GMT');header('Connection: close');header('Content-Type: '.$mime);header('Content-Disposition: attachment; filename="'.basename($url).'"');}else{echo 'id error';}?>
Пробую скачивать, только начинаеться закачка файла (уже тот файл что нужен, даже размер его реальный видно) и сразу закачка обрываеться...
Отредактировано Oberon1 (2008.05.14 18:06)
#16. Gemorroj Off (107)
Administrator
2008.05.14 18:06
is not a valid MySQL result - догадайся как переводится? ошибка в SQL запросе
10 строка. $data = mysql_fetch_array(mysql_query('SELECT `r_url` FROM `quest_files` WHERE `id` = '.$id)); - синтаксических ошибок нет. вероятно с базой что-то не так.
$referer - это РЕФЕРЕР.
$url - это URL, путь к файлу, который ты собираешся скачать.
вобщем они могут иметь одинаковое значение.
можешь писать и $referer = $url; не важно.
посмотри что у тебя в переменной $url, она будет пустая. Т.к. на наш SQL запрос MySQL ответил руганью.
#17. Gemorroj Off (107)
Administrator
2008.05.14 18:06
что за ошибки были? что-то не вижу никакой разницы.
#18. Oberon1 Off (0)
Участник
2008.05.14 18:06
is not a valid MySQL result уже догодался как переводится, поэтому и исправил десятую строку,...
в переменной $var уже прямая ссылка на файл на сайте кмх...
вот про реферер я и не доконца пойму,.. насколько я понимаю, в нем нужно указать http://quest.kmx.ua/ - сайт, с которого идет загрузка,.. Или я чтото не так понимаю,..
#19. Gemorroj Off (107)
Administrator
2008.05.14 18:06
да, сайт с которого производится загрузка.
#20. Oberon1 Off (0)
Участник
2008.05.14 18:06
в общем, поменял на $referer = 'http://quest.kmx.ua/'; , ничего не поменялось, - начинаеться загрузка файла, и тут же сбрасывается,..
#21. Gemorroj Off (107)
Administrator
2008.05.14 19:07
перед всеми header'ами напиши print $url; exit; что показывает?
#22. Oberon1 Off (0)
Участник
2008.05.14 19:07
путь к файлу, http://quest.kmx.ua/files/128x160/liftboy_128x160.jar
#23. Oberon1 Off (0)
Участник
2008.05.14 19:07
интересно, я вот попробовал с телефона скачать, раз через раз выпадает превышение таймаута соединения, а иногда пишет вот такое

Warning: file_get_contents(http://quest.kmx.ua/files/240x320/litlboy_240x320.jar) [function.file-get-contents]: failed to open stream: HTTP request failed! всякие_иероглифы in /home/darkto/public_html/wapquest/download.php on line 25

Warning: Cannot modify header information - headers already sent by (output started at /home/darkto/public_html/wapquest/download.php:25) in /home/darkto/public_html/wapquest/download.php on line 34

Warning: Cannot modify header information - headers already sent by (output started at /home/darkto/public_html/wapquest/download.php:25) in /home/darkto/public_html/wapquest/download.php on line 35

Warning: Cannot modify header information - headers already sent by (output started at /home/darkto/public_html/wapquest/download.php:25) in /home/darkto/public_html/wapquest/download.php on line 36

Warning: Cannot modify header information - headers already sent by (output started at /home/darkto/public_html/wapquest/download.php:25) in /home/darkto/public_html/wapquest/download.php on line 37

Warning: Cannot modify header information - headers already sent by (output started at /home/darkto/public_html/wapquest/download.php:25) in /home/darkto/public_html/wapquest/download.php on line 38

Warning: Cannot modify header information - headers already sent by (output started at /home/darkto/public_html/wapquest/download.php:25) in /home/darkto/public_html/wapquest/download.php on line 39
#24. Gemorroj Off (107)
Administrator
2008.05.14 19:07
реферер не надо даже кстати.
блин, идиотская ошибка, обидно) заголовки-то мы вывели, а сам файл не отдаем)
в конце еще напиши print $data;
сейчас коды выше поправлю.
#25. Oberon1 Off (0)
Участник
2008.05.14 19:07
во.. качает,) сейчас еще раз все перепроверю,... все ли нормально,
#26. Oberon1 Off (0)
Участник
2008.05.14 20:08
Проверил,. Спасибо большое,... smile
#27. Uberion Off (1)
Участник
2008.06.14 02:02
Мoжнo вoпpoc тудa жe? A kak пpoвepить referer?
Ничтo нe вeчнo пoд лунoй, kpoмe бaгoв в ckpиптax...и тapakaнoв smile
#28. Gemorroj Off (107)
Administrator
2008.06.14 04:04
Код:
span style="color: #0000BB"><?phpprint $_SERVER['HTTP_REFERER'];?>
#29. Uberion Off (1)
Участник
2008.06.14 10:10
A пpoвepить нa aдpec kak? Tak мoжнo?
Код:
$url = 'http://site.ru'; if(!ereg($_SERVER['http_referer'], "^$url") exit;
Tипa, ecли нaчaлo нe мoй caйт, тo пocлaть
Ничтo нe вeчнo пoд лунoй, kpoмe бaгoв в ckpиптax...и тapakaнoв smile
#30. denich Off (0)
Участник
2008.06.14 12:12
а что означает ereg и $_SERVER['HTTP_REFERER']
ska ska ska
#31. Gemorroj Off (107)
Administrator
2008.06.14 13:01
$_SERVER['HTTP_REFERER'] - в этом элементе массива будет реферер, если он передан (далеко не всегда)
ereg - рункция регуларного выражения. Честно говоря о ereg'ах лучше вообще забыть. Для регулярок использовать PERL'овские регулярки (preg_match, preg_replace и др) т.к. они шустрее и в PHP 6 POSIX регулярки (ereg и др) будут вообще устранены
проверить лучше строковой функцие какой-нить
Код:
span style="color: #0000BB"><?phpif(substr_count($_SERVER['HTTP_REFERER'], $_SERVER['HTTP_HOST'])){// адрес встречается в реферере}else{// реферер не передан, либо в нем нету адреса сайта}?>
$_SERVER['HTTP_HOST'] - здесь адрес твоего хоста, так что задавать отдельную переменную с адресом сайта не нужно.
Страниц: 1 2 3 4 Все
Главная
WEB
PunBB Mod v0.6.2
0.029 s