14. juni 2006 - 21:48Der er
17 kommentarer og 2 løsninger
Hvordan undgår jeg hotlinking?
Hejsa,
Jeg er ved at lave en billede upload side ala imagevenue.com.
Jeg har mine thumbs i en mappe kaldet /thumbs og mine store billeder i en mappe kaldet /files.
Det jeg ønsker at at filer i mappen /files ikke skal kunne tilgås direkte i browseren, eller kaldes via en anden side. De skal altså kun vises såfremt det er min images.aspx side der kalder dem.
Hos Computerworld it-jobbank er vi stolte af at fortsætte det gode partnerskab med folkene bag IT-DAY – efter vores mening Danmarks bedste karrieremesse for unge og erfarne it-kandidater.
Hvis du kun giver læse-adgang til ASPNET brugeren på serveren kan du hente billederne med et link som image.aspx?name=billede.gif - i stedet for direkte links.
Så kan du i din image.aspx side, kun give adgang hvis det er den rigtige referer der spørger. Referer kan du få via Request.UrlReferer ...
Jeg tror at dj_uncas's løsning er den bedste for dig. Du laver en side som streamer billederne/billedet ud til brugeren. Du kan lægge billederne i en mappe uden for IIS. Du kan ikke gennem IIS benytte web.config til at forhindre brugerne i at kalde et bestemt billede. Du kan ligge billederne i en mappe hvor kun din asp.net app får adgang til.
Omkring streaming af billedet, så er det bestemt en kreativ løsning. Jeg har benyttet den før i forbindelse med Classic ASP, hvor der blev sat en session på images.asp og billedet blev så kun streamet via imagestream.asp såfremt sessionen var sat.
Problemet er bare at det er for ressourcekrævende at skulle streame alle billeder ud :(
protected string GetImageFile(string imageId) { // her skal der jo nok ske noget klog iht. id'et, men for nu: return "tuba.jpg"; }
public bool IsReusable { get { return true; } } }
Skriv i din konfigurationsfil, at billeder ikke skal serveres til brugeren ved at assciere med en eksisterende (og afvisende) handler: <?xml version="1.0"?> <configuration> <appSettings/> <connectionStrings/> <system.web> <httpHandlers > <add path="*.jpg" verb="*" type="System.Web.HttpForbiddenHandler" /> </httpHandlers> <compilation debug="true"/> <authentication mode="Windows"/> </system.web> </configuration>
Og sæt et par billeder på en form så du kan se forskellen:
Vil mene, at billedet kan vises ved direkte kald - eks. www.somedomain.images/tuba.jpg medmindre der ændres i IIS'en så kald til .jpg filer håndteres af .net
Der kommer sikkert flere spørgsmål i nærmeste fremtid..
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.