подмена referer

Тема в разделе "PHP", создана пользователем disik, 22 окт 2008.

Статус темы:
Закрыта.
Модераторы: latteo
  1. disik

    disik Создатель

    Регистр.:
    30 дек 2007
    Сообщения:
    17
    Симпатии:
    0
    вообщем есть такая трабла, на локалхосте запускаю скрипт, где есть форма, куда я ввожу данные и посылаю POST запросом на sait.ru, перехватываю данные TamperData - там стоит Referer = localhost - как средствами ПХП можно подменить этот referer

    пробывал так
    $_SERVER[HTTP_REFERER]='sait.ru';

    это на javascript
    document.referrer='sait.ru';

    нифига не работает, млин как всетаки подменить referer ???
     
  2. Hemi-Sync

    Hemi-Sync Постоялец

    Регистр.:
    17 дек 2006
    Сообщения:
    88
    Симпатии:
    38
    Когда формируешь хидер в локальном скрипте для отправки запроса на сервер , то просто выстави такую строчку в строке хидера. Там же где Host:..., User-agent:...
    Вот пример запроса. Правда GET но это не столь важно
    Код:
    GET /yandsearch?rpt=rad&text=test HTTP/1.1
    Host: yandex.ru
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3 (.NET CLR 3.5.30729)
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: ru,en-us;q=0.7,en;q=0.3
    Accept-Encoding: gzip,deflate
    Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
    Keep-Alive: 300
    Connection: keep-alive
    [B]Referer: http://www.domain.com/bla-bla[/B]
    
    Его не столько нужно подменять в твоем случае, его надо просто добавить. Посмотри сам какой в итоге получается запрос на сервер. Если там нет реферера, добавь, если есть, подмени.
     
  3. disik

    disik Создатель

    Регистр.:
    30 дек 2007
    Сообщения:
    17
    Симпатии:
    0
    каким образом его можно указать, если я передаю данные через форму???

    <FORM METHOD="post" ACTION="POST http://site.ru">

    Введите имя: <INPUT NAME="name"></BR></BR>
    Введите капчу: <INPUT NAME="pic"></BR></BR>
    <INPUT type="submit" value="Регистрировать">

    </FORM>
     
  4. Hemi-Sync

    Hemi-Sync Постоялец

    Регистр.:
    17 дек 2006
    Сообщения:
    88
    Симпатии:
    38
    Я тебя тогда неверно понял. Я подумал, что у тебя локальный скрипт обращается на сервер методом POST, а у тебя просто сохраненная форма с другим action

    В таком случае ты ничего не сможешь сделать, потому что браузер сам формирует запрос. Можно лишь отловить запрос и подменить. Тот же TamperData, но лучше для этой цели под огнелисом использовать RefControl
     
  5. -=Xardas=-

    -=Xardas=-

    Регистр.:
    17 сен 2008
    Сообщения:
    250
    Симпатии:
    58
    ACTION="POST http://site.ru" поменяй на ACTION="somfile.php", потом сделай на локалхосте скрипт somfile.php который будет ловить этот запрос, менять рефера и отсылать запрос на http://site.ru :)
     
    roddik нравится это.
  6. greyfills

    greyfills Создатель

    Регистр.:
    26 июл 2007
    Сообщения:
    21
    Симпатии:
    8
    А не проще (если это конечно типа денвера ,локальный веб сервер), создать новый домен и с этого домена отсылать запрос? По идее можно даже рефер google.com передать.
    Или я в чем то неправ ?
     
    disik нравится это.
  7. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    883
    Симпатии:
    540
    При этом адрес в адресной строке будет http://мой сайт.ru И подменить можно будет только первый раз. А второй запрос всё равно получит рефера
    Ещё из корзины http://www.nulled.ws/showthread.php?t=50654
     
  8. Hemi-Sync

    Hemi-Sync Постоялец

    Регистр.:
    17 дек 2006
    Сообщения:
    88
    Симпатии:
    38
    При таком раскладе запрос на удавленный сервер никогда не уйдет, а будет замыкаться на денвер из-за модифицированного файла hosts.

    ну почему же. мы же не знаем как там устроено у ТС. somfile.php это своеобразная прокся с подменой рефереров. Раньше бы я использовал для этой цели (а я для этой цели его часто использовал) proxomitron, который не привязывается только к огнелису, а является "прокси-фильтром" для любого браузера.

    И вообще неясно зачем такая локальная форма. Почему нельзя открывать прямо на сайте. Мне только один раз понадобилось такое когда я у спонса инфу менял, которую запрещено было менять :)
     
  9. disik

    disik Создатель

    Регистр.:
    30 дек 2007
    Сообщения:
    17
    Симпатии:
    0
    хм отличная идея... ))) но все же сперва попробую через cURL сделать...

    Добавлено через 8 минут
    ACTION="POST http://site.ru" - это описка, сделано так как и писал ты, но я так понял таким методом рефер поменять неудастся, буду пробывать все это делать через cURL
     
  10. rex1963

    rex1963

    Регистр.:
    19 фев 2007
    Сообщения:
    228
    Симпатии:
    47
    Вообще то передача данных методом пост идет так
    PHP:
    $fp fsockopen($host80$errno$errstr30); 
      
    // Проверяем успешность установки соединения 
      
    if (!$fp) echo "$errstr ($errno)<br />\n"
      else 
      { 
     
        
    // Данные POST-запроса 
        
    $data "$post&\r\n\r\n";
        
    // Формируем HTTP-заголовки для передачи 
        // его серверу /htsrv/comment_post.php
        
    $headers "POST $path HTTP/1.1\r\n"
        
    $headers .= "Host: $host\r\n"
        
    $headers .= "Content-type: application/x-www-form-urlencoded\r\n"
        
    $headers .= "Content-Length: ".strlen($data)."\r\n"
        
    // Подделываем cookie 
    $headers .= "Cookie: PHPSESSID=$SID;\r\n"
        
    $headers .= "Referer: http://dupa.pl/\r\n";
        
    $headers .= "User-Agent: Opera/8.01 (Windows NT 5.1; U; ru)\r\n";
        
    $headers .= "Connection: Close\r\n\r\n"
        
        
    // Отправляем HTTP-запрос серверу 
     
        // Отправляем HTTP-запрос серверу 
        
    fwrite($fp$headers.$data); 
        
    // Получаем ответ 
        
    $text="";
        
    $count=0;
       while (!
    feof($fp)) 
        { 
          
    $text .= fgets($fp1024); 
           
         
    $count++;
         if(
    $count ==50)
          {

          break;
        }
          
        }
        
    fclose($fp); 
       echo 
    $text;
      } 
     
Статус темы:
Закрыта.