20

Sierpień

Gdy ktoś kradnie Twoją treść

Andrzej Dunowski | 20.08.2009

Internet security

Tworzysz serwis, zdobywasz autorów, pozyskujesz ciekawe zdjęcia… mozolną pracą zdobywasz oglądalność i cieszysz się z każdego tysiąca odsłon. Aż tu pewnego dnia serfując po sieci zauważasz, że gdzieś w sieci ktoś zamieścił u siebie Twój artykuł bez Twojej zgody i to jeszcze ze zdjęciami wyświetlanymi z Twojego serwera. Czasem złodziej (nazywajmy rzeczy po imieniu) umieszcza informację skąd pochodzi dana treść, ale przecież Ty na to nie wyraziłeś zgody!

Można oczywiście napisać prośbę o usunięcie danej treści i czekać aż autor strony to zrobi albo i nie. Jeśli do owego artykułu zostały dodane zdjęcia wyświetlane wprost z Twojego serwera można podmienić je na inne ;)

Można wyróżnić obecnie dwa sposoby wyświetlania grafiki na serwisach internetowych:

  • klasyczny, polegający na bezpośrednim adresowanie pliku grafiki
  • poprzez skrypt (np. php) pośredniczący pomiędzy plikiem graficznym a przeglądarką, który zazwyczaj ma na celu skalowanie/kadrowanie grafiki do odpowiednich rozmiarów i często cachowanie.

W obu przypadkach możemy mieć wpływ na to co wysyłamy do przeglądarki w zależności od tego co sobie wymyślimy. Nam zależy na wykryciu adresu strony, która zgłasza się po plik i odpowiednim zareagowaniu. Posłużymy się przy tym zmienną $_SERVER["HTTP_REFERER"], która zawiera adres poprzedniej strony a w naszym przypadku adres strony na której ma zostać wyświetlana nasza grafika.

Jako, że będziemy robili to w php to drugi przypadek ze skryptem pośredniczącym w wyświetlaniu grafiki napisanym w php upraszcza całą zabawę. Na początku znajdujemy grafikę, którą chcemy wyświetlić zamiast oryginalnych, np.

nie kradnij

z adresem http://leszczynowa11.pl/img/nie-kradnij.gif

Nasz kod php do zamieszczenia na początku skryptu pośredniczącego w wyświetlaniu grafiki wygląda następująco:

1
if (eregi("zamiescilem-nie-swoja-tresc.pl", $_SERVER["HTTP_REFERER"])) {  
2
  header("location: http://leszczynowa11.pl/img/nie-kradnij.gif");  
3
  exit;  
4
}

Prościutkie, prawda? ;)

Można się pokusić o wyświetlanie kilku grafik wybieranych losowo:

01
if (eregi("zamiescilem-nie-swoja-tresc.pl", $_SERVER["HTTP_REFERER"])) {     
02
  $img = array(     
03
    "http://leszczynowa11.pl/img/nie-kradnij.gif",  
04
    "...",     
05
    "..."     
06
  );     
07
  srand((float) microtime() * 10000000);     
08
  $rand = array_rand($img);     
09
  header ("location: " . $img[$rand]);     
10
  exit;     
11
}

w tablicy $img można zamieścić dowolną ilość adresów URL grafik.

Sprawa się komplikuje, gdy wyświetlamy grafiki w sposób klasyczny, wtedy musimy wykorzystać mod_rewrite. W tym celu tworzymy plik .htacces, który zamieścimy w katalogu gdzie trzymamy nasze pliki (w przykładzie jest to “images”). Skrypt będzie też działał w podkatalogach:

1
RewriteEngine on     
2
RewriteBase /images     
3
RewriteRule (.*) index.php

Tworzymy do tego skrypt php, który od teraz będzie pośredniczył w wyświetlaniu wszystkich grafik znajdujących się w tym katalogu:

01
$dir = "/images/";     
02
$file = str_replace($dir, "", $_SERVER["REQUEST_URI"]);     
03
if (eregi("zamiescilem-nie-swoja-tresc.pl", $_SERVER["HTTP_REFERER"])) {     
04
  $img = array(     
05
    "http://leszczynowa11.pl/img/nie-kradnij.gif",  
06
    "...",     
07
    "..."     
08
  );     
09
  srand((float) microtime() * 10000000);     
10
  $rand = array_rand($img);     
11
  header ("location: " . $img[$rand]);     
12
  exit;     
13
}     
14
$fp = fopen($file, "r");     
15
fpassthru($fp);     
16
fclose($fp);

Mamy rozwiązanie na oba przypadki i uśmiech na twarzy gdy u kogoś zamiast naszego zdjęcia pokaże się inne :)

Jak już się rozkręciliśmy, to warto dorzucić jeszcze parę linijek i śledzić gdzie nasze zdjęcia się wyświetlają poza naszym serwisem. Całość najprościej logować w bazie MySQL.
Tworzymy tabele “img”:

1
CREATE TABLE `img` (     
2
  `id` int( 11 ) NOT NULL AUTO_INCREMENT ,     
3
  `data` timestamp NOT NULL default CURRENT_TIMESTAMP ,     
4
  `url` varchar( 255 ) NOT NULL ,     
5
  `img` varchar( 255 ) NOT NULL ,     
6
  PRIMARY KEY ( `id` )     
7
);

i parę linijek php do zamieszczenia na początku:

01
if ($_SERVER]"HTTP_REFERER"] && !eregi ("nasz-serwis.pl", $_SERVER["HTTP_REFERER"])) {   
02
  $db = array(   
03
    "host" => "localhost",     
04
    "user" => "user",     
05
    "name" => "db",     
06
    "pass" => "pass"     
07
  );     
08
  $dblink = @mysql_connect($db["host"], $db["user"], $db["pass"]);     
09
  mysql_select_db($db["name"], $dblink);     
10
  $query = "INSERT INTO img (url, img) VALUES ('" . addslashes ($_SERVER["HTTP_REFERER"]) . "', '" . addslashes ($_SERVER["PATH_INFO"]) . "')";     
11
  mysql_query ($query);     
12
}

Oczywiście w paru miejscach trzeba zmienić wartości pod wasz serwis.

Miłego podmieniania :)



Komentarze

  1. Zdarza się, że niektórzy podmieniają ilustracje na mniej przyzwoite ;) A na forach w których internauci dzielą się plikami przez serwisy typu radpishare czasami da się zauważyć obrazek z tekstem “ściągaj majtki, nie filmy”, to dzieło ludzi ze Stopklatki :)

  2. ~ Andrzej Dunowski | 21.08.2009

    Jak nasz grafik wróci, to poproszę go o kilka graficzek pod różnego typu serwisy :)

  3. Właśnie się zastanawiałem, czemu nie napisaliście tego wcześniej, od razu po kradzieży:).
    Z resztą jak sami mogliśmy się przekonać (http://like-a-geek.jogger.pl/2009/08/03/) sposób jest skuteczny.

  4. ~ Andrzej Dunowski | 2.09.2009

    Powod prozaiczny – brak czasu by to sklecic ;)
    Twoj link prowadzi do pustki :)

  5. ~ Olga Sładkowska | 19.07.2010

    Witam,
    interesuje mnie tematyka przez Pana poruszana w artykule.
    Jeżeli byłby Pan zainteresowany umieszczeniem tego artykułu na naszej stronie oraz dłuższą współpracą zapraszam do kontaktu.
    Pozdrawiam
    Olga Sładkowska
    Software Press