2009-06-02 5 views
17

To może być głupie pytanie, ale czy możliwe jest uchwycenie tego, co użytkownik wpisał w polu wyszukiwania Google, aby można było następnie użyć go do wygenerowania dynamicznej strony na stronie docelowej w mojej witrynie sieci Web?Czy można przechwycić wyszukiwane hasło z wyszukiwarki Google?

Załóżmy na przykład, że ktoś wyszukuje w Google hasło "hot dog", a moja witryna jest wyświetlana jako jeden z linków do wyników wyszukiwania. Jeśli użytkownik kliknie link, który kieruje go do mojej witryny sieci Web, możliwe jest, że w jakiś sposób znam lub przechwytuję tekst "hot doga" z pola wyszukiwania Google, aby móc wywołać skrypt, który przeszukuje moją lokalną bazę danych pod kątem zawartości związane z hot-dogami, a następnie wyświetlić to? Wydaje mi się to całkowicie niemożliwe, ale tak naprawdę nie wiem. Dzięki.

+1

Należy pamiętać, że strona odsyłająca może zostać sfałszowana lub zablokowana całkowicie w zachciankach klienta. – Powerlord

+1

tylko notatkę, ponieważ jesteś nowy: nie bądź tak szybki, aby zaakceptować pierwszą odpowiedź. tylko dlatego, że ma 1 lot, nie oznacza to jego prawa. – TStamper

+0

@TStamper: Dobra rada i dzięki za napiwek. Byłem zbyt podekscytowany, jak szybko dostałem odpowiedź. – johnnyb10

Odpowiedz

13

Tak, jest to możliwe. Zobacz nagłówek HTTP Referer. Nagłówek Referer będzie zawierał URL strony wyników wyszukiwania Google.

Gdy użytkownik kliknie link na stronie wyników wyszukiwania Google, przeglądarka wyśle ​​żądanie do witryny z tego rodzaju nagłówka HTTP:

Referer: http://www.google.fi/search?hl=en&q=http+header+referer&btnG=Google-search&meta=&aq=f&oq= 

Wystarczy analizowania URL z nagłówka żądania, termin wyszukiwania używany przez użytkownika będzie w q -parametr. Wyszukiwane hasło użyte w powyższym przykładzie to "referer nagłówka http".

Takie samo podejście zwykle działa również w przypadku innych wyszukiwarek, mają one po prostu inny rodzaj adresu URL w nagłówku Referer.

Ten answer pokazuje, jak zaimplementować to w PHP.


Nagłówek referer dostępny jest tylko z HTTP 1.1, ale obejmuje prawie każdą nieco nowoczesną przeglądarkę. Przeglądarka może również przekierować nagłówek Referera lub może brakować nagłówka, więc nie rób zbyt poważnych desykacji na podstawie nagłówka Referer.

+3

Poza tym, aby Twoja strona pojawiała się w wynikach wyszukiwania, musi ona już zawierać odpowiednią treść – kdgregory

+6

zmiany bezpieczeństwa Google z końca 2011 roku nie są już możliwe, gdy wyszukiwanie zostało przeprowadzone przez zalogowanego użytkownika Google: http://googleblog.blogspot.com/2011/10/making-search-more-secure.html i http : //analytics.blogspot.com/2011/10/making-search-more-secure-accessing.html –

1

Tak, chodzi w url:

http://www.google.com/search?hl=es&q=hot+dog&lr=&aq=f&oq=

Oto przykład:

Google wysyła wielu użytkowników do witryny, jeśli chcesz uzyskać słowa kluczowe kiedyś przyjść na swoją stronę, może zrobić wrażenie na nich, wyświetlając go na stronie, lub po prostu zapisać słowo kluczowe w bazie danych, tutaj jest kod PHP, którego używam:

// take the referer 
$thereferer = strtolower($_SERVER['HTTP_REFERER']); 
// see if it comes from google 
if (strpos($thereferer,"google")) { 
    // delete all before q= 
    $a = substr($thereferer, strpos($thereferer,"q="));  
    // delete q= 
    $a = substr($a,2); 
    // delete all FROM the next & onwards 
    if (strpos($a,"&")) { 
     $a = substr($a, 0,strpos($a,"&")); 
    } 
    // we have the results. 
    $mygooglekeyword = urldecode($a); 
} 

and we can use <?= $mygooglekeywords ?> when we want to output the 
keywords. 
+1

Wow, dziękuję wszystkim. Jestem jednym upartym nowicjuszem. Wysłałem moje pytanie cztery minuty temu i otrzymałem trzy pomocne odpowiedzi. Reguły przepełnienia stosu! – johnnyb10

+1

