[htaccess] Restrict access aan IP bepaalde gebruiker

Pagina: 1
Acties:

  • Bozozo
  • Registratie: Januari 2005
  • Laatst online: 20-02-2025

Bozozo

Your ad here?

Topicstarter
Ik ben bezig aan een webapp waarbij gebruikers plaatjes kunnen uploaden, om er vervolgens iets leuks mee te doen. Ik wil niet dat gebruikers plaatjes van elkaar kunnen zien.

Op het moment gebruik ik daarvoor PHP. Met een htaccess worden urls van de vorm ' image000.jpg' omgeschreven naar 'index.php?req=image000.jpg', waarna PHP middels readfile() de afbeelding toont, mits het IP-adres van de opvrager gelijk is aan het IP-adres van de uploader (staat in de database).

Eigenlijk vind ik het zonde om readfile() te gebruiken; een recource-verslindende functie alleen om toegang te regelen. Liever zou ik PHP hier helemaal niet bij betrekken.

Zou dit ook kunnen met alleen een htaccess? Stel, ik rename de files op de server naar image_[IP-address]_[img_nr].jpg. Daarna moet ik iets doen in de trant van:

code:
1
2
3
4
#doe hier url parsing om het IP adres uit de url te halen en op te slaan in ip_adres
order deny, allow
deny from All
allow from ip_adres
  1. Kan zoiets uberhaupt wel met htaccess?
  2. Is het verstandig (veilig) om dit te doen?
  3. Is het nuttig (sneller) om dit te doen ipv de PHP readfile() methode?

TabCinema : NiftySplit


  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

2: Waarom zou je dit op basis van IP adres willen doen ?
Er zijn genoeg voorbeelden te vinden waarbij, zonder dat de gebruiker hier invloed op heeft, verschillende adressen voor requests gebruikt worden; denk bijvoorbeeld aan proxies ...

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Op zich zou het moeten kunnen, maar mijn gevoel zegt me dat een steeds veranderende en steeds groter worder .htaccess niet echt goed is voor je performance.

Afaik is htaccess gemaakt voor kleine dingen, niet echt om voor 100.000 plaatjes allemaal aparte regels erin te hebben staan. Daar is php in combinatie met een dbase naar mijn idee veel beter in.

Plus dat je bij elk nieuw plaatje je htaccess even zit te rewriten lijkt me ook niet echt bevorderlijk op een beetje drukke site.

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • mrFoce
  • Registratie: Augustus 2004
  • Laatst online: 07-02 18:21
TheRookie schreef op donderdag 31 juli 2008 @ 13:04:
2: Waarom zou je dit op basis van IP adres willen doen ?
Er zijn genoeg voorbeelden te vinden waarbij, zonder dat de gebruiker hier invloed op heeft, verschillende adressen voor requests gebruikt worden; denk bijvoorbeeld aan proxies ...
Jup, en bijvoorbeeld mensen met een dynamisch IP nummer. Die kunnen dan bij een update van hun IP nummer, alle plaatjes niet meer bekijken. Oftewel, je zal een andere oplossing moeten verzinnen dan een keiharde IP check. Tenzij al je gebruikers beschikken over statische IP adressen.

  • Bozozo
  • Registratie: Januari 2005
  • Laatst online: 20-02-2025

Bozozo

Your ad here?

Topicstarter
De plaatjes hoeven alleen gedurende de huidige sessie beschikbaar te zijn, dus dynamische IP's zijn niet zo'n probleem. Natuurlijk zijn er met PHP veel makkelijkere oplossingen te bedenken, en veel betere manieren om de gebruikers te tracken, maar ik wil nou juist proberen PHP uit te sluiten. Nogmaals, het lijkt me enorm zonde van de resources om voor elke image request een readfile() uit te voeren.
Afaik is htaccess gemaakt voor kleine dingen, niet echt om voor 100.000 plaatjes allemaal aparte regels erin te hebben staan. Daar is php in combinatie met een dbase naar mijn idee veel beter in.
De htaccess wordt niet groter. Wat ik wil is:
  1. Gebruiker uploadt plaatje. Wordt met PHP opgeslagen als '/userimages/plaatje_[ip_adres]_[nr].jpg'
  2. Gebruiker gebruikt de webapp. Alle plaatjes worden (door PHP) geschreven als <img src="/userimages/plaatje_[ip_adres]_[nr].jpg" />
  3. Op de server komt een request binnen voor "/userimages/plaatje_[ip_adres]_[nr].jpg". Een htaccess bestand blokkeert het request tenzij het afkomstig is van [ip_adres].
Op deze manier kan elk plaatje alleen door de rechthebbende gebruiker worden bekeken, zonder dat PHP benodigd is met de resource-slurpende readfile() functie.

Ik weet alleen niet of HTAccess hier wel toe in staat is. De URL moet worden geparst, en het resulterende IP-adres moet worden gebruikt in een 'allow from' statement. Zoiets heb ik nog nooit gedaan (of zien doen) dus ik vraag me af in welke richting ik de syntax hiervoor zou moeten zoeken.

TabCinema : NiftySplit


  • GlowMouse
  • Registratie: November 2002
  • Niet online
Met mod_rewrite kan wel ongeveer wat jij wilt. Dit stukje schrijft image.jpg om naar image.jpg-127.0.0.1.jpg. Enige wat je nog moet toevoegen is dat je niet direct image.jpg-[ip].jpg op mag vragen, maar als je even naar mod_rewrite kijkt moet dat te doen zijn :)
code:
1
2
RewriteCond %{REQUEST_FILENAME}-%{REMOTE_ADDR}.jpg -f
RewriteRule ^(.*).jpg$ $1.jpg-%{REMOTE_ADDR}.jpg

  • Bozozo
  • Registratie: Januari 2005
  • Laatst online: 20-02-2025

Bozozo

Your ad here?

Topicstarter
Volgens mij gaat dat niet, ivm recursiviteit. Als je die rewrite doet dan gaat de rewritten URL opnieuw door de htaccess, waar hij dan wordt gezien als een 'directe' link. Je kunt dan geen onderscheid maken tussen illegale links en rewritten legale links.

Om die reden moet je bijvoorbeeld index.php altijd uitsluiten van de rewriterules, anders:
  1. ./a
  2. index.php?title=a
  3. index.php?title=index.php?title=a
  4. index.php?title=index.php?title=index.php?title=a
  5. etc

TabCinema : NiftySplit


  • GlowMouse
  • Registratie: November 2002
  • Niet online
Bozozo schreef op donderdag 31 juli 2008 @ 14:35:
Volgens mij gaat dat niet, ivm recursiviteit. Als je die rewrite doet dan gaat de rewritten URL opnieuw door de htaccess, waar hij dan wordt gezien als een 'directe' link. Je kunt dan geen onderscheid maken tussen illegale links en rewritten legale links.
Daarom moet je bij de illegale links een stukje opnemen waardoor alleen directe aanvragen meegenomen worden :)
Pagina: 1