Deeplinken tegengaan

Vragen over Server-Side scripttalen (PHP, CGI, ASP, ...)

Deeplinken tegengaan

Berichtdoor Mindstorms op ma 18 jan 2010, 22:48

Beste Wf'ers,

Ik heb het volgende script om deeplinking van mijn downloads tegen te gaan:
  1. function GetReferer() {
  2. $yoursite = "t-tools.nl"; //Your site url without http://
  3. $yoursite2 = "www.t-tools.nl"; //Type your domain with www. this time
  4.  
  5. $referer = $_SERVER['HTTP_REFERER'];
  6.  
  7. //Check if browser sends referrer url or not
  8. if ($referer == "") { //If not, set referrer as your domain
  9. $domain = $yoursite;
  10. } else {
  11. $domain = parse_url($referer); //If yes, parse referrer
  12. }
  13.  
  14. if ($domain['host'] == $yoursite || $domain['host'] == $yoursite2) {
  15.  
  16.   return true;
  17.    
  18.     } else {
  19.  
  20. return false;
  21.  
  22. }
  23. }


Ik krijg echter reacties dat men niet op de download kan klikken. Hebben jullie enig idee hoe dat zou kunnen, of een beter script?


Mindstorms
Laatst bijgewerkt door Mindstorms op wo 20 jan 2010, 22:12, in totaal 5 keer bewerkt
Mindstorms
WSF+ Lid
 
Berichten: 64

Re: Deeplinken tegengaan

Berichtdoor Thumbnail op di 19 jan 2010, 00:09

zalwel aan mij liggen, amar als je nu kijkt is alles een comment
beschikbaar via msn voor hulp...
Avatar gebruiker
Thumbnail
WSF+ Lid
 
Berichten: 368

Re: Deeplinken tegengaan

Berichtdoor Mindstorms op wo 20 jan 2010, 22:15

Wf deed ontzettend moeilijk met het plakken van mijn code (A), maar dit is het.

Het wordt zo aangeroepen:
  1. if (GetReferer() == false) {//The referrer is not your site, we redirect to your home pageheader("Location: http://www.t-tools.nl/deeplink.php");exit(); //Stop running the script}
Mindstorms
WSF+ Lid
 
Berichten: 64

Re: Deeplinken tegengaan

Berichtdoor menubalk op do 21 jan 2010, 09:43

De downloadpagina kun je misschien wel beschermen, maar de directe downloadlinks volgens mij niet.
Daar komt namelijk totaal geen php code aan te pas:

www.website.nl/file.rar
Avatar gebruiker
menubalk
WSF Lid
 
Berichten: 335

Re: Deeplinken tegengaan

Berichtdoor Mindstorms op do 21 jan 2010, 14:02

Dat weet ik, maar daar gaat het ook niet om. De download wordt gestart via een kliksysteem waarin hetzelfde refererscript wordt aangeroepen. Je komt dus nooit achter de locatie van het bestand...
Mindstorms
WSF+ Lid
 
Berichten: 64

Re: Deeplinken tegengaan

Berichtdoor Thumbnail op zo 24 jan 2010, 09:42

(firefox) ctrl+j (downloadvenster openen) -> rechtermuisknop -> downloadlink kopiëren :P
beschikbaar via msn voor hulp...
Avatar gebruiker
Thumbnail
WSF+ Lid
 
Berichten: 368

Re: Deeplinken tegengaan

Berichtdoor rdewit op za 06 maart 2010, 19:20

Ik denk dat je dan moet denken aan een htaccess die directe toegang blokkeert en dat je alleen kunt downloaden en acces geeft als het script (server IP dus) het bestand aanroept.
rdewit
WSF+ Lid
 
Berichten: 85

Re: Deeplinken tegengaan

Berichtdoor Jasper op za 06 maart 2010, 20:24

Waarom zou je via een php-script op de server een bestand op diezelfde server via http aan gaan roepen? Dat kun je gewoon intern doen (goede header geven, dan echo file_get_contents("../../downloads/bestand");)
Als je het bestand buiten je public_html zet en je referer-script voor het download-script plakt, is het redelijk waterdicht.

Let wel op dat sommige browsers ingesteld zijn om de referer-tag niet mee te sturen en je hem ook kunt faken!
Avatar gebruiker
Jasper
WSF+ Lid
 
Berichten: 782

Re: Deeplinken tegengaan

Berichtdoor matrebatre op zo 07 maart 2010, 01:27

Niet vreemd dat het niet werkt:
  1. $yoursite = "www.website.nl";
  2. // even later
  3. $domain = $yoursite;
  4. // even later
  5. if ($domain['host'] == $yoursite || $domain['host'] == $yoursite2) {
  6. // rarara, waarom werkt dit niet?

De oplossing is natuurlijk om lijn 9 te vervangen door return true;.

Maar waarom zo moeilijk? Een paar regels in .htaccess zijn genoeg!
  1. RewriteEngine On
  2.  
  3. RewriteCond %{HTTP_REFERER} !^$
  4. RewriteCond %{HTTP_REFERER} !^http://www\.mijnwebsite\.nl/
  5. RewriteCond %{HTTP_REFERER} !^http://subdomein\.mijnwebsite\.nl/
  6. RewriteCond %{HTTP_REFERER} !^http://www\.websiteforum\.nl/
  7. RewriteRule ^images/ /no_deeplinking.png [L,NS]
  8.  
  9. RewriteCond %{HTTP_REFERER} !^$
  10. RewriteCond %{HTTP_REFERER} !^http://www\.mijnwebsite\.nl/
  11. RewriteRule ^downloads/ /no_deeplinking.htm [L,NS]

Je voegt gewoon een lijst in met toegestane adressen (bijvoorbeeld je eigen website met eventueel subdomeinen, en andere websites zoals fora die wel toegang moeten hebben). De eerste regel is nodig zodat mensen zonder referer (sommige firewalls en/of routers halen die weg) ook toegang krijgen. Daar moet je je niet echt zorgen over maken, als de beveiliging werkt tegen 50% van de bezoekers is dat voor andere webmasters genoeg reden om het niet te doen. Afbeeldingen die je wilt beschermen stuur je door naar een afbeelding (zodat img-tags blijven werken, anders krijg je gewoon een rood kruisje op de vreemde site), de rest gewoon naar een webpagina (bijvoorbeeld de downloadpagina op jouw site). Het leuke is dat hiermee een mooie opvallende "DEEPLINKING IS VERBODEN!!!"-afbeelding verschijnt op de vreemde site :P.

EDIT: Die code tags mogen wel eens gerepareerd worden :P.
Avatar gebruiker
matrebatre
WSF Lid
 
Berichten: 27

Re: Deeplinken tegengaan

Berichtdoor Jasper op zo 07 maart 2010, 01:56

Wat is er mis met de code-tags?
Die eerste regel zorgt er trouwens ook voor dat het wel werkt als je de tekst in de adresbalk van de browser plakt en er dan heengaat.
Avatar gebruiker
Jasper
WSF+ Lid
 
Berichten: 782

Re: Deeplinken tegengaan

Berichtdoor matrebatre op zo 07 maart 2010, 02:23

Jasper schreef:Wat is er mis met de code-tags?
Die eerste regel zorgt er trouwens ook voor dat het wel werkt als je de tekst in de adresbalk van de browser plakt en er dan heengaat.

De code-tags verwijderen alle newlines elke keer als ik op 'voorbeeld' klik, wat betekent dat ik voor ik op die knop klik elke keer alles moet selecteren en kopiëren zodat ik het kan plakken op de nieuwe pagina :).

Het is toch de bedoeling dat als je de URL intypt dat je het bestand kan downloaden? Als je een URL intypt in de adresbalk is de referer altijd leeg (de referer is namelijk de gebruiker zelf, niet een andere website). Als je echt wilt dat je de downloadlink enkel kan bereiken via de downloadpagina moet je ook nog een soort van downloadticket-systeem maken: Wanneer de gebruiker de pagina bezoekt maak je een entry in een database waarin je het IP van de gebruiker opslaat en een willekeurig getal genereert. Bij de downloadlink geef je dat getal mee. Het download-script zoekt het nummer in de database, en als het bestaat en het IP overeenkomt verwijdert het die entry en start de download. Maar dat lijkt me nogal overdreven :).
Avatar gebruiker
matrebatre
WSF Lid
 
Berichten: 27

Re: Deeplinken tegengaan

Berichtdoor Bram op zo 07 maart 2010, 11:05

@ Jasper (off-topic): die code-tag bug loopt al tijden, maar we hebben nog geen flauw idee waar het aan kan liggen. Jij misschien 'n suggestie?
SupervisionAir - UnderWaterWorld - PeerlingsPictures - Den Möllenhof 63 - A+ Webdesigns
EOS400d + Sigma 18-50 + EF 24-70 F2.8 L USM + EF 70-200 F4 L USM + EF 1.4x II + SlingShot 300AW + 055XPROB + SBH-100
Avatar gebruiker
Bram
WSF Moderator
 
Berichten: 3724


Keer terug naar Server-side


Wie is er online

Gebruikers op dit forum: Geen geregistreerde gebruikers en 1 gast

Je bent niet ingelogd

Starthosting

Actueel