Istnieje wiele lepszych sposobów na zrobienie tego niż to. PHP ma wbudowaną funkcję do analizy adresu URL. parse_url, parse_str tworzy 3 linie. –

0

Możesz pobrać odnoszący się adres URL i pobrać wyszukiwane hasło z ciągu zapytania. Wyszukiwanie będzie w zapytaniu jako "q = searchTerm", gdzie searchTerm jest tekstem, który chcesz.

24

zrobiłbym to jak ten

$referringPage = parse_url($_SERVER['HTTP_REFERER']); 
if (stristr($referringPage['host'], 'google.')) 
{ 
    parse_str($referringPage['query'], $queryVars); 
    echo $queryVars['q']; // This is the search term used 
} 
+0

+1 o wiele czystszy sposób na zrobienie tego. –

+1

+1 za tworzenie kodu zgodnego z międzynarodowymi nazwami domen Google (google.fi, google.de itp.) Oraz z wyszukiwaniem google. –

+1

dzięki! Sądzę, że wciąż istnieje potencjał fałszywego pozytywu - ktoś z google.domain.com - ale to był tylko przykład. Możesz go zaostrzyć, sprawdzając również wartość $ referringPage ['path'], a następnie prosty check isset() na $ queryVars ['q'] –

0

samo, ale z jakiegoś błędu obsługi

<?php 
if (@$_SERVER['HTTP_REFERER']) { 
    $referringPage = parse_url($_SERVER['HTTP_REFERER']); 
    if (stristr($referringPage['host'], 'google.')) { 
     parse_str($referringPage['query'], $queryVars); 
     $google = $queryVars['q']; 
     $google = str_replace("+"," ",$google); } 
    else { $google = false; }} 
else { $google = false; } 

if ($google) { echo "You searched for ".$google." at Google then came here!"; } 
else { echo "You didn't come here from Google"; } 
?> 
0

Niestety, niewiele więcej
Dodaje wsparcie dla Bing, Yahoo i Altavista

<?php 
if (@$_SERVER['HTTP_REFERER']) { 
    $referringPage = parse_url($_SERVER['HTTP_REFERER']); 
    if (stristr($referringPage['host'], 'google.') 
     || stristr($referringPage['host'], 'bing.') 
     || stristr($referringPage['host'], 'yahoo.')) { 
      parse_str($referringPage['query'], $queryVars); 
      if (stristr($referringPage['host'], 'google.') 
       || stristr($referringPage['host'], 'bing.')) { $search = $queryVars['q']; } 
         else if (stristr($referringPage['host'], 'yahoo.')) { $search =  $queryVars['p']; } 
         else { $search = false; } 
      if ($search) { $search = str_replace("+"," ",$search); }} 
      else { $search = false; }} 
else { $search = false; } 
if ($search) { echo "You're in the right place for ".$search; } 
?> 
+0

NB: altavista wydaje się być własnością yahoo, kiedy przeszukujesz go, zostajesz przekierowany na stronę wyszukiwania Yahoo, więc szukaj yahoo.w nagłówku obejmuje obie wyszukiwarki – Senya

13

To jest stare pytanie, a odpowiedź zmieniła się od czasu lub Pytanie iginalne zostało zadane i udzielono odpowiedzi. Od października 2011 r. Google szyfruje te informacje o poleceniach dla każdego, kto jest zalogowany na konto Google: http://googleblog.blogspot.com/2011/10/making-search-more-secure.html

W przypadku użytkowników niezalogowanych do Google słowa kluczowe wyszukiwania nadal znajdują się w adresie URL odsyłacza, a powyższe odpowiedzi nadal obowiązują. Jednak w przypadku uwierzytelnionych użytkowników Google nie ma możliwości, aby strona internetowa widziała ich słowa kluczowe związane z wyszukiwaniem.

Jednak dzięki specjalnym stronom docelowym nadal możliwe jest inteligentne odgadnięcie. (Odwiedzający stronę "Godne szkice węglowe Jabby the Hutt" prawdopodobnie ... no cóż, obłąkani.)

5

To jest stare pytanie, ale odkryłem, że google nie podaje więcej hasła, ponieważ jest domyślnie przekierowuje każdego użytkownika na https, który nie daje parametru "q". Chyba, że ​​ktoś ręcznie wprowadzi adres URL google za pomocą http (http://google.com), a następnie przeszukuje, nie ma sposobu, aby od razu uzyskać parametr "q".

+0

Oto odpowiedź, której bałem się znaleźć. Zauważyłem, że moje śledzenie w wyszukiwaniu nie ma obecnie żadnych wyszukiwanych haseł i to musi być powód. – felwithe