[php] HTTP_REFERER -> voor hele domein

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • verytallman
  • Registratie: Augustus 2001
  • Laatst online: 18-08 18:12
Ik heb een check of iemand via mijn domein een bestand opvraagt met :
PHP:
1
if ($_SERVER['HTTP_REFERER'] == "http://www.domein.nl/index.php") {

Maar dan kan je via andere pagina's in mijn domein geen toegang krijgen.
Ik wil dat hij alle pagina's binnen http://www.domein.nl toegang geeft

Acties:
  • 0 Henk 'm!

  • Koppensneller
  • Registratie: April 2002
  • Laatst online: 17:36

Koppensneller

winterrrrrr

Je kunt met reguliere expressies vrij eenvoudig een string controleren op een aantal zaken, en dan moet je denken aan iets als:

http://www.domein.nl/*

Lees op php.net de functie regexp() ereg() eens door...

[ Voor 4% gewijzigd door Koppensneller op 09-03-2005 22:34 ]


Acties:
  • 0 Henk 'm!

  • mrFoce
  • Registratie: Augustus 2004
  • Laatst online: 09-09 17:18
verytallman schreef op woensdag 09 maart 2005 @ 22:28:
Ik heb een check of iemand via mijn domein een bestand opvraagt met :
PHP:
1
if ($_SERVER['HTTP_REFERER'] == "http://www.domein.nl/index.php") {

Maar dan kan je via andere pagina's in mijn domein geen toegang krijgen.
Ik wil dat hij alle pagina's binnen http://www.domein.nl toegang geeft
erm ? wat bedoel je , formuleer is even wat duidelijker.

Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
hugodejong schreef op woensdag 09 maart 2005 @ 22:31:
Lees op php.net de functie regexp() eens door...
De functie preg_match() bedoel je dan neem ik aan.

Ik zou eerder iets doen als:
PHP:
1
2
$domein = "http://www.domein.nl";
if(substr($_SERVER['HTTP_REFERER'],0,strlen($domein)) == $domein) {

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

GlowMouse schreef op woensdag 09 maart 2005 @ 22:34:
De functie preg_match() bedoel je dan neem ik aan.

Ik zou eerder iets doen als:
PHP:
1
2
$domein = "http://www.domein.nl";
if(substr($_SERVER['HTTP_REFERER'],0,strlen($domein)) == $domein) {
Zoiets zou ik ook doen, aangezien een regexp voor zoiets als dit natuurlijk erg overdreven is. :P Het is geen variabel patroon.

Pas wel op dat de HTTP_REFERER niet altijd geset hoeft te zijn, i.v.m. proxies of iets dergelijks. Ook is het in principe mogelijk om het te faken. Iemand kan zelf een PHP script maken, en dan via cURL de headers setten, en alles wat via cURL binnen komt meteen doorgeven aan de browser. Het is dus geen manier van beveiligen! Het is wel een relatief simpele manier om offsite linking van images tegen te gaan of iets dergelijks.

[ Voor 8% gewijzigd door NMe op 09-03-2005 22:42 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • verytallman
  • Registratie: Augustus 2001
  • Laatst online: 18-08 18:12
Ja precies, het is een simpele controle om linken van mijn images tegen te gaan, verder niets.

Ik had dit bedacht maar het werkt niet:
PHP:
1
2
3
$domein = "http://www.domein.nl";
$referer = $_SERVER['HTTP_REFERER'];
if ( preg_match($domein, $referer) ) {

Ik zie geen fout eigenlijk...?

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

verytallman schreef op woensdag 09 maart 2005 @ 22:45:
Ja precies, het is een simpele controle om linken van mijn images tegen te gaan, verder niets.

Ik had dit bedacht maar het werkt niet:
PHP:
1
2
3
$domein = "http://www.domein.nl";
$referer = $_SERVER['HTTP_REFERER'];
if ( preg_match($domein, $referer) ) {

Ik zie geen fout eigenlijk...?
In regular expressions moet je punten en dergelijke escapen. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
verytallman schreef op woensdag 09 maart 2005 @ 22:45:
PHP:
1
2
3
$domein = "http://www.domein.nl";
$referer = $_SERVER['HTTP_REFERER'];
if ( preg_match($domein, $referer) ) {

Ik zie geen fout eigenlijk...?
Ik wel: je gebruikt je domein en geen patroon (reguliere expressie). Daarover kun je hier meer informatie vinden.

Acties:
  • 0 Henk 'm!

  • verytallman
  • Registratie: Augustus 2001
  • Laatst online: 18-08 18:12
THX jongens, het is gelukt, ik heb er dit van gemaakt:
PHP:
1
2
3
$domein = "http://www.domein.nl";
$referer = substr($_SERVER['HTTP_REFERER'], 0, strlen($domein));
if ($domein = $referer) {

Acties:
  • 0 Henk 'm!

  • MJV
  • Registratie: Mei 2003
  • Laatst online: 15:07

MJV

verytallman schreef op woensdag 09 maart 2005 @ 23:06:
THX jongens, het is gelukt, ik heb er dit van gemaakt:
PHP:
1
2
3
$domein = "http://www.domein.nl";
$referer = substr($_SERVER['HTTP_REFERER'], 0, strlen($domein));
if ($domein = $referer) {
Ik zou er nog wel even twee =-tekens van maken, zo geeft ie altijd true terug.

Acties:
  • 0 Henk 'm!

  • verytallman
  • Registratie: Augustus 2001
  • Laatst online: 18-08 18:12
Hey, ik vond het vanavond met programmeren al zo goed gaan....alles gaf true !

merci ;)

Acties:
  • 0 Henk 'm!

  • Xandrios
  • Registratie: Februari 2001
  • Laatst online: 16:24
Niet om 't een of ander, maar waarom pak je niet gewoon een .htaccess file ? Daarmee kun je elk bestandstype heel gemakkelijk blokkeren/toegang geven aan de hand van de referrer :)

Acties:
  • 0 Henk 'm!

  • verytallman
  • Registratie: Augustus 2001
  • Laatst online: 18-08 18:12
Ja dat ga ik ook nog doen :P

Maar ik wist dat dit ook kon en dan wil ik gewoon weten hoe het moet. Zo leer je nog is wat nieuws. Je moet ook niet in een patroon komen dat je (slechtere) makkelijkere alternatieven neemt omdat je iets niet snapt. Niet dat het hier het geval is.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

verytallman schreef op woensdag 09 maart 2005 @ 23:26:
Ja dat ga ik ook nog doen :P

Maar ik wist dat dit ook kon en dan wil ik gewoon weten hoe het moet. Zo leer je nog is wat nieuws. Je moet ook niet in een patroon komen dat je (slechtere) makkelijkere alternatieven neemt omdat je iets niet snapt. Niet dat het hier het geval is.
Je hebt nu juist het "slechtere" alternatief gekozen. :+ Al verschillen de methodes vrij weinig in dit geval kwa functionaliteit.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • verytallman
  • Registratie: Augustus 2001
  • Laatst online: 18-08 18:12
-NMe- schreef op woensdag 09 maart 2005 @ 23:35:
[...]

Je hebt nu juist het "slechtere" alternatief gekozen. :+ Al verschillen de methodes vrij weinig in dit geval kwa functionaliteit.
Ik ga het dus ook nog in de .htaccess zetten.

Als ik nu de volgende keer iets anders (wel goede oplossing) met preg_match wil doen, weet ik hoe het moet. Dat bedoelde ik alleen.

Acties:
  • 0 Henk 'm!

  • Suepahfly
  • Registratie: Juni 2001
  • Laatst online: 17-09 17:05
Waarom moeilijk doen als het makkelijk kan
.htaccess
code:
1
2
3
4
5
6
7
8
9
10
11
RewriteEngine On 
#Dit is je "Do not hotlink plaatje
RewriteCond %{REQUEST_URI} !hotlink\.png$ 
RewriteCond %{REQUEST_FILENAME} .*jpg$|.*gif$|.*png$|.*jpeg$|.*bmp$|.*wbm$ [NC]

# Lijstje met hosts die wel mogen linken
RewriteCond %{HTTP_REFERER} !google\. [NC]
RewriteCond %{HTTP_REFERER} !search\?q=cache [NC]

#Relatieve URL naar hotlink plaatje
RewriteRule (.*) /images/hotlink\.png [L]

Let er op dat je punten/vraagtekens escaped

Acties:
  • 0 Henk 'm!

  • mrFoce
  • Registratie: Augustus 2004
  • Laatst online: 09-09 17:18
Suepahfly schreef op donderdag 10 maart 2005 @ 00:02:
Waarom moeilijk doen als het makkelijk kan
.htaccess
code:
1
2
3
4
5
6
7
8
9
10
11
RewriteEngine On 
#Dit is je "Do not hotlink plaatje
RewriteCond %{REQUEST_URI} !hotlink\.png$ 
RewriteCond %{REQUEST_FILENAME} .*jpg$|.*gif$|.*png$|.*jpeg$|.*bmp$|.*wbm$ [NC]

# Lijstje met hosts die wel mogen linken
RewriteCond %{HTTP_REFERER} !google\. [NC]
RewriteCond %{HTTP_REFERER} !search\?q=cache [NC]

#Relatieve URL naar hotlink plaatje
RewriteRule (.*) /images/hotlink\.png [L]

Let er op dat je punten/vraagtekens escaped
Niet elke host ondersteund dit. Dus -> waarom moeilijk doen als het makkelijk kan <- slaat op zich nergens op..

Acties:
  • 0 Henk 'm!

  • r0b
  • Registratie: December 2002
  • Laatst online: 14:54

r0b

gideon82 schreef op donderdag 10 maart 2005 @ 00:04:
[...]


Niet elke host ondersteund dit. Dus -> waarom moeilijk doen als het makkelijk kan <- slaat op zich nergens op..
Een (commerciële) host die mod_rewrite niet aan heeft staan mag zichzelf geen host noemen. :+
Maw: dit staat toch vaak wél aan hoor.

[ Voor 8% gewijzigd door r0b op 10-03-2005 02:05 ]


Acties:
  • 0 Henk 'm!

  • mrFoce
  • Registratie: Augustus 2004
  • Laatst online: 09-09 17:18
r0b schreef op donderdag 10 maart 2005 @ 02:04:
[...]


Een (commerciële) host die mod_rewrite niet aan heeft staan mag zichzelf geen host noemen. :+
Maw: dit staat toch vaak wél aan hoor.
yeah right, vergeet jij ook ff dat Microsoft ook servers heeft zoals IIS..

Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 18-09 14:42
Vergeet niet te controlleren of de HTTP_REFERER uberhaupt geset is;
PHP:
1
2
3
$domein = "http://www.domein.nl"; 
if(isset($_SERVER['HTTP_REFERER']) && !empty($_SERVER['HTTP_REFEREr']) && !strpos($domein, $_SERVER['HTTP_REFERER']))
  exit("Foutieve referer");


Doe je dit niet, dan benadeel je iedereen die vanaf een proxy surft, of de http_referer heeft uitstaan.
Pagina: 